Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Prozedur stoppen, bis Eingabe vom Benutzer gemacht wurde


HenryHux - Do 30.06.11 15:50
Titel: Prozedur stoppen, bis Eingabe vom Benutzer gemacht wurde
Hi,

ich muss in einer Prozedur auf einen Klick vom Benutzer auf einen Button warten, weiß aber nicht genau wie ich das realisieren soll. Ich könnte das jetzt bestimmt mit irgendwelchen Delay Funktionen anstellen, denke aber da gibt es noch bessere Möglichkeiten.
Hatte es mit einem Thread versucht, welcher gestartet und nach einem Klick auf einen der dynamisch erzeugten Buttons gestoppt wird. In der Prozedur habe ich dadrauf mit WaitFor gewartet. Jedoch friert der Aufruf die VCL ein, was ich gerade nicht wollte.
Welche Alternativen stehen mir hier zur Verfügung?

lg


Tankard - Do 30.06.11 15:52

das ding in einen eigenen thread packen


HenryHux - Do 30.06.11 15:53

user profile iconTankard hat folgendes geschrieben Zum zitierten Posting springen:
das ding in einen eigenen thread packen


Eher schlecht, müsste fast alles synchronisiert werden.


jaenicke - Do 30.06.11 15:53

Wenn du ein Fenster für die Eingabe mit ShowModal anzeigst, wird die aktuelle Prozedur bereits derweil angehalten. Deshalb weiß ich gerade nicht was du für ein Problem hast. :gruebel:


HenryHux - Do 30.06.11 15:56

Ich wollte möglichst kein neues Fenster oder InputBoxen öffnen.
Wäre in einem Fenster schön kompakt und einfacher zu bedienen imho.


jaenicke - Do 30.06.11 16:02

In einem Fenster brauchst du doch keine Prozedur anzuhalten. Da hast du doch für die weiteren Aktionen das Event, wenn der Benutzer die Eingabe bestätigt.

Du denkst da ein wenig zu prozedural, du musst eventorientiert denken. Der erste Fall ist, dass der Benutzer eine Aktion startet. Daraufhin machst du etwas und fragst nach weiteren Infos. Dann reagierst du darauf, dass der Benutzer das bestätigt, wartest aber nicht darauf. Du bekommst ja dann das entsprechende Event, z.B. von einem Button. ;-)


HenryHux - Do 30.06.11 16:08

Das Problem dabei ist, dass der Benutzer nicht die Entscheidung treffen kann, bevor er das Ereignis nicht kennt, welches quasi zufällig erstellt wird.
Zudem wird er in der Prozedur mehr als nur ein paar mal reagieren müssten, was es nochmal erschwert.
Wenn es dafür keine einfache Lösung gibt, sollte ich aber vielleicht doch drüber nachdenken, ein modales Fenster zu öffnen.

lg


jaenicke - Do 30.06.11 16:28

Ich kann mir nicht vorstellen was du da eigentlich genau vorhast. Eine Methode mehrfach zu unterbrechen hört sich jedenfalls nicht optimal an.

Ohne genauer zu wissen was du da machst, kann ich aber auch schlecht eine Alternative genauer nennen...


HenryHux - Do 30.06.11 16:37

Ich bin dabei ein etwas exotischeres Kartenspiel zu programmieren, da ich es im Web nicht finden konnte. Habe sogar den Namen zur Zeit vergessen, weiß nur noch den ungefähren Spielablauf.
Wenn ein Spieler dran ist, hat er mehrere Möglichkeiten seinen Zug zu beenden. Ich wollte ihm das halt mit diesen Buttons ermöglichen. Wenn ich jetzt immer Fenster öffne, nervt das, denke ich mal.


jaenicke - Do 30.06.11 16:39

Wäre bei einem Kartenspiel nicht Drag-And-Drop sinnvoller? ;-)


HenryHux - Do 30.06.11 16:44

Bei manchen bestimmt schon, aber es geht hier mehr um Aktionen, wie den Einsatz erhöhen, ein ganz ferner Verwandte wäre vielleicht Poker.


jaenicke - Do 30.06.11 16:49

Ach so etwas meinst du. Aber das lässt sich doch über entsprechende Eingabepanels realisieren, die nur aktiv sind, wenn eine bestimmte Aktion möglich ist, oder?


HenryHux - Do 30.06.11 16:51

Ok, davon habe ich noch nichts gehört.
Habe ich da nicht das Problem, dass ich auf eine Eingabe warten muss?


jaenicke - Do 30.06.11 17:06

Ich meine keine speziellen Komponenten, nur halt einfache Panels oder ähnliche Komponenten, die eben nach Bedarf für die Eingabe freigeschaltet werden.

Im Anhang werden z.B. der Reihe nach drei Eingaben abgefragt.


HenryHux - Do 30.06.11 17:24

Weiß jetzt was du meinst.
Trotzdem stoppt das ja leider nicht die Prozedur..


jaenicke - Do 30.06.11 17:28

Du brauchst die auch gar nicht zu stoppen. Du hast einen Teil des Codes, der vor der Eingabe ausgeführt werden soll und einen Teil, der danach ausgeführt werden soll.
Den zweiten Teil packst du jetzt einfach z.B. in das OnClick von der Bestätigung der Eingabe.

Dann brauchst du da nichts anhalten. Wie gesagt: Du denkst noch nicht ereignisorientiert, aber das ist Windows nun einmal. ;-)


HenryHux - Do 30.06.11 18:25

Ok, ich seh schon, so wie ich das hab geht das erstmal nicht so schnell.
Ich werde jetzt erstmal weitermachen und nur Computer gegen Computer programmieren, danach fällt mir bestimmt was ein oder ich teile die Prozeduren halt auf.
Danke für die Hilfe!

lg