Einzelnen Beitrag anzeigen

Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
 
Delphi 11 Alexandria
 
#15

AW: Timer für ListBox

  Alt 25. Okt 2017, 16:53
Ich glaube ein VirtualStringTree wäre in der Angelegenheit etwas overkill. Ich gehe mal davon aus, dass der TE gerade erst mit dem Programmieren angefangen hat und der VST dann "etwas" zu kompliziert wäre.
Ich finde das nicht. Ich habe ja nun schon einigen geholfen beim Lernen und so kompliziert ist der VST nicht, wenn man den für einfache Zwecke benutzt. Klar, man kann damit auch deutlich kompliziertere Sachen machen. Aber nur die Anzahl der Einträge setzen und OnGetText implementieren... das ist nicht komplizierter als in einer anderen Liste die Einträge zu löschen und neu hinzuzufügen.

Komplettes Beispiel (Projekt liegt im Anhang):
Delphi-Quellcode:
unit VstDemo;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls,
  VirtualTrees, System.Generics.Collections, System.DateUtils;

type
  TMyData = class
  private
    FCreationTime: TDateTime;
  public
    constructor Create(const ATime: TDateTime);
    property CreationTime: TDateTime read FCreationTime write FCreationTime;
  end;

  TfrmVstDemo = class(TForm)
    vstEntries: TVirtualStringTree;
    btnAdd: TButton;
    tmrDelete: TTimer;
    procedure btnAddClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure vstEntriesGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
      var CellText: string);
    procedure tmrDeleteTimer(Sender: TObject);
  private
    FEntries: TList<TMyData>;
    procedure UpdateTree;
  public
  end;

var
  frmVstDemo: TfrmVstDemo;

implementation

{$R *.dfm}

{ TfrmVstDemo }

procedure TfrmVstDemo.btnAddClick(Sender: TObject);
begin
  // Eintrag hinzufügen
  FEntries.Add(TMyData.Create(Now));
  UpdateTree;
end;

procedure TfrmVstDemo.FormCreate(Sender: TObject);
begin
  // Liste erzeugen
  FEntries := TObjectList<TMyData>.Create;
end;

procedure TfrmVstDemo.FormDestroy(Sender: TObject);
begin
  // Liste freigeben
  FEntries.Free;
end;

procedure TfrmVstDemo.tmrDeleteTimer(Sender: TObject);
var
  i: Integer;
begin
  // Alle Einträge durchgehen und nach 5 Sekunden herauswerfen
  for i := FEntries.Count - 1 downto 0 do
    if SecondsBetween(FEntries[i].CreationTime, Now) >= 5 then
      FEntries.Delete(i);
  // Baumanzeige aktualisieren
  UpdateTree;
end;

procedure TfrmVstDemo.UpdateTree;
begin
  // Anzahl der Einträge setzen und Anzeige aktualisieren
  vstEntries.ChildCount[vstEntries.RootNode] := FEntries.Count;
  vstEntries.Invalidate;
end;

procedure TfrmVstDemo.vstEntriesGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
  var CellText: string);
begin
  // Text, der für den Eintrag angezeigt werden soll, liefern indem man diesen in CellText schreibt
  CellText := 'Eintrag von ' + DateTimeToStr(FEntries[Node.Index].CreationTime);
end;

{ TMyData }

constructor TMyData.Create(const ATime: TDateTime);
begin
  FCreationTime := ATime;
end;

end.
Angehängte Dateien
Dateityp: 7z VST Liste.7z (50,8 KB, 1x aufgerufen)
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat