Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi ListBox auslesen (https://www.delphipraxis.net/11655-listbox-auslesen.html)

Killer 11. Nov 2003 13:08


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?

Matze 11. Nov 2003 13:10

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;

Daniel B 11. Nov 2003 13:11

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.

choose 11. Nov 2003 13:12

Re: ListBox auslesen
 
Hallo Matze,

würde das nicht so schnell ablaufen, dass man immer nur den letzten Eintrag sieht?

neolithos 11. Nov 2003 13:13

Re: ListBox auslesen
 
Bevor du den Timer startest setzt du LB.ItemIndex := 0;

Dann könntest du in dem Timer-Ereignis

Delphi-Quellcode:
with LB do
  begin
    Label.Caption := Items[ItemIndex];
    if Item >= Count - 1 then
       T.Enabled := false // Timer stoppen
    else
       ItemIndex := ItemIndex + 1;
  end;
Alternativ zu ItemIndex kannst du auch selber eine Integer-Variable deklarieren.

Matze 11. Nov 2003 13:15

Re: ListBox auslesen
 
@choose: Wenn man das Intervall des Timers auf 1000 stellt (standard) dann sieht man die Einträge im Sekundentakt im Label. ;)

neolithos 11. Nov 2003 13:17

Re: ListBox auslesen
 
@Matze

schau deinen Code nochmal genau an

Ich würde bloß aller einer Sekunde den letzten Eintrag im Label sehen.

Matze 11. Nov 2003 13:18

Re: ListBox auslesen
 
oh :wall: stimmt :wall:

neolithos 11. Nov 2003 13:19

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;

Matze 11. Nov 2003 13:25

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;

Killer 11. Nov 2003 14:46

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:
if Item >= Count - 1 then
Item gibts gar nicht!?

: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:

neolithos 11. Nov 2003 14:48

Re: ListBox auslesen
 
Tschuldigung!!!

Kleiner Tippfehler

Item = ItemIndex

Killer 11. Nov 2003 14:50

Re: ListBox auslesen
 
Hab ich mir fast gedacht, dass du ItemIndex gemeint hast, jedoch kommt dann:
Listenindex überschreitet das Maximum(-1) :(

neolithos 11. Nov 2003 15:10

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.

Killer 11. Nov 2003 15:26

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:

Killer 11. Nov 2003 16:00

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:
procedure TForm1.Timer3Timer(Sender: TObject);
begin
 Label1.Caption := ListBox1.Items[i];
 while i <= ListBox1.Count-1 do
 inc(i);
end;
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...

Matze 11. Nov 2003 17:03

Re: ListBox auslesen
 
Ich hatte i global deklariert (sieht man am Code). ;)

also, es geht so:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Label1.Caption:=ListBox1.Items[i];
  if i<ListBox1.Count-1 then inc(i);
end;
oder so:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Label1.Caption:=ListBox1.Items[i];
  inc(i);
  if i=ListBox1.Count then Timer1.Enabled:=false;
end;

Matze 11. Nov 2003 17:38

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:

Killer 12. Nov 2003 12:18

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 18:08 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz