![]() |
ListBox auslesen
Hi ich habe folgendes Problem:
Ich habe eine ListBox, in die ich Dateinamen eines Ordners reingeschrieben habe. Nun möchte ich diese Einträge per Timer auslesen und zwar, damit mein Label die einzelnen Einträge hintereinander anzeigen kann. Wie kann ich das machen? |
Re: ListBox auslesen
Hi!
Willkommen in der DP!! Meinst du sowas:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var i: integer; begin for i:=0 to ListBox1.Count-1 do Label1.Caption:=ListBox1.Items[i]; end; |
Re: ListBox auslesen
Hallo und herzlich Willkommen in der DP!
Dann schau Dir dochmal in der OH an wie man den Timer benutzt, mittels ItemIndex der ListBox, was auch in der OH beschrieben ist, kannst Du dann die Einträge erreichen. |
Re: ListBox auslesen
Hallo Matze,
würde das nicht so schnell ablaufen, dass man immer nur den letzten Eintrag sieht? |
Re: ListBox auslesen
Bevor du den Timer startest setzt du LB.ItemIndex := 0;
Dann könntest du in dem Timer-Ereignis
Delphi-Quellcode:
Alternativ zu ItemIndex kannst du auch selber eine Integer-Variable deklarieren.
with LB do
begin Label.Caption := Items[ItemIndex]; if Item >= Count - 1 then T.Enabled := false // Timer stoppen else ItemIndex := ItemIndex + 1; end; |
Re: ListBox auslesen
@choose: Wenn man das Intervall des Timers auf 1000 stellt (standard) dann sieht man die Einträge im Sekundentakt im Label. ;)
|
Re: ListBox auslesen
@Matze
schau deinen Code nochmal genau an Ich würde bloß aller einer Sekunde den letzten Eintrag im Label sehen. |
Re: ListBox auslesen
oh :wall: stimmt :wall:
|
Re: ListBox auslesen
Delphi-Quellcode:
with LB do
begin Label.Caption := Items[ItemIndex]; if Item >= Count - 1 then ItemIndex := 0 // ODER um vorne wieder zu beginnen else ItemIndex := ItemIndex + 1; end; |
Re: ListBox auslesen
Meins könnte man auch so schreiben. ;)
Delphi-Quellcode:
var i: integer;
... procedure TForm1.Timer1Timer(Sender: TObject); begin Label1.Caption:=ListBox1.Items[i]; inc(i); //fals wiederholt werden soll: if i=ListBox1.Count then i:=0; end; |
Re: ListBox auslesen
Danke für den freundlichen Empfang :-D
Tja das Problem hatte ich eben auch, dass die Schleife so schnell durchlaufen ist, dass ich immer den letzten Eintrag gesehen habe. @Matze: Bei deinem Quelltext zeigt er immer nur den 1ten eintrag an! @neolithos: Was meinst du mit
Delphi-Quellcode:
Item gibts gar nicht!?
if Item >= Count - 1 then
:wiejetzt: Hätte übrigens nicht erwartet, gleich so mit Antworten überhäuft zu werden :mrgreen: Schön wär allerdings, wenn jemand noch ne funktionstüchtige Schleife posten könnte :angle2: |
Re: ListBox auslesen
Tschuldigung!!!
Kleiner Tippfehler Item = ItemIndex |
Re: ListBox auslesen
Hab ich mir fast gedacht, dass du ItemIndex gemeint hast, jedoch kommt dann:
Listenindex überschreitet das Maximum(-1) :( |
Re: ListBox auslesen
Ist überhaupt was in der Liste drinn?
Sonst schick mal dein Projekt bzw. den Ausschnitt falls es zu groß oder wichtig ist (per P.M. versteht sich). Rein von der logik sollte es gehen. |
Re: ListBox auslesen
Danke jetzt funktioniert es endlich (Denkfehler war schuld).
Der Quellcode von Matze funktioniert, ich hab jedoch nen Fehler gemacht, indem ich jedesmal i mit 0 deklariert hab, deshalb hat er nur den 1ten Eintrag angezeigt. Jetzt hab ich die Variable einfach global gemacht und ihr einen Anfangswert zugewiesen und siehe da: es funktioniert :) Vielen Dank für eure Mühe!! :cyclops: |
Re: ListBox auslesen
Hm aber mit dem Quelltext gibts noch Probleme.
Und zwar iss keine "Sperre" eingebaut, d.h. Delphi zählt per inc die Variable i immer weiter hoch und irgendwann kommt der Punkt, wo i größer ist als der ListBox.Count und dann kommt der Fehler! Ich hab versucht, per while-Schleife eine Sperre einzubauen, hat nicht ganz funktioniert, hier der Code:
Delphi-Quellcode:
Hm hab scho wieder nen kleinen Fehler entdeckt und zwar das = vor ListBox1.Count aber wenn ich das wegmache, bleibt der Label1.Caption Eintrag nach ein paar Änderungen stehen. Komisch...
procedure TForm1.Timer3Timer(Sender: TObject);
begin Label1.Caption := ListBox1.Items[i]; while i <= ListBox1.Count-1 do inc(i); end; |
Re: ListBox auslesen
Ich hatte i global deklariert (sieht man am Code). ;)
also, es geht so:
Delphi-Quellcode:
oder so:
procedure TForm1.Timer1Timer(Sender: TObject);
begin Label1.Caption:=ListBox1.Items[i]; if i<ListBox1.Count-1 then inc(i); end;
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin Label1.Caption:=ListBox1.Items[i]; inc(i); if i=ListBox1.Count then Timer1.Enabled:=false; end; |
Re: ListBox auslesen
Achja, nochwas zu dem Fehlerchen in deinem Code:
Die while-Schleife wird bei dir jede Sekunde (oder was eingestellt ist) ausgeführt ==> kann nicht gehen :mrgreen: |
Re: ListBox auslesen
Stimmt danke, auf die If Lösung bin ich auch grade gekommen, ich hab es mir fast gedacht... :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:56 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 by Thomas Breitkreuz