Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi auf button click warten (kein Application.ProcessMessages!) (https://www.delphipraxis.net/42901-auf-button-click-warten-kein-application-processmessages.html)

soup 25. Mär 2005 17:08


auf button click warten (kein Application.ProcessMessages!)
 
mache ein Schachspiel.
wie ihr vielleicht wisst darf man beim Schach seinen Bauern gegen eine andere Figur tauschen wenn man die letzte Reihe erreicht.
In meinem Spiel soll das so gehen:

erreicht ein spieler mit einem bauern die (für ihn) hinterste reihe - was ich problemlos abfragen kann - wird eine Prozedur aufgerufen:

Delphi-Quellcode:
procedure TForm1.VerwandleBauer;
begin
  DButton.Visible := true;
  LButton.Visible := true;
  SButton.Visible := true;
  TButton.Visible := true;

  repeat { Application.ProcessMessages - blöd weil weiterspieln möglich} until UnitType > 1;
  {UnitType 1 ist der Bauer, beim Button-Click wird der Unittype 2,3,4 oder 5}

  DButton.Visible := false;
  LButton.Visible := false;
  SButton.Visible := false;
  TButton.Visible := false;

end;
unten am spielfeldrand erscheinen 4 Buttons für die 4 möglichen Verwandlungen des Bauern (Dame, Turm ...)

in der Prozedur soll so lange 'verharrt' werden bis einer der Buttons geklickt wurde. Das ist nötig, denn sonst könnte man einfach weiterspielen und die Buttons würden bleiben
--> Application.ProcessMessages geht hier also nicht.

aber ohne das schmiert das prog ab.

[weniger wichtig]Beim Klick auf irgendeinen der Buttons wird in der OnClick-Prozedur eine entsprechende Variable (unitType) geändert - ein Integer, der vom Spiel dann nach der Prozedur in ein Array kopiert wird. [/weniger wichtig]

Gibt es eine möglichkeit
die Buttons anzuzeigen zu lassen
darauf zu warten das einer geklickt wird und dannin der prozedur weiterzumachen?

Danke im Vorraus!

jfheins 25. Mär 2005 17:13

Re: auf button click warten (kein Application.ProcessMessage
 
einfach die Prozedur aufhören lassen, und in den prozeduren der 4 Buttons weitermachen ...
(Oder eine prozedur, die die Buttons zeigt (ggf. anderes disablen) und eine, die sie wieder versteckt)

Ultimator 25. Mär 2005 17:23

Re: auf button click warten (kein Application.ProcessMessage
 
Du könntest eine Boolean-Variable erstellen, die beim Klick auf einen der Verwandlungsbuttons auf true gesetzt wird, und wenn jemand versucht, weiterzuspielen, wird erst überprüft, ob diese Variable true ist, wenn ja, dann kann man weiterspielen, andernfalls nicht ;-)

Dax 25. Mär 2005 17:26

Re: auf button click warten (kein Application.ProcessMessage
 
Oder du machst dir eine Extra-Form, auf der der Spieler sich seine Figur aussuchen soll und rufst sie mit ShowModal auf ;)

skyware 25. Mär 2005 17:42

Re: auf button click warten (kein Application.ProcessMessage
 
..oder Du benutzt das Event "Application.OnIdle", um dort jeweils zu prüfen
ob jetzt eine Figur ausgewählt wurde.

sniper_w 25. Mär 2005 18:07

Re: auf button click warten (kein Application.ProcessMessage
 
Zitat:

Oder du machst dir eine Extra-Form, auf der der Spieler sich seine Figur aussuchen soll und rufst sie mit ShowModal auf Wink
Genau. Das wäre IMHO am besten.

[EDIT]
Du könntest alle Eventhandlers, die du sonst im Programm hast, auf nil setzen, und wider, wenn der Spieler auf die einer der 4 oben erwähnte Buttons klickt, zurücksetzen.
[\EDIT]

soup 25. Mär 2005 19:05

Re: auf button click warten (kein Application.ProcessMessage
 
wow, danke! :D
werd mich dann heut nacht mal ransetzen und ausprobieren was am besten klappt.

Dankeschön für die vielen Vorschläge!


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