Autor Beitrag
HenryHux
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: Do 30.06.11 15:50 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Administrator
Beiträge: 217
Erhaltene Danke: 96



BeitragVerfasst: Do 30.06.11 15:52 
das ding in einen eigenen thread packen
HenryHux Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19335
Erhaltene Danke: 1751

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19335
Erhaltene Danke: 1751

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19335
Erhaltene Danke: 1751

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19335
Erhaltene Danke: 1751

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 30.06.11 16:39 
Wäre bei einem Kartenspiel nicht Drag-And-Drop sinnvoller? ;-)
HenryHux Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19335
Erhaltene Danke: 1751

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19335
Erhaltene Danke: 1751

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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.
Einloggen, um Attachments anzusehen!

Für diesen Beitrag haben gedankt: HenryHux
HenryHux Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: Do 30.06.11 17:24 
Weiß jetzt was du meinst.
Trotzdem stoppt das ja leider nicht die Prozedur..
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19335
Erhaltene Danke: 1751

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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. ;-)

Für diesen Beitrag haben gedankt: HenryHux
HenryHux Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: 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