| |
|
|
Nico Madysa | Mir ist bereits bei XProfan9 ein Fehler aufgefallen, den ich hier nun mal zeigen will. Ausgangspunkt ist dieser Minimalcode. KompilierenMarkierenSeparierendeclare but& , dlg& , e%
WindowStyle 26
Window 100 , 100 - 200 , 200
cls External("User32","GetSysColor",15)
but& = Create("Button",%hWnd,"Dialog",5,5,100,25)
whilenot %Key = 2
waitinput
if Clicked(but&)
dlg& = Create("Dialog",%hWnd,"DER Dialog",5,5,100,300)
clear e%
whilenot e%
waitinput
if %Key = 2
inc e%
endif
wend
DestroyWindow(dlg&)
endif
wend
end
Wenn man über den Button den Dialog öffnet und diesen anschließend über das [X] wird das Hauptfenster auch geschlossen. Und das obwohl 1.) Das Hauptfenster keinen Dialogfenster-Stil hat. 2.) %Key nach dem auslesen doch zurück gesetzt werden sollt.
Hat jemand ne Lösung? |
|
|
| |
|
|
|
| |
|
| |
|
|
|
Sebastian König | Hallo,
in meinen Augen ist das eigentlich kein Fehler, denn die äußere Schleife ist ja als
Whilenot %Key = 2
definiert. Nach dem Klick auf das X im Dialog ist aber %key = 2 gegeben und die Schleife wird verlassen. Dies liegt daran, dass %key nicht beim Auslesen zurückgesetzt wird, sondern nur durch einen WaitInput/-Key/-Scan oder GetMessage-Befehl.
Eine einfache Lösung wäre, auch für die äußere Schleife eine ende%-Variable zu benutzen und diese z.B. mit case %key = 2: ende% = 1 nach dem WaitInput in der äußeren Schleife zu setzen.
MfG
Sebastian |
|
|
| |
|
|
|
Nico Madysa | Mit der Hilfsvariablen habe ichs schon probeirt, klappt nicht, da %Key beim Auslesen eben nicht zurück gesetzt wird. Aber wenn ich deine erste Aussage richtig verstanden habe, würde´ KompilierenMarkierenSeparieren klappen, da das Waitinput der ersten Schleife am Ende ist und %Key daher vor dessen Abfrage noch neu eingestellt werden würde. Danke für die Hilfe.
@iF: Ich versteh dieses Dulcoif nicht, was soll das denn bedeuten? |
|
|
| |
|
|
|
Michael Wodrich | [quote:0a67fc8c6a]@iF: Ich versteh dieses Dulcoif nicht, was soll das denn bedeuten?[/quote:0a67fc8c6a] Dafür sollte man die Suche bemühen und sich den ganzen Thread durchlesen.
Das DulcoIf sollte verabreicht werden um dem kränkelnden Message-Handling auf die Sprünge zu helfen...
Schöne Grüße Michael Wodrich |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 27.06.2006 ▲ |
|
|
|
|
Sebastian König | [quote:e7e4a282c6]Aber wenn ich deine erste Aussage richtig verstanden habe, würde´ [...] klappen, da das Waitinput der ersten Schleife am Ende ist und %Key daher vor dessen Abfrage noch neu eingestellt werden würde.[/quote:e7e4a282c6] Das ist nicht ganz, was ich meinte, aber es funktioniert tatsächlich . Das WaitInput _nach_ der inneren Schleife setzt %key zurück und nur dann wieder auf 2, wenn das X im Hauptfenster angeklickt wird.
So ganz schön finde ich das mit dem WaitInput am Ende der Schleife allerdings nicht... Wahrscheinlich geht es in den meisten Fällen gut, aber ich würde es an den Anfang setzen, damit man nicht womöglich in irgendeinem undefinierten Zustand startet und vielleicht Aktionen ohne Eingabe ausgeführt werden (könnte in einer komplizierteren Schleife ja durchaus sein, denke ich).
Hier mal die Variante mit 2 separaten Ende-Variablen, an die ich gedacht hatte: KompilierenMarkierenSeparierenDeclare But& , Dlg& , E1%, E2%
Windowstyle 26+512
Window 100 , 100 - 200 , 200
Cls External("User32","GetSysColor",15)
But& = Create("Button",%Hwnd,"Dialog",5,5,100,25)
Whilenot E1%
Waitinput
case %key = 2 : E1% = 1 war fälschlicherweise erst E1% = 0
If Clicked(But&)
Dlg& = Create("Dialog",%Hwnd,"DER Dialog",5,5,100,300)
Clear E2%
Whilenot E2%
Waitinput
If %Key = 2
Inc E2%
Endif
Wend
Destroywindow(Dlg&)
Endif
Wend
End
MfG
Sebastian |
|
|
| |
|
|
|
Nico Madysa | Da ist, glaube ich, ein kleiner Fehler: Was passiert, wenn ich das Hauptfenster(mit Dialog-Stil) schließen will, ohne die Dialog-Box aufzurufen? Da wird E1% ja auf 0 gesetzt, läuft also weiter. Wegen dem undefiniertem Zustand bei einem nachgestellten Waitinput: Man könnte auch eine Repeat-Until-Schleife als Hauptschleife nehmen; oder man macht vor der Hauptschleife NOCH ein Waitinput, dann müsste die Sache klappen. |
|
|
| |
|
|
|
Sebastian König | [quote:7a4701bab3]Da ist, glaube ich, ein kleiner Fehler: Was passiert, wenn ich das Hauptfenster(mit Dialog-Stil) schließen will, ohne die Dialog-Box aufzurufen? Da wird E1% ja auf 0 gesetzt, läuft also weiter. (...)[/quote:7a4701bab3] Ups - sorry!! Ich hatte bei der äußeren Schleife falschrum gedacht, also an While E1% ... Richtig wäre natürlich: Case %Key = 2 : E1% = 1 - ich ändere das in dem Code oben gleich mal
Jetzt müsste aber alles in Ordnung sein - habe es jedenfalls gerade erfolgreich getestet - auch mit Stil 512...
MfG
Sebastian |
|
|
| |
|
|
|
Nico Madysa | OK, danke für die Hilfe! |
|
|
| |
|
|