Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   4 Buttons abfragen (https://www.delphipraxis.net/192301-4-buttons-abfragen.html)

jdiephaus 6. Apr 2017 17:54

4 Buttons abfragen
 
Hallo liebe Community,

Folgendes Problem:

Gegeben ist ein Programm mit 4 Buttons.
Ein Button ist der Startbutton, ein Button ist der Endbutton.

Welcher der Buttons der Start und Endbutton ist, lege ich vorher beliebig fest (Startbutton kann aber nicht gleich Endbutton sein).

Mit einem Klick auf einen beliebigen Button möchte ich dann erkennen, ob es der von mir festgelegte Startbutton ist. Wenn true, folgt nun die Suche nach dem richtigen Endbutton. Wenn ich den richtigen Endbutton erwische, Aufgabe erledigt. Wenn ich jedoch den falschen Button drücke, soll das Programm auch den bereits gefunden Startbutton zurücksetzen.

Die Aufgabenstellung klingt so verdammt einfach aber mir explodiert gleich der Kopf :pale: ...

Anregungen/Lösungsansätze?

a.def 6. Apr 2017 19:41

AW: 4 Buttons abfragen
 
Ich habe das nicht ganz verstanden. Klingt irgendwie wie ein Spiel?

Ich würde allen 4 Buttons ein einzigartiges Tag geben (0,1,2,3) und allen Buttons denselben OnClick verpassen und dann im OnClick prüfen:
Delphi-Quellcode:
 if TButton(Sender).Tag = iButtonStart then
  begin
   // tue etwas, wenn der gedrückte Button der Startbutton ist
  end
 else if TButton(Sender).Tag = iButtonEnd then
  begin
   // tue etwas, wenn der gedrückte Button der Endbutton ist
  end;
Irgendwo dann noch in Variablen festlegen, welcher Button der Start- und Endbutton ist:
Delphi-Quellcode:
iButtonStart := 2;
iButtonEnd := 1;

jdiephaus 6. Apr 2017 19:47

AW: 4 Buttons abfragen
 
Erstmal vielen Dank für die schnelle Antwort!
Du hast recht, es soll ein Spiel werden.
Ist als Minimalbespiel gedacht, für ein Schachspiel mit 1-Zug-Matt Aufgaben.

Vielen Dank erstmal, ich werde mal versuchen das so zu implementieren!

himitsu 6. Apr 2017 19:49

AW: 4 Buttons abfragen
 
Oder direkt
Delphi-Quellcode:
cButtonStart := DerStartbutton;
cButtonEnd := DerEndbutton;



if Sender = cButtonStart then
.

Aber wenn man die 1-4 per Random erzeigen will, dann kann das mit dem .Tag auch ganz praktisch sein.

jdiephaus 6. Apr 2017 20:29

AW: 4 Buttons abfragen
 
Vielen Dank auch an dich!

Die Methode mit Sender gefällt mir sehr gut! Auch einfach umzusetzen ohne alle Buttons taggen zu müssen.

Habe den Code jetzt so eingebaut, funktioniert aber leider nicht :(

Code:
procedure TForm1.ButtonClick(Sender: TObject);
begin
  if Sender = Button1 then
  begin
    Memo1.Text:='Hallo';
  end;
end;
Bekomme keine Ausgabe. Anscheinend erkennt er nicht ob der Button geklickt wurde oder nicht.

a.def 6. Apr 2017 21:09

AW: 4 Buttons abfragen
 
Hast du ALLEN 4 Buttons das Event "ButtonClick" zugewiesen? Hast du das Event selber geschrieben oder kommt das über den Objektinspektor?

Luckie 6. Apr 2017 21:31

AW: 4 Buttons abfragen
 
Setz doch mal einen Haltepunkt und guck, ob er da überhaupt rein springt. Dann weißt du es doch.

XXcD 7. Apr 2017 11:43

AW: 4 Buttons abfragen
 
Hallo,
muss das nicht
Delphi-Quellcode:
if (Sender as TButton).name=Button1 then
oder
Delphi-Quellcode:
if TButton(Sender).name=Button1 then
heißen?

a.def 7. Apr 2017 11:52

AW: 4 Buttons abfragen
 
Bei mir funktioniert es ohne as TButton.

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
 if Sender = Button2 then
  begin
  end;
end;
.name kann gar nicht funktionieren, da name ein String ist.

Luckie 7. Apr 2017 12:45

AW: 4 Buttons abfragen
 
Nur, wenn du es so vergleichst, erzeugst du ein Schwarzes Loch auf deinem Schreibtisch, wenn der Sender mal nicht vom Typ TButton ist. :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:10 Uhr.
Seite 1 von 2  1 2      

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