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 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) ;

Hallo_Thomas 20. Apr 2005 02:22

Re: Counter Beginnt nicht wieder mit zählen
 
Zu 1.) die Ends hab ich gerad etwas nach oben verschoben, läuft aber alles trotzdem genauso

zu2.) und3.) Ich bin hier bei Delphi noch recht frisch dabei, sehen wir mal von der Schule ab ist das mein erstes Programm was ich machen will, also eigentlich sehe ich im moment nur das Ziel, der Weg? Wer weis.


:wall: Nun mal sehen,


Problem;

Ich wollte nicht das der Counter(so wie im Moment stehenbleibt, sondern er sollte die allten werte löschen, also sich auf null setzen und bei [1,3,7] wieder zählen von vorn.

Bsp.

Counter; 1---2---3---0---1---2---3---4---0

Item;-----1---1---7---6---1---7---7---3---6




P.S. es gibt auch Zahlen über 9

leddl 20. Apr 2005 09:41

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

Zitat von Hallo_Thomas
Ich wollte nicht das der Counter(so wie im Moment stehenbleibt, sondern er sollte die allten werte löschen, also sich auf null setzen und bei [1,3,7] wieder zählen von vorn.

Bsp.

Counter; 1---2---3---0---1---2---3---4---0

Item;-----1---1---7---6---1---7---7---3---6

Ja und? Genau das macht der Code doch? :gruebel:
Gib doch mal eine Beispielreihe aus, die der Code bei dir jetzt ausspuckt. Dafür wäre es vielleicht praktisch, das ganze so umzubauen, daß du auch die Zwischenschritte angezeigt bekommst.
Delphi-Quellcode:
Counter := 0;
for g := 0 to Anzeige.Items.Count-1 do
begin
  If StrToInt(Anzeige.Items[g]) in [1,3,7] Then
      inc(Counter)
    else
      If Anzeige.Items[g] = '6' Then
        Counter := 0;
  ListBox1.Items.Add(Anzeige.Items[g] + ' ---> ' + IntToStr(Counter));
end;
Label6.Caption:= IntToStr(Counter) ;
Dann poste mal, was danach so alles in der ListBox steht.
Zitat:

Zitat von Hallo_Thomas
P.S. es gibt auch Zahlen über 9

OK, dann verwirf meine Änderungen. ;) (Bzw. mein zweites Codebeispiel im letzten Beitrag würde es auch tun.)

Hallo_Thomas 20. Apr 2005 10:02

Re: Counter Beginnt nicht wieder mit zählen
 
Jo, hab ich auch gerade festgestellt.


Mein Problem ergibt sich dadurch, dass ich meine aktuelen Zahlen oben erscheinen lasse.




Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
Var a:String;
begin
a:='1' ;
Anzeige.Items.Insert(0, a);
Dass wollte ich auch so beibehalten

freak4fun 20. Apr 2005 10:07

Re: Counter Beginnt nicht wieder mit zählen
 
Hat sich das jetzt erledigt? :gruebel:

Wenn es dir nicht weh tut, kannst du dann mal den Code zeigen, der dein Problem jetzt löst? :mrgreen:

MfG
freak

Catbytes 20. Apr 2005 10:16

Re: Counter Beginnt nicht wieder mit zählen
 
*LOL* göttlicher Thread...

Kann es sein, daß er mit "Counter" eigentlich "g" meint?

freak4fun 20. Apr 2005 10:17

Re: Counter Beginnt nicht wieder mit zählen
 
Ich hoffe nicht. :mrgreen:

MfG
freak

leddl 20. Apr 2005 10:18

Re: Counter Beginnt nicht wieder mit zählen
 
So wie ich das verstehe, ist das Problem noch nicht gelöst. :gruebel:

Warum postest du deinen Code denn nur so sporadisch? Bei solchen Codeschnipseln kann man wirklich nur raten. :roll:

Du hast also für jede Zahl einen eigenen Button? Auf Klick wird die aktuelle Zahl oben eingefügt. Und wann führst du jetzt die Schleife aus?

Poste doch einfach mal ein bißchen Code, sonst macht das wirklich keinen Spaß, dir zu helfen. Ich kann halt wirklich nur rumraten. Und dafür ist mir meine Zeit echt zu schade.

@Catbytes:
Lies dir den Thread nochmal genau durch, dann wirst du bemerken, daß du so falsch liegst, wie man nur falsch liegen kann. Was würde denn das bringen? Sobald sich eine '6' in der ListBox befindet, haste ne astreine Endlosschleife. Sauber nachgedacht! :roll:

Catbytes 20. Apr 2005 10:25

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

Zitat von leddl
@Catbytes:
Lies dir den Thread nochmal genau durch, dann wirst du bemerken, daß du so falsch liegst, wie man nur falsch liegen kann.

Schon klar, doch ist stolpere über diese Aussage:

Zitat:

Zitat von Hallo_Thomas
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

Abgesehen vom Satzbau verstehe ich es so, daß, wenn eine 1,3 oder 7 kommt, die Schleife (warum auch immer) wieder von vorne beginnen soll. Aber ohne Code ist halt alles nur Kristallkugel...

Deine Geduld bewundere ich übrigens :mrgreen:

leddl 20. Apr 2005 10:44

Re: Counter Beginnt nicht wieder mit zählen
 
Hey, ich hab gestern bei nem ähnlichen Topic-Verlauf 100€ verdient. Ich hab halt noch Hoffnung! :lol:

Der Satzbau war - gerade am Anfang des Topics - wirklich furchtbar, und man mußte viel raten. Keine Frage. Allerdings finde ich es dann doch eigentlich recht einleuchtend (auch aus dem Code heraus), daß es mit dem Zählen eben um die Variable "Counter" geht, die das Vorkommen der Zahlen 1,3 und 7 zählen soll. Eine 6 setzt halt sozusagen nur den Zählerstand wieder auf 0. Eigentlich doch recht logisch. Das größere Problem war, ihm klarzumachen, daß sein Code doch eigentlich genau das macht, was er will. :mrgreen: Irgendwie wollte er das nicht einsehen. :lol:

alcaeus 20. Apr 2005 10:48

Re: Counter Beginnt nicht wieder mit zählen
 
Nun, vielleicht hilft es wenn man sich das urspruengliche Thema durchliest. Warum er einen neuen Thread eroeffnet hat - who knows...
Ich muss aber auch zugeben dass ich sein Problem mit dem Code nicht verstanden habe. Bei 1,3,7 zaehlen, bei 6 resetten. Wo ist das Problem? :gruebel:

Greetz
alcaeus

Hallo_Thomas 20. Apr 2005 10:48

Re: Counter Beginnt nicht wieder mit zählen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Insgesamt werde der Code zulang aber im wesentlichen sieht er so aus


Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
Var a: String;
begin
a:='1' ;
Anzeige.Items.InsertObject(0, a,Pointer(clRed));
end;

procedure TForm1.Button3Click(Sender: TObject);
Var a:String;
begin
a:='3' ;
Anzeige.Items.InsertObject(0, a,Pointer(clRed));
end;


procedure TForm1.Button5Click(Sender: TObject);
Var a:String;
begin
a:='5' ;
Anzeige.Items.InsertObject(0, a,Pointer(clRed));
end;

procedure TForm1.Button6Click(Sender: TObject);
Var a:String;
begin
a:='6' ;
Anzeige.Items.Insert(0, a);
end;

procedure TForm1.Button7Click(Sender: TObject);
Var a:String;
begin
a:='7' ;
Anzeige.Items.InsertObject(0, a,Pointer(clRed));
end;


procedure TForm1.NeustartClick(Sender: TObject);
begin
Anzeige.Items.Clear;
end;

procedure TForm1.AnzeigeDrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
  var
  g, Counter: Integer;


    begin
    with Control as TListBox do
    begin
    Canvas.FillRect(Rect);
    Canvas.Font.Color := TColor(Items.Objects[Index]);
    Canvas.TextOut(Rect.Left + 2, Rect.Top, Items[Index]);
    end;
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;
end;
end;
Label6.Caption:= IntToStr(Counter) ;





end;
end. ;

P.S. Im Orginal gibts noch mehr Zahlen

Das Problem ist, das ich möchte das oben in der Listbox die neuen Zahlen erscheinen, dadurch Funktioniet der Counter nicht so wie er sollte

Grumble 20. Apr 2005 11:25

Re: Counter Beginnt nicht wieder mit zählen
 
hi,

irgendwie fehlen da dateien in deiner zip datei, wenn ich mich nicht irre
:)

leddl 20. Apr 2005 11:49

Re: Counter Beginnt nicht wieder mit zählen
 
Naja, wichtig is ja eigentlich im Moment erstmal die exe.

Und ich kann wieder mal nur sagen, daß selbst in diesem Testprogramm der Algorithmus genau das macht, was du programmiert hast, Hallo_Thomas...

Betrachte diese 2 Fälle:
  1. Gebe ich als erstes eine 6 ein, ist Counter immer 0, da die ListBox eben von oben nach unten durchgegangen wird. Und da das als erstes eingegebene Element eine 6 ist, und dieses Element bei der Eingabe neuer Zahlen immer das letzte Element bleibt, wird nach der Schleife "Counter" immer 0 sein, da eben als letztes eine 6 gefunden und Counter auf 0 gesetzt wird.
  2. Geben ich als erstes (und vielleicht noch als 2., 3., ...) eine 1,3 oder 7 ein, stehen die immer ganz unten in der ListBox. Daher zeigt Counter immer an, wieviele 1er, 3er oder 7er eingegeben wurden, bis die erste 6 kam.
Du siehst also, so betrachtet macht dein Code, was du willst. ;)
Hättest du mal früher etwas mehr gepostet, dann hätte man dazu auch gleich mehr sagen können. Das jetzt mal nur als Tip für die Zukunft. :mrgreen:

Jetzt zur Lösung:
Ich gehe mal davon aus, daß du willst, daß dir angezeigt wird, wieviele 1er, 3er und 7er in der ListBox über der letzten 6 stehen, oder? Also, wieviele seit der letzten 6 eingegeben wurden?
Dann mußt du natürlich die ListBox auch rückwärts durchgehen:
Delphi-Quellcode:
Counter := 0;
for g := Anzeige.Count-1 to 0 do
  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) ;
PS: Gewöhn dir mal an, deinen Code etwas besser zu formatieren. Bei dir muß man immer suchen, was wozu gehört. Wenn du an bestimmten Stellen mit TAB etwas einrückst, macht das den Code viel lesbarer. Das erleichtert auch die Programmierung erheblich.

Hallo_Thomas 20. Apr 2005 12:19

Re: Counter Beginnt nicht wieder mit zählen
 
Ein langer Weg, aber Die Lösung ist nahe :thumb:

Jetzt zählt der Counter bei einer Zahl [1,3,7] aber springt bei der 2. Zahl[1,3,7]
sofort wieder zurück

Grumble 20. Apr 2005 12:22

Re: Counter Beginnt nicht wieder mit zählen
 
[edit] geloescht [end edit] sorry

leddl 20. Apr 2005 13:22

Re: Counter Beginnt nicht wieder mit zählen
 
:pale: :oops: *hust* *hust* Da muß der Hausgeist am Werk gewesen sein, ich war das nämlich bestimmt nicht. *hust* *hust*
Denn natürlich muß da anstatt "From ... To ..." "From ... DownTo ..." stehen.

...........

Wie gesagt, ich war das nicht! Pöhser Hausgeist! :witch:


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:33 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