Delphi-PRAXiS
Seite 1 von 3  1 23      

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 Counter Beginnt nicht wieder mit zählen (https://www.delphipraxis.net/44477-counter-beginnt-nicht-wieder-mit-zaehlen.html)

Hallo_Thomas 19. Apr 2005 23:13


Counter Beginnt nicht wieder mit zählen
 
Ich habe folgendes Problem mit dem Quellcode; der Counter zählt zwar bei 1,3,7
aber er springt nicht auf null zurück bei 6 und beginnt auch nicht wieder von vorn zu zählen bei 1,3,7, wo liegt der Fehler?


Delphi-Quellcode:
begin
Counter := 0;
for g := 0 to Anzeige.Count-1 do
begin
if StrToInt(Anzeige.Items[g]) in [1,3,7] then
Inc(Counter)
else if StrToInt(Anzeige.Items[g]) in [6] then
Counter := 0 ;
Label6.Caption:= IntToStr(Counter) ;

p.S. Anzeige = Listbox1

freak4fun 19. Apr 2005 23:19

Re: Counter Beginnt nicht wieder mit zählen
 
Zitat:

Zitat von Hallo_Thomas
Delphi-Quellcode:
begin
Counter := 0;
for g := 0 to Anzeige.Count-1 do
begin
if StrToInt(Anzeige.Items[g]) in [1,3,7] then
Inc(Counter)
else if StrToInt(Anzeige.Items[g]) in [6] then
Counter := 0 ;
Label6.Caption:= IntToStr(Counter) ;

Der Counter wird bei 1, 3 und 7 um eins erhöht. Bei 6 wird er auf Null gesetzt. Was soll er mehr machen?

Du hast das alles in einer Schleife. Wenn die letzte Zahl eine 6 ist ist Counter auch 0.

Vielleicht nochmal durchdenken. :)

MfG
freak

Hallo_Thomas 19. Apr 2005 23:26

Re: Counter Beginnt nicht wieder mit zählen
 
Er soll wieder bei der Zahl 6 wieder im Label eine 0 Zeigen und wenn eine 1,3 oder 7 erscheint wieder zählen anfangen zu zählen.

leddl 19. Apr 2005 23:47

Re: Counter Beginnt nicht wieder mit zählen
 
Zitat:

aber er springt nicht auf null zurück bei 6 und beginnt auch nicht wieder von vorn zu zählen bei 1,3,7, wo liegt der Fehler?
Zitat:

Er soll wieder bei der Zahl 6 wieder im Label eine 0 Zeigen und wenn eine 1,3 oder 7 erscheint wieder zählen anfangen zu zählen.
Wie wäre es mal mit nem verständlichen Satz? So muß man sich das alles zusammenreimen...
Ich sehe in diesem Code keinen Fehler.
Das einzige was ich dir jetzt sagen kann ist, daß die Schleife auf jeden Fall zu schnell ist, um jede Änderung von Counter darzustellen. Da kommt das Label einfach nicht mit. Befüll dir mit Counter mal eine ListBox, dann kannst du genau überprüfen, wann Counter welchen Wert hat.

PS: Die Zeile
Delphi-Quellcode:
else if StrToInt(Anzeige.Items[g]) in [6] then
wäre anders wahrscheinlich einfacher:
Delphi-Quellcode:
else if Anzeige.Items[g] ='6' then

Hallo_Thomas 20. Apr 2005 00:36

Re: Counter Beginnt nicht wieder mit zählen
 
Sorry, is schon spät und das Filmchen nebenbei hat sein übriges getan.


Also noch mal kurz zurück mein hauptproblem liegt wohl eindeutig in dieser Zeile würde ich sagen


Delphi-Quellcode:
else if StrToInt(Anzeige.Items[g]) in [6] then
Counter := 0 ;
Ich möchte einfach, dass wenn die 6 erscheint der Counter auf null schaltet und wenn nun wieder eine 1,3, oder 7 erscheint er wieder diese befehlszeile ausführt:

Delphi-Quellcode:
if StrToInt(Anzeige.Items[g]) in [1,3,7] then
Inc(Counter)
Irgendwie führt diese Befehlszeile dann aus, selbst wenn ich die drücke.


Delphi-Quellcode:
else if StrToInt(Anzeige.Items[g]) in [6] then
Counter := 0 ;


Dankeschön und gute Nacht!

leddl 20. Apr 2005 00:40

Re: Counter Beginnt nicht wieder mit zählen
 
OK, also meine Tips scheinen dich nicht zu interessieren...

//Edit:
Mit der Zeile hier kann ich immer noch nich so recht was anfangen...
Zitat:

Irgendwie führt diese Befehlszeile dann aus, selbst wenn ich die drücke.

Hallo_Thomas 20. Apr 2005 00:56

Re: Counter Beginnt nicht wieder mit zählen
 
Da ich ein Newbie bin, versuch ich ja alles so gut umzusetzen wie ich verstehe und ausdrücken kann:


Irgendwie führt diese Befehlszeile dann aus, selbst wenn ich die 1 drücke.
Ich meinte da müsste doch der Counter wieder zählen.

leddl 20. Apr 2005 01:05

Re: Counter Beginnt nicht wieder mit zählen
 
Ich versteh nicht, was du mit "drücken" meinst? Du gehst doch die Items einer ListBox oä durch. Was hat das mit "drücken" zu tun?

Hallo_Thomas 20. Apr 2005 01:10

Re: Counter Beginnt nicht wieder mit zählen
 
ein gedanklicher fehler von mir, da ich den Button "1" DRÜCKE der nun als 1 in der Listbox erscheint

leddl 20. Apr 2005 01:33

Re: Counter Beginnt nicht wieder mit zählen
 
Ah OK. Das is halt immer das Problem. Ständig stellen die Leute Fragen und gehen davon aus, daß jeder schon im Voraus genau weiß, wie das ganze aufgebaut is. Aber ohne Informationen stochert man halt nur im Dunklen rum...

So, wie immer, wenn mir jemand erzählen will, daß ein Code nicht funktioniert, in dem ich keinen Fehler finden kann, hab ich das mal selber ausprobiert. Und ich kann nur sagen: Wo siehst du das Problem? Bei mir funktioniert das.

Nur verstehe ich den Aufbau der Funktion nicht ganz.
  1. Da fehlen Ends am Schluß...
  2. Warum aktualisierst du noch in der Schleife das Label? Angezeigt wird sowieso nur die letzte Belegung von Counter, da das Label mit dem Zeichnen nicht so schnell nachkommt.
  3. Warum arbeitest du mit Sets? Geht doch zumindest beim Teil mit der 6 einfacher mit nem String.
Hier mal etwas umgearbeitet, und die funktioniert bei mir einwandfrei - wobei sie das vorher auch schon gemacht hast. Sicher, daß du nicht einfach irgendetwas falsch gezählt hast?
Delphi-Quellcode:
Counter := 0;
for g := 0 to ListBox1.Items.Count-1 do
  Case ListBox1.Items[g][1] Of
    '1','3','7': inc(Counter);
    '6' : Counter := 0;
  End;
Label6.Caption:= IntToStr(Counter) ;
Ich hab jetzt hier mal mit Case gearbeitet. Damit ersparst du dir das IntToStr und die Sets. Allerdings mußte ich hierfür den Str durch das [1] in ein Char umwandeln. Das sollte aber nichts ausmachen, da ich mal davon ausgehe, daß sowieso nur Zahlen <= 9 benutzt werden, oder? Falls nicht, dann machs einfach wieder so:
Delphi-Quellcode:
Counter := 0;
for g := 0 to Anzeige.Items.Count-1 do
  If StrToInt(Anzeige.Items[g]) in [1,3,7] Then
      inc(Counter)
    else
      If Anzeige.Items[g] = '6' Then
        Counter := 0;
Label6.Caption:= IntToStr(Counter) ;


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:36 Uhr.
Seite 1 von 3  1 23      

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