Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - ListBox Fraaaaageeee


patrick dee - Mi 02.10.02 16:44
Titel: ListBox Fraaaaageeee
hallo

habe folgende einträge in der listbox stehen

8500
6500
0000
8887
8975

nun meine Frage wie kann ich in einem Label anzeigen wievile Einträge es mit 8 gibt. also wie oben steht müßtze Label 1.Caption 8 anzeigen. Also nur zählen wenn das erste zeichen eine 8 ist alle anderen nicht.

danke

patrick dee


Klabautermann - Mi 02.10.02 16:49

Hallo,

vesulche mal:

Quelltext
1:
Label1.Caption := IntToStr(ListBox1.Items.Count);                    


Gruß
Klabautermann


Christian S. - Mi 02.10.02 16:56

Hi!

Ich verstehe nicht ganz, was Du machen möchtest. Wenn ich Deinen letzten Satz anschaue, möchtest Du folgendes: du möchtest zählen, wieviele Items als erstes Zeichen eine 8 haben, oder?

Geh doch einfach alle Items durch und erhöhe einen Zähler um eins, wenn das erste Zeichen '8' ist.

Also so:


Quelltext
1:
2:
3:
4:
5:
6:
VAR i, anzahl : INTEGER;
begin
  anzahl:=0;
  for i:=0 TO ListBox1.Items.Count-1 do
  if (ListBox1.Items[i])[1] = '8' then Inc(anzahl);
end;


ACHTUNG: Habe den Code einfach so hingeschrieben, ohne ihn zu testen!

MfG,
Peter


matze - Mi 02.10.02 17:42

ist das wirklich so, dass man da einfach ListBox1.Items[i])[1] nehem kann und dann das erste zeichen bekommt ??

Ich würds zur sicherheit per COPY machen !!!


majolo - Mi 02.10.02 17:49

hatte mal dazu einen ähnlichen Thread:
http://www.auq.de/viewtopic.php?t=2406
Vielleicht hilfts.
Gruss
majolo


Christian S. - Mi 02.10.02 18:02

@Matze: jetzt hattest Du mich so verunsichert, dass ich es ausprobiert habe. Und ja, es funktioniert.

@patrick dee:
solltest Du vielleicht doch die Einträge zählen wollen, die generell eine '8' enthalten, solltest Du mit Pos('8',ListBox1.Items[i]) arbeiten.

MfG,
Peter


matze - Mi 02.10.02 18:04

@peterlustig !!!

super !!! jetzt hab ich wieder was dazugelernt !!! danke !!!


patrick dee - Mi 02.10.02 20:22

Es geht fast :

ABER ERST EINMAL D A N K E AN ALLE WIRKLICH SUPER WIE SCHNELL ES HIER ANTWORTEN GIBT. :P

So hier mein code für meine Playliste :

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
procedure THaupt_Form.ComboBox1Change(Sender: TObject);
var
  Found : boolean;
  i     : integer;
  x     : integer;
  anzahl: integer;
begin

  Found := False;
  if( ComboBox1.Text = '24 Uhr' )then
  begin
    with ListBox1.Items do
    begin
      BeginUpdate;
      Clear;
      for i := 0 to Playliste.Count - 1 do
        Add( Playliste.Strings[ i ]);
      EndUpdate;
    end;
    Abort;
  end;
  i := 0;
  with ListBox1.Items do
  begin
    BeginUpdate;
    Clear;
    while not Found and( i < Playliste.Count )do
    begin
      if( Pos( ComboBox1.Text, Playliste.Strings[ i ]) > 0 )then
      begin
        Inc( i );
        while not( Pos( ' Uhr', Playliste.Strings[ i ]) > 0 )do
        begin
          Add( Playliste.Strings[ i ]);
          Inc( i );
        end;
        Found := True;
      end
      else
        Inc( i );
    end;
//---------------- alle 8000 Einträge zählen um die Titel f. die Stunde zu bekommen ------
   anzahl:=0;
  for x:=0 TO ListBox1.Items.Count-1 do
  if (ListBox1.Items[x])[1] = '8' then Inc(anzahl);
  StatusBar1.SimpleText := ' Titel für diese Stunde ' + (IntToStr(anzahl));

   EndUpdate;
  end;
end; // ComboBox1Change

Wenn ich nun in der ComboBox die 24 Stunden aufrufe also die Liste
für den Tag stürzt mein Programm ins Nirvana ab und es wird nichts gezählt. Was ist da noch faul ????

UND GANZ WICHTIG :

wie kriege ich es hin das zb ein Timer immer kurz vor der nächsten Stunde also Beispiel es ist jetzt 20:59:59 dann soll die Liste für die nächste Stunde geladen werden usw. Wenn es 23:59:59 ist soll die für den nächsten Tag geladen werden.

Laden tue ich meine Listen so :

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure THaupt_Form.Programm11Click(Sender: TObject);
var
  datum : string;
begin
  datum:= FormatDateTime('dd-mm-yy',NOW);
  with Playliste do
  begin
    BeginUpdate;
      Clear;
       LoadFromFile( Tools_Form.edit1.text + datum + '.pl1' );
        Prog_Label.Caption := 'Prog. 1';
         EndUpdate;
         end;

Also Thanks für EURE super Hilfe. Und wie geht das mit der Pos Geschichte ????????????

euer

patrick dee

(03.10.02 00:55 Tino) Code-Tags hinzugefügt.


Christian S. - Mi 02.10.02 21:06

Hi!

patrick dee hat folgendes geschrieben:

Wenn ich nun in der ComboBox die 24 Stunden aufrufe also die Liste
für den Tag stürzt mein Programm ins Nirvana ab und es wird nichts gezählt. Was ist da noch faul ????

Ich weiß natürlich nicht genau, was dein Programm machen soll, aber müsste durch das Abort; nicht das ganze beendet werden, bevor er überhaupt zum Zählen kommt? Ich habe Abort; noch nie benutzt, aber ich könnte es mir vorstellen.

patrick dee hat folgendes geschrieben:

wie kriege ich es hin das zb ein Timer immer kurz vor der nächsten Stunde also Beispiel es ist jetzt 20:59:59 dann soll die Liste für die nächste Stunde geladen werden usw. Wenn es 23:59:59 ist soll die für den nächsten Tag geladen werden

Timer ist genau das Stichwort. Du packst einen Timer auf deine Form, der jede Sekunde die aktuelle Uhrzeit überprüft und bei Bedarf die Prozedur zum Laden der Liste startet. .... So ungefähr zumindest.


Patrick Dee hat folgendes geschrieben:

Und wie geht das mit der Pos Geschichte ????????????

Es war einmal ein Pos ... Nein, okay, Pos(substring, string) gibt Dir, wenn Substring in String enthalten ist, die Position des ersten Zeichens von Substring im String. Kommt Substring nicht im String vor, gibt Pos 0 zurück.

MfG,
Peter

<edit>
Rückst Du Deinen Quelltext nicht ein, oder schluckt das Forum das Einrücken nur, wenn Du die Codemarkierungen verwendest?
</edit>


Tino - Do 03.10.02 00:55

Peter Lustig hat folgendes geschrieben:
Rückst Du Deinen Quelltext nicht ein, oder schluckt das Forum das Einrücken nur, wenn Du die Codemarkierungen verwendest?

Ja, Leerzeichen am Anfang einer Zeile werden entfernt. Wenn man den Sourcecode in Code-Tags einschließt bleiben sie erhalten.

Gruß