Buenas Bucanero, le hice unas modificaciones, agregue otras unidades para que funcione para Android, pero aun salen errores como:
Variable
Data no existe
Estoy usando Delphi Rio 10.3, quisas sea por las versiones cada vez son diferentes, pero seguire buscando, gracias.
Código Delphi
[-]
unit ListItemHelpers;
interface
uses
Windows, Vcl.ComCtrls,
FMX.ListView, FMX.ListView.Types, FMX.Grid.Style, FMX.ListView.Appearances,
FMX.ListView.Adapters.Base, FMX.StdCtrls;
type
TListItemHelper = class helper for TListItem
private
function GetRect(AColumn: Integer): TRect;
function GetProgressBar: TProgressBar;
public
procedure AdjustProgressBar;
function AddPRogressBar(AColumn: integer = 1): TProgressBar;
procedure DeleteProgressBar;
property ProgressBar: TProgressBar read GetProgressBar;
end;
implementation
uses
Vcl.Dialogs, System.SysUtils, System.UITypes;
procedure Error(E:Exception; const msgTxt:String);
begin
{$IF DEFINED(MSWINDOWS)}
MessageDlg(E.Message + #13 + msgTxt, mtError, [mbOK], 0);
{$ENDIF)}
end;
function TListItemHelper.AddPRogressBar(AColumn: integer): TProgressBar;
begin
if assigned(Data) then begin
Result := data;
exit;
end;
result := TProgressBar.Create(TListView);
result.parent := TListView;
result.DoubleBuffered := true;
if (AColumn <= 0) then
AColumn := 1;
result.Tag := AColumn;
Data := result;
AdjustProgressBar;
end;
procedure TListItemHelper.AdjustProgressBar;
var
pb: TProgressBar;
begin
pb := Data; if assigned(pb) then
pb.BoundsRect := GetRect(pb.Tag);
end;
procedure TListItemHelper.DeleteProgressBar;
var
pb: TProgressBar;
begin
try
pb := Data;
if assigned(pb) then
try
freeAndNil(pb);
data := Nil;
except
on E: Exception do
error(e, 'TListItemHelper.DeleteProgressBar');
end;
except
on E: Exception do
error(E, 'TListItemHelper.DeleteProgressBar');
end;
end;
function TListItemHelper.GetProgressBar: TProgressBar;
begin
try
Result := nil;
if not Assigned(Data) then
AddPRogressBar;
result := TObject(Data) as TProgressBar
except
on E: Exception do
Error(E, 'TListItemHelper.GetProgressBar');
end;
end;
function TListItemHelper.GetRect(AColumn: Integer): TRect;
var
i: longint;
begin
result := DisplayRect(drBounds);
with TListView(ListView) do begin
if AColumn = 0 then
AColumn := columns.Count - 1;
for i := 1 to AColumn do
result.left := result.left + columns[i - 1].Width;
result.right := result.Left + columns[AColumn].Width;
end;
end;
end.