AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler im Programm-nur wo?

Ein Thema von ichnixwissen · begonnen am 11. Mär 2009 · letzter Beitrag vom 11. Mär 2009
Antwort Antwort
ichnixwissen

Registriert seit: 11. Mär 2009
26 Beiträge
 
#1

Fehler im Programm-nur wo?

  Alt 11. Mär 2009, 18:11
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:
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;
[edit=mkinzler]Tag korrigiert Mfg, mkinzler[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Fehler im Programm-nur wo?

  Alt 11. Mär 2009, 18:18
Ich habe mir deinen Quelltext noch nicht näher angeschaut, aber ein ähnliches Problem war dieses, da habe ich eine entsprechende Lösung gepostet:
http://www.delphi-forum.de/viewtopic...=552894#552894
Dabei ging es um die Auswahl von 5 aus 12 Checkboxen und den Vergleich mit zufällig gezogenen.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
kaiser1401

Registriert seit: 6. Mär 2006
Ort: Gescher
157 Beiträge
 
Delphi 7 Professional
 
#3

Re: Fehler im Programm-nur wo?

  Alt 11. Mär 2009, 18:21
Willkommen in der 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:
[..]
b:=false;
for i:= 1 to 20 do
 begin
  if a = TLabel(FindComponent('label'+IntToStr(i))).Caption then
   begin
    b:=true;
    break;
   end;
 end;

[...]
Ansonsten seh ich aber momentan noch ncith warum es nciht klappt. kannst du mal den gesammten quelltext hochladen?
inc(i);
  Mit Zitat antworten Zitat
ichnixwissen

Registriert seit: 11. Mär 2009
26 Beiträge
 
#4

Re: Fehler im Programm-nur wo?

  Alt 11. Mär 2009, 18:31
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.
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Fehler im Programm-nur wo?

  Alt 11. Mär 2009, 18:38
Also ist jetzt nur mal eine Vermutung, aber könnte der Fehler eventuell hier liegen:
Edit1.Text:= ' '; 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.

besser wäre:
Edit1.Text:= ''; Ist nur eine Vermutung.
  Mit Zitat antworten Zitat
kaiser1401

Registriert seit: 6. Mär 2006
Ort: Gescher
157 Beiträge
 
Delphi 7 Professional
 
#6

Re: Fehler im Programm-nur wo?

  Alt 11. Mär 2009, 18:39
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.
inc(i);
  Mit Zitat antworten Zitat
ichnixwissen

Registriert seit: 11. Mär 2009
26 Beiträge
 
#7

Re: Fehler im Programm-nur wo?

  Alt 11. Mär 2009, 18:52
Das mit dem Edit war der Fehler. Danke für die schnelle Antwort...
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#8

Re: Fehler im Programm-nur wo?

  Alt 11. Mär 2009, 18:59
Zitat von kaiser1401:
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.
falsch, sleep hält die Programmausführung an (Nachrichten werden nicht abgearbeitet).
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
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Fehler im Programm-nur wo?

  Alt 11. Mär 2009, 19:34
Zitat von _frank_:
Zitat von kaiser1401:
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.
falsch, sleep hält die Programmausführung an (Nachrichten werden nicht abgearbeitet).
Genau! Hier gibt es auch eine ressourcenschonendere Variante des oben geposteten Codes:
http://www.delphipraxis.net/internal...ect.php?t=7355
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:44 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