Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Desarrollo en Delphi para Android
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy


 
 
Herramientas Buscar en Tema Desplegado
  #5  
Antiguo 17-02-2020
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Poder: 13
bucanero Va camino a la fama
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;


{ TListItemHelper }

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
    ///  se le asigna como OWNER del PROGRESSBAR el listView propietario del LISTITEM
    ///  en donde queremos el PROGRESSBAR, para que asi, se libere automaticamente
    ///  tambien al liberar el listView
    ProgressBar := TProgressBar.Create(ListView);
    /// se le asigna como padre el 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
  /// al liberar el ProgressBar no se por que da un error,
  /// asi que en principio lo dejo sin liberar.
  /// Aunque queda pendiente de ver por que lo hace.
  /// Tampoco supone un gran problema porque se creo con padre
  /// y ya se encarga el proceso de eliminarlo automaticamente
  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
    // añadir un nuevo item al listview
    MiItem := add;
    MiItem.Text := 'mi item';
  end;
end;

procedure TForm1.ButtonAddProgressBarClick(Sender: TObject);
begin
  if Assigned(MiItem) then
    // Insertar un ProgressBar en la posicion requerida
    MiItem.AddPRogressBar(RectF(10, 10, 300, 40));
end;

procedure TForm1.ButtonDeleteProgressBarClick(Sender: TObject);
begin
  if Assigned(MiItem) then
    // eliminar el progressBAr del ITEM
    MiItem.DeleteProgressBar;
end;

Con esto te debería de funcionar
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
progressbar 11_8_88 C++ Builder 2 04-11-2008 19:46:33
ProgressBar chinchan C++ Builder 6 16-10-2008 15:15:00
Progressbar Paulao Varios 6 28-05-2008 20:49:41
ProgressBar Con dos Formularios mcarazas Varios 2 23-06-2006 04:18:32
Progressbar mminorm Varios 1 29-05-2005 07:19:21


La franja horaria es GMT +2. Ahora son las 14:37:02.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi