![]() |
AW: Timer für ListBox
Zitat:
@Lucy: Vergiss goto, google es nicht und verankere in Deinem Hirn, daß goto ganz bestimmt nicht in Delphi existiert. Sherlock |
AW: Timer für ListBox
Wir machen das sehr einfach:
Wir nehmen eine TVirtualStringTree, die in OnGetText auf die Daten in einer Liste zugreift. Ein Timer (bzw. bei uns ein Thread, aber das ist ja egal) stößt dann das Aufräumen der Liste an, setzt ggf. die Anzahl der Elemente in der Liste neu bzw. ruft Invalidate auf. Daraufhin werden die dann aktuellen Elemente in der Liste gezeichnet. |
AW: Timer für ListBox
Zitat:
Ach Du störst Dich an dem GOTO ? Na dann nimmt man halt
Delphi-Quellcode:
oder
While not..... begin ... end
Delphi-Quellcode:
...
repeat ....until
ich wäre nie auf den Gedanken gekommen, daß man das als Delphi-Code mißverstehen könnte. Gruß K-H |
AW: Timer für ListBox
Zitat:
Aber trotzdem sollte er die Daten in einer Klasse ablegen. Die Instanz der Klasse sollte, wie auch schon des öfteren erwähnt, in einer ObjectList abgespeichert werden. Danach ist es ein Leichtes, die Liste (von oben nach unten) zu durchlaufen und dann die Einträge, die älter sind als 5 Minuten, aus der Liste zu entfernen. Schlussendlich müssten dann nur noch die Elemente in der ListBox neu erstellt/gezeichnet werden. @TE: Was hast du denn bereits von den Vorschlägen umgesetzt? Oder wo hängst du gerade :?: |
AW: Timer für ListBox
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
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. |
AW: Timer für ListBox
Zitat:
Nur würde ich sagen, dass der TE noch ein grundsätzliches (Verständnis)Problem hat. Aber das kann auch nur er selbst erläutern. Eventuell wird es ja durch dein Beispiel etwas deutlicher was wir die ganze Zeit versuchen zu erklären. |
AW: Timer für ListBox
Hallo,
vielen Dank für die ganzen Beiträge. Muss erstmal alles sortieren und ausprobieren. Danke :-) Habe mich für ein StringGrid entschieden, und teste noch ein wenig rum. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz