Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Galgenmännchen - Abfrageproblem - (https://www.delphipraxis.net/124121-galgenmaennchen-abfrageproblem.html)

htxmlx 14. Nov 2008 22:33


Galgenmännchen - Abfrageproblem -
 
Ich habe versucht ein Galgenmännchen Programm zu proggen. So erstmal zur Form, es gibt ein Edit1 Feld, wo ein Buchstabe eingegeben werden kann und es gibt ein BitButton1, mit dem dieser Buchstabe bestägigt werden kann. Zuvor wird per Zufallsprinzip ein Wort aus einer liste ausgewählt, dort funktioniert jedoch alles einwandfrei..das gesuchte wort ist eine String variabel mit der bezeichnung 'wort'

So auf dem BitButton mit dem der eingegebene Buchstabe bestätigt werden soll und somit das wort auf diesen geprüft werden soll liegt dieses Ereignis:

Delphi-Quellcode:
procedure TForm1.BitBtn1Click(Sender: TObject);
var i, buchstabe, wlange:Integer; key:STring;
  begin
  key := Edit1.Text;
  buchstabe := 0;
  wlange := Length (wort);
  for i := 0 to (wlange) do
    begin
    inc (buchstabe);
    if Copy (wort, buchstabe, buchstabe) = key then
      begin
      TButton (FindComponent('Button' + IntToStr (buchstabe))).Caption := Copy (wort, buchstabe, buchstabe);
      end;
    end;
  end;
So die variable buchstabe ist der buchstabe der gerade geprüft werden soll. In der Form habe ich darunter 12 Buttons die jeweils für einen Buchstaben stehen. Wird nun also das wort (z.B. Drucker) auf 'r' gescannt, so müsste Button2.Caption dann 'r' sein und Button7.Caption auch 'r' sein.

Dies ist jedoch leider nicht so, es wird der erste buchstabe und der lezte richtig angezeigt, ich vermute das das was mit der for do schleife zu tun hat..aber ich bin mir nicht so sicher, vielleicht weiß einer von euch weiter...

Gruß, htxmlx

Fridolin Walther 14. Nov 2008 22:46

Re: Galgenmännchen - Abfrageproblem -
 
Schau Dir mal die Hilfe zu Copy an und überprüf mal was Du dort machst ;).

Generell ist Dein Code ein wenig komisch. Ich schreib hier mal die Sachen:

Delphi-Quellcode:
procedure TForm1.BitBtn1Click(Sender: TObject);
var i, buchstabe, wlange:Integer; key:STring;
  begin
  key := Edit1.Text;
  buchstabe := 0;
  wlange := Length (wort);
  for i := 0 to (wlange) do // Die Schleife wird in der Form "Anzahl der Buchstaben + 1" Mal ausgeführt. Du willst sie aber nur für jeden Buchstaben im String ausführen. Also entweder i := 1 to wlange oder i := 0 to (wlange - 1).
    begin
    inc (buchstabe); // Eigentlich ist das völlig unnötig. Weil Du hast doch schon eine Variable die bei jedem Schleifendurchlauf inkrementiert wird -> i. wenn du die for schleife von "1 to wlange" definierst, gehst du jeden einzelnen Buchstaben von Wort durch
    if Copy (wort, buchstabe, buchstabe) = key then // das Copy ist falsch und eigentlich auch total unnötig. Wenn Du Copy verwenden willst, dann schau Dir die Hilfe zu Copy an. Alternativ überleg mal: So ein String kann man auch als ein Array of Char sehen. Vielleicht kommst Du drauf was effektiver wäre :).
      begin
      TButton (FindComponent('Button' + IntToStr (buchstabe))).Caption := Copy (wort, buchstabe, buchstabe); // Das Gleiche wie oben.
      end;
    end;
  end;

rollstuhlfahrer 14. Nov 2008 22:49

Re: Galgenmännchen - Abfrageproblem -
 
Hab den Fehler:
Du verwendest Copy falsch. Der dritte Parameter gibt die Anzahl der zufückgelieferten Zeichen zurück. Somit müsste bei Drucker nur der Letzte Buchstabe angezeigt werden. So ist es richtig:
Delphi-Quellcode:
Copy(wort, buchstabe, 1);
Bernhard

htxmlx 15. Nov 2008 07:30

Re: Galgenmännchen - Abfrageproblem -
 
Ah ok danke erstmal, darauf das i für den buchstaben zu verwenden bin ich net gekommen...werd ich gleich mal tun. das mit dem copy werd ich auch nochmal überprüfen..

Gruß, htxmlx

htxmlx 15. Nov 2008 07:35

Re: Galgenmännchen - Abfrageproblem -
 
Super dankeschön...der haupt fehler lag am copy, ich hatte das anders im kopf das man (string, von, bis) macht...also danke nocmal für die hilfe derrichtige code sieht jetzt so aus:
Delphi-Quellcode:
procedure TForm1.BitBtn1Click(Sender: TObject);
var i, wlange:Integer; key:STring;
  begin
  key := Edit1.Text;
  wlange := Length (wort);
  for i := 1 to (wlange) do
    begin
    if Copy (wort,i,1) = key then
      begin
      TButton (FindComponent('Button' + IntToStr (i))).Caption := key;
      end;
    end;
  end;
Gruß, htxmlx

LDericher 16. Nov 2008 20:25

Re: Galgenmännchen - Abfrageproblem -
 
Warum nicht einfach "Wort[i]" statt "Copy(wort, i, 1)"?


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