![]() |
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:
unten am spielfeldrand erscheinen 4 Buttons für die 4 möglichen Verwandlungen des Bauern (Dame, Turm ...)
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; 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! |
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) |
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 ;-)
|
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 ;)
|
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. |
Re: auf button click warten (kein Application.ProcessMessage
Zitat:
[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] |
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 10:31 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 by Thomas Breitkreuz