Einzelnen Beitrag anzeigen

CCRDude
(Gast)

n/a Beiträge
 
#8

Re: Listview zeigt nichts an?

  Alt 17. Apr 2007, 09:31
Na gut, hier eine kleine Beispiel-Form, mit ListView1.OwnerData = true:

Delphi-Quellcode:
unit FormUnitVirtualListViewDemo;

interface

uses
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
   Dialogs, ComCtrls, StdCtrls;

type
   TForm1 = class(TForm)
      Button1: TButton;
      ListView1: TListView;
      procedure FormCreate(Sender: TObject);
      procedure FormDestroy(Sender: TObject);
      procedure Button1Click(Sender: TObject);
      procedure ListView1Data(Sender: TObject; Item: TListItem);
   private
      { Private declarations }
      FSomeData: TStringList;
   public
      { Public declarations }
   end;

var Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
   FSomeData.Add(FormatDateTime('c', Now));
   ListView1.Items.Count := FSomeData.Count;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   FSomeData := TStringList.Create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
   FSomeData.Free;
end;

procedure TForm1.ListView1Data(Sender: TObject; Item: TListItem);
begin
   Item.Caption := FSomeData[Item.Index];
   Item.SubItems.Add('Hallo');
   Item.SubItems.Add('Welt');
end;

end.
Wie ich schon sagte: die Daten außerhalb der Liste verwalten, einfachste Möglichkeit hier in einer TStringList, etwas komplexer (dafür ohne Stringbastelei mit mehr als 1/2 Feldern möglich) in einer TCollection (geht natürlich mit etwas weniger Tippaufwand auch eine simple TList mit eigenem Objekt).

In dieser Listview-externen Datensammlung kannst Du dann effektiver schalten und walten, und wenn Sich die Anzahl ändert, diese über die Count-Zuweisung anpassen. Das Listview selber verwaltet nur die Anzahl (für Scrollbalken), und fragt für jede Zeile, wenn sie angezeigt werden soll, die Daten per OnData ab.
  Mit Zitat antworten Zitat