He estado revisando el TLISTVIEW de firemonkey y tiene algunas diferencias con respecto al de la VCL en particular creo que no puedes definir columnas, o no he conseguido ver como se definen. El tema de las columnas en el truco anterior era para determinar la posición del progressbar dentro del listView, al no disponer de esta propiedad, la posición hay que darsela a mano.
Y modificando un poco el código anterior, queda así y con este creo que te debe de funcionar:
Código Delphi
[-]unit ListViewItemHelper;
interface
uses Windows, System.Types, FMX.ListView, FMX.StdCtrls;
type
TListViewItemHelper = class helper for TListViewItem
private
function GetProgressBar: TProgressBar;
function GetListView: TListView;
procedure SetProgressBar(const Value: TProgressBar);
property ListView: TListView read GetListView;
function AssignedProgressBar:Boolean;
public
function AddPRogressBar: TProgressBar; overload;
function AddPRogressBar(ARectF: TRectF): TProgressBar; overload;
procedure DeleteProgressBar;
property ProgressBar: TProgressBar read GetProgressBar write SetProgressBar;
end;
implementation
uses
Vcl.Dialogs, System.SysUtils;
procedure Error(E:Exception; const msgTxt:String);
begin
{$IF DEFINED(MSWINDOWS)}
MessageDlg(E.Message + #13 + msgTxt, mtError, [mbOK], 0);
{$endif}
end;
function TListViewItemHelper.AddPRogressBar(ARectF: TRectF): TProgressBar;
begin
Result := AddPRogressBar;
if Assigned(result) then
progressBar.BoundsRect := ARectF;
end;
function TListViewItemHelper.AddPRogressBar: TProgressBar;
begin
if not AssignedProgressBar then begin
ProgressBar := TProgressBar.Create(ListView);
ProgressBar.parent := ListView;
end;
Result := ProgressBar
end;
function TListViewItemHelper.AssignedProgressBar: Boolean;
begin
Result := (tag <> 0) and assigned(TObject(Tag)) and (TObject(Tag) is TProgressBar);
end;
procedure TListViewItemHelper.DeleteProgressBar;
var
pb: TProgressBar;
begin
try
pb := ProgressBar;
if assigned(pb) then
try
freeAndNil(pb);
ProgressBar := nil;
except
on E: Exception do
error(E, 'TListItemHelper.DeleteProgressBar');
end;
except
on E: Exception do
error(E, 'TListItemHelper.DeleteProgressBar');
end;
end;
function TListViewItemHelper.GetListView: TListView;
begin
result := (Parent as TListView);
end;
function TListViewItemHelper.GetProgressBar: TProgressBar;
begin
try
Result := nil;
if not AssignedProgressBar then
AddPRogressBar;
result := (TObject(Tag)as TProgressBar);
except
on E: Exception do
Error(E, 'TListItemHelper.GetProgressBar');
end;
end;
procedure TListViewItemHelper.SetProgressBar(const Value: TProgressBar);
begin
if not assigned(Value) then
Tag := 0
else
Tag := Integer(Value);
end;
end.
Y la forma de uso es:
Código Delphi
[-]
uses ListViewItemHelper;
var
MiItem: TListViewItem = Nil;
procedure TForm1.ButtonAddItemClick(Sender: TObject);
begin
with ListView1.Items do begin
MiItem := add;
MiItem.Text := 'mi item';
end;
end;
procedure TForm1.ButtonAddProgressBarClick(Sender: TObject);
begin
if Assigned(MiItem) then
MiItem.AddPRogressBar(RectF(10, 10, 300, 40));
end;
procedure TForm1.ButtonDeleteProgressBarClick(Sender: TObject);
begin
if Assigned(MiItem) then
MiItem.DeleteProgressBar;
end;
Con esto te debería de funcionar