Forum | | | | - Seite 1 - |
| Deaktiviert | Hallo, ich bin am überlegen zu XProfan zu wechseln und probiere erstmal mit der FreeProfan ein wenig herum da ich die Funktionen bzgl. Firebird erst testen möchte diese jedoch in den Freeware Versionen nicht bei sind. Die 11.2 wollte ich mir jetzt nicht extra nur für den Test kaufen, denn wenn ich zu XProfan wechsele dann wirds gleich die aktuelle X3 Version. Da FreeProfan auf den Stand der X3 sein soll bietet es sich zum testen dementsprechend aus meiner Sicht an. Dies nur als kleine Hintergrundinfo da dies mein erster Beitrag hier ist, jetzt zu meinem Problem:
Ich habe ein Hauptfenster welches über einen Button ein zweites Fenster mit einem Text und Editfeld öffnen soll. Soweit funktioniert die Sache auch wunderbar. Wenn der Nutzer jetzt im zweiten Fenster auf X (für schließen) klickt soll sich das zweite Fenster schließen und einfach zum Hauptfenster zurückkehren, erst wenn der Nutzer im Haupfenster nochmal auf X (für schließen) klickt soll sich das Programm beenden.
Das klappt jetzt auch soweit, wenn ich allerdings das Editfeld im 2. Fenster aktiviere und dann das Fenster schließen will muss ich zwei mal auf X klicken bis das Fenster sich schließt, im Normalfall müsste das gleich beim ersten klick zu gehen ...
Ich habs mal angehangen, eventuell habt ihr einen Tipp für mich. Danke !
Declare Ende%
Ende% = 0
Proc WndMain
Declare hMain&,hBtn1&
WindowStyle 8
hMain&=Create ("Window",%hWnd,"Hauptfenster",100,100,320,320)
hBtn1&=Create("Button",hMain&,"Klick mich feste",10,10,125,23)
WhileNot Ende% = 1
WaitMouse
If %MenuItem = -2
If MessageBox("Programm beenden?","Frage",36) = 6
Ende% = 1
EndIf
EndIf
If %GetFocus = hBtn1&
wndDlg
EndIf
EndWhile
EndProc
Proc wndDlg
Declare hEdit&,hDlg&
WindowStyle 8
hDlg& = Create("Window",hMain&,"Cooles Fenster",120,120,320,320)
Create("Text",hDlg&,"Textfeld",10,10,125,23)
hEdit& = Create("Edit",hDlg&,"",10,33,125,23)
WhileNot %MenuItem = -2
WaitMouse
If %MenuItem = -2
DestroyWindow(hDlg&)
EndIf
EndWhile
EndProc
If Ende% = 1
End
Else
WndMain
EndIf
|
| | | | |
| | « Dieser Beitrag wurde als Lösung gekennzeichnet. » | | E.T. | So mal auf die Schnelle :
Declare Ende%
Declare hMain&,hBtn1&
Ende% = 0
Proc WndMain
WindowStyle 8+512
hMain&=Create ("Window",%hWnd,"Hauptfenster",100,100,320,320)
hBtn1&=Create("Button",hMain&,"Klick mich feste",10,10,125,23)
EndProc
Proc wndDlg
Declare hEdit&,hDlg&, hDlgEnde%
WindowStyle 8+512
hDlg& = Create("Window",hMain&,"Cooles Fenster",120,120,320,320)
Create("Text",hDlg&,"Textfeld",10,10,125,23)
hEdit& = Create("Edit",hDlg&,"",10,33,125,23)
WhileNot hDlgEnde%
Waitinput
If %Key=2
DestroyWindow(hDlg&)
hDlgEnde% = 1
EndIf
EndWhile
EndProc
WndMain
WhileNot Ende% = 1
WaitInput
If %Key = 2
If MessageBox("Programm beenden?","Frage",36) = 6
Ende% = 1
EndIf
ElseIf %GetFocus = hBtn1&
wndDlg
EndIf
EndWhile
Kann leider nicht mit FreeProfan testen, nur mit X3 |
| | | XProfan X3Grüße aus Sachsen... Mario WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte... | 05.02.2017 ▲ |
| | |
| | Deaktiviert | Hallo E.T., ersteinmal Danke für die Hilfe. Im wesentlichen hing es wohl an WaitInput und %Key=2 für Profis trivial aber für einen Neuling eben erstmal eine echte Hürde wenn man die Feinheiten von XProfan noch nicht kennt. Da ich die Lösung nachvollziehen wollte hab ich auch nochmal eine Version gebastelt.
Declare Ende%
Ende% = 0
Proc WndMain
Declare hMain&,hBtn1&
WindowStyle 8
hMain&=Create ("Window",%hWnd,"Hauptfenster",100,100,320,320)
hBtn1&=Create("Button",hMain&,"Klick mich feste",10,10,125,23)
WhileNot Ende% = 1
Waitinput
If %Key = 2
If MessageBox("Programm beenden?","Frage",36) = 6
Ende% = 1
EndIf
EndIf
If %GetFocus = hBtn1&
wndDlg
EndIf
EndWhile
EndProc
Proc wndDlg
Declare hEdit&,hDlg&,inh$
WindowStyle 8
hDlg& = Create("Window",hMain&,"Cooles Fenster",120,120,320,320)
Create("Text",hDlg&,"Textfeld",10,10,125,23)
hEdit& = Create("Edit",hDlg&,"",10,33,125,23)
WhileNot %Key = 2
Waitinput
If %Key = 2
DestroyWindow(hDlg&)
EndIf
EndWhile
EndProc
If Ende% = 1
End
Else
WndMain
EndIf
|
| | | | |
| | E.T. | so nebenbei angemerkt:
Die Haupt-Programm-Schleife sollte (ebenso wie declare's fürs Hauptfenster) nicht in einer PROC liegen (hatte es in meinem Bsp. ja auch geändert). Das erstellen des Fensters kann ohne Probleme in einer eigenen Proc erfolgen. Da in einer Proc decl. Variablen (wie bei dir der Button und das Fenster) eig. auch nur in der Proc gültig sind, kann dies ganz schnell zum Chaos führen. |
| | | XProfan X3Grüße aus Sachsen... Mario WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte... | 07.02.2017 ▲ |
| |
| | Deaktiviert | Hallo E.T., stimmt, weil lokal deklarierte Variablen, Global dann nicht sichtbar sind, ab dem dritten Fenster würde das zu Problemen führen. Mein Beispiel hat wohl noch funktioniert weil nach verlassen der zweiten Proc direkt die erste fortgesetzt wird und somit die lokalen Deklarationen noch gültig sind. Ich mach mir mal den Knoten aus dem Gehirn und beherzige das für die Zukunft
Danke für den Hinweis ! |
| | | | |
| | H.Brill | Hier mal ein Beispiel, wie man es auch machen kann. Bei mehreren Fenstern muß man halt mit GetActiveWindow() erst das aktive Fenster erfragen.
Declare Ende%, hMain&, hDlg&, hBtn1&, hBtn2&
Ende% = 0
WindowStyle 8
hMain&=Create ("Window",%hWnd,"Hauptfenster",100,100,320,320)
hBtn1&=Create("Button",hMain&,"Klick mich feste",10,10,125,23)
WhileNot Ende%
Waitinput
If %Key = 2
If GetActiveWindow() = hMain&
If MessageBox("Programm beenden?","Frage",36) = 6
Ende% = 1
EndIf
EndIf
If GetActiveWindow() = hDlg&
DestroyWindow(hDlg&)
EndIf
EndIf
If GetActiveWindow() = hDlg&
If Clicked(hBtn2&)
DestroyWindow(hDlg&)
EndIf
EndIf
If Clicked(hBtn1&)
wndDlg
EndIf
EndWhile
Proc wndDlg
Declare hEdit&,inh$
WindowStyle 8
hDlg& = Create("Window",hMain&,"Cooles Fenster",120,120,320,320)
Create("Text",hDlg&,"Textfeld",10,10,125,23)
hEdit& = Create("Edit",hDlg&,"",10,33,125,23)
hBtn2& = Create("Button", hDlg&, "Ende", 10, 60, 60, 23)
EndProc
End
Und das Hauptfenster muß nicht unbedingt in eine Proc. |
| | | Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 12.02.2017 ▲ |
| |
|
AntwortenThemenoptionen | 10.714 Betrachtungen |
ThemeninformationenDieses Thema hat 3 Teilnehmer: |