![]() |
Fehler im Programm-nur wo?
Ich such schon die ganze Zeit nach dem Fehler und find ihn einfach nicht. Situation:
Es sind 20 Wörter in Lablels vorgegeben, die man sich Möglichst merken sollte. Naach einiger Zeit verschwinden die Labels und es erscheint ein Edit in dem man die gemerkten Wörter eingeben kann. Wenn das Wort vorhanden ist soll richtig angezeigt werden un wenn nich , dann Falsch. Problem: Beim ersten mal funktioniert allles wunderbar,aber ab dem zweiten Button-Klick kommt nur noch Falsch :!: Bitte helft mir!!!
Delphi-Quellcode:
[edit=mkinzler]Tag korrigiert Mfg, mkinzler[/edit]
var a: string; i,j: integer;
b: boolean; begin a:= edit1.Text; i := 0; repeat b:=false; i := i+1; if a = TLabel(FindComponent('label'+IntToStr(i))).Caption then begin b:=true; TLabel(FindComponent('label'+IntToStr(i))).Visible:= true; i := 20; end; until i = 20; if b then Richtig.Visible:= true else Falsch.Visible:= true; delay(2000); Edit1.Text:= ' '; Richtig.Visible:= false; Falsch.Visible:= false; |
Re: Fehler im Programm-nur wo?
Ich habe mir deinen Quelltext noch nicht näher angeschaut, aber ein ähnliches Problem war dieses, da habe ich eine entsprechende Lösung gepostet:
![]() Dabei ging es um die Auswahl von 5 aus 12 Checkboxen und den Vergleich mit zufällig gezogenen. |
Re: Fehler im Programm-nur wo?
Willkommen in der DP :dp:
als erstes solltest du mal deinen beitrag bearbeiten und die Code tags richtig setzen ;-) und über die Vorschau schauen ob es so aussieht wie du willst. dann währe eine for schleife schöner, aus der du mit "break" aussteigen kannst (imho)
Delphi-Quellcode:
Ansonsten seh ich aber momentan noch ncith warum es nciht klappt. kannst du mal den gesammten quelltext hochladen?
[..]
b:=false; for i:= 1 to 20 do begin if a = TLabel(FindComponent('label'+IntToStr(i))).Caption then begin b:=true; break; end; end; [...] |
Re: Fehler im Programm-nur wo?
Delphi-Quellcode:
procedure Delay(ATime:Integer);
{diese Prozedur sorgt für eine Pause, Parameter in Millsekunden, also Aufruf durch delay(1000) entspricht 1 sec} var Start : Integer; begin Start:=GetTickCount; repeat Application.ProcessMessages; until GetTickCount-Start > ATime; end; procedure TForm7.FormCreate(Sender: TObject); const p: Array [1..70] of string = ('Hund','Herz','Haus','Kind','Riss','Tank', 'Pferd','grau','Öl','nass','kalt','Kirche', 'Mann','Boss','Ski','neu','kurz','Uhr', 'Schiff','Hand','schief','Ball','Kreis', 'Puppe','Auto','Buch','Turm','schlau', 'reich','tief','Meer','Sand','Baum','weit', 'Stadt','Land','Handy','fit','Licht','Spott', 'Moodle','Maus','Dame','Wind','Würfel','breit', 'Katze','einsam','Traube','Zunge','fair','Brief', 'alt','See','sanft','Dach','Feuer','Gas','Jacke', 'jung','Fisch','lahm','Kraft','Apfel','Bahn','Computer', 'Mauer','nah','Zimmer','grob'); var i: integer; begin i:= 0; randomize; for i:= 1 to 20 do begin TLabel(FindComponent('label'+IntToStr(i))).Caption:= p[random(70)+1]; end; timer1.Enabled:= true; end; procedure TForm7.Timer1Timer(Sender: TObject); begin edit1.Visible:= true; button1.Visible:= true; Label1.Visible:= false; Label2.Visible:= false; Label3.Visible:= false; Label4.Visible:= false; Label5.Visible:= false; Label6.Visible:= false; Label7.Visible:= false; Label8.Visible:= false; Label9.Visible:= false; Label10.Visible:= false; Label11.Visible:= false; Label12.Visible:= false; Label13.Visible:= false; Label14.Visible:= false; Label15.Visible:= false; Label16.Visible:= false; Label17.Visible:= false; Label18.Visible:= false; Label19.Visible:= false; Label20.Visible:= false; end; procedure TForm7.Button1Click(Sender: TObject); var a: string; i,j: integer; b: boolean; begin a:= edit1.Text; i := 0; repeat b:=false; i := i+1; if a = TLabel(FindComponent('label'+IntToStr(i))).Caption then begin b:=true; TLabel(FindComponent('label'+IntToStr(i))).Visible:= true; i := 20; end; until i = 20; if b then Richtig.Visible:= true else Falsch.Visible:= true; delay(2000); Edit1.Text:= ' '; Richtig.Visible:= false; Falsch.Visible:= false; end; end. |
Re: Fehler im Programm-nur wo?
Also ist jetzt nur mal eine Vermutung, aber könnte der Fehler eventuell hier liegen:
Delphi-Quellcode:
Du schreibst hier ein Leerzeichen in das Feld, welches eventuell nicht gelöscht wird. Das sollte beim vergleich dann immer einen Fehler erzeugen, weil " Hund" verschieden von "Hund" sein sollte.
Edit1.Text:= ' ';
besser wäre:
Delphi-Quellcode:
Ist nur eine Vermutung.
Edit1.Text:= '';
|
Re: Fehler im Programm-nur wo?
Zunächstmal brauchst du das Delay nicht selbst zu schreiben, es gibt eine Funktion "Sleep()" die in etwa das machen dürfte was du wilst.
Dann würd ich im OnTimer-Event empfehlen den Timer dort wieder auszuschalten damit das nciht öfter durchlaufen wird. (es sei denn du willst das) Du kannst Edit1.Text auch auf einen Leerstring setzen also '' statt ' ' Setz doch mal einen Breakpoint im Anfang von Button1Click (mit F5) , starte das Programm (F9) und geh dann Schrittweise durch ( F8 ) und schau dir an was in den variablen drin steht. |
Re: Fehler im Programm-nur wo?
Das mit dem Edit war der Fehler. Danke für die schnelle Antwort... :-D
|
Re: Fehler im Programm-nur wo?
Zitat:
ansonsten fehlt mir auf, dass es sein kann, dass bestimmte worte doppelt auftauchen können, ws sicher auch nicht so gedacht ist... warum eigentlich so viele labels? reicht nicht ein label, was du änderst, wenn das vorherige wort richtig war? die gefundenen Worte kannst du ja trotzdem nach dem finden in eine liste schreiben... vielleicht wäre eine stringliste auch eine bessere Alternative für den Vergleich...anzeigen kann mans ja per label, aber dann kannst du dir das FindComponent sparen (ggf. Pointer auf das label an den Stringlist-Eintrag anhängen, um das label sichtbar zu machen). sonst sehe ich auch den Fehler nicht, ohne es zu testen... Gruß Frank |
Re: Fehler im Programm-nur wo?
Zitat:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:49 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-2025 by Thomas Breitkreuz