Seite 1 von 1
Fenster - Focusverlust verhindern
Verfasst: 10.03.2007 17:06
von ThoPie
Hallo,
aus meinem Hauptfenster wird ein Child-Fenster geöffnet.
Gibt es eine Möglichkeit, den Fokusverlust des Childfensters zu verhindern? Es soll nur durch den Druck auf einen Button geschlossen werden.
Vielen Dank.
Verfasst: 10.03.2007 17:12
von ts-soft
Beim erstellen des Child-Fensters die ParentWindowID (letzter Parameter)
mit angeben, Haupfenster Disablen!
Ich hoffe Du meinst das
Gruß
Thomas
Verfasst: 10.03.2007 17:18
von Kaeru Gaman
ich glaube eher, er meint dieses MODAL-flag...
wie war denn nochmal die korrekte konstante, ich such mir grad nen wolf...
Verfasst: 10.03.2007 17:23
von ts-soft
Kaeru Gaman hat geschrieben:ich glaube eher, er meint dieses MODAL-flag...
wie war denn nochmal die korrekte konstante, ich such mir grad nen wolf...
Gibts nicht

, er meint genau das, was ich beschrieben habe!
(Such mal weiter, so ein Flag gibts nicht)
Hier ein Beispiel:
Code: Alles auswählen
Procedure CreateChild()
OpenWindow(1, 100, 100, 200, 200, "Childfenster", #PB_Window_SystemMenu, WindowID(0))
EndProcedure
If OpenWindow(0, #PB_Ignore, #PB_Ignore, 640, 480, "Hauptfenster")
CreateGadgetList(WindowID(0))
ButtonGadget(0, 10, 10, 80, 30, "Child")
EndIf
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
If EventWindow() = 0
Break
Else
If IsWindow(1)
CloseWindow(1)
DisableWindow(0, #False)
EndIf
EndIf
Case #PB_Event_Gadget
Select EventGadget()
Case 0
If Not IsWindow(1)
DisableWindow(0, #True)
CreateChild()
EndIf
EndSelect
EndSelect
ForEver
Nicht schön, aber sollte alles wichtige aufzeigen
Gruß
Thomas
Werde auch mal Modalflakes suchen, sind die von Kellog's ?
Verfasst: 10.03.2007 17:36
von ThoPie
Vielen Dank.
Verfasst: 10.03.2007 17:41
von Kaeru Gaman
ich meine das flag, das bei einem requester gesetzt ist, so dass man einen requester erst wieder schließen muss, bevor man das hauptfenster wieder benutzen kann....
is witzig, dass das so mit disable funktioniert...
für den aufruf von requestern gab es irgendwie ein flag, wodurch das auch bewerkstelligt wird/wurde...
die Modalflakes sind nicht von Kellogg, aber du kannst dir auch nen Salat aus Casual Endievias machen...
Verfasst: 10.03.2007 17:44
von ts-soft
ts-soft hat geschrieben:er meint genau das, was ich beschrieben habe!
ThoPie hat geschrieben:Vielen Dank.
Schwein gehabt
Für Systemdialoge gibts ein Flag. Für Dialoge gibts einen Fensterstil, aber
PB-Fenster sind keine Dialoge, sondern werden intern mit CreateWindowEx_() erstellt.
Verfasst: 10.03.2007 20:08
von nco2k
@ThoPie
oder gleich die fenster+events richtig verwalten.
Code: Alles auswählen
Enumeration
#WindowA
#WindowB
EndEnumeration
Enumeration
#ButtonA
#ButtonB
EndEnumeration
Procedure OpenWinA()
If OpenWindow(#WindowA, 0, 0, 300, 200, "WinA", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(#WindowA))
ButtonGadget(#ButtonA, 5, 5, 100, 25, "Open WinB")
SetActiveWindow(#WindowA)
ProcedureReturn #True
EndIf
CloseWindow(#WindowA)
EndIf
ProcedureReturn #False
EndProcedure
Procedure OpenWinB()
If OpenWindow(#WindowB, 0, 0, 200, 100, "WinB", #PB_Window_SystemMenu | #PB_Window_WindowCentered, WindowID(#WindowA))
If CreateGadgetList(WindowID(#WindowB))
ButtonGadget(#ButtonB, 5, 5, 100, 25, "Close WinB")
DisableWindow(#WindowA, #True)
SetActiveWindow(#WindowB)
ProcedureReturn #True
EndIf
CloseWindow(#WindowB)
EndIf
ProcedureReturn #False
EndProcedure
Procedure CloseWinA()
End
EndProcedure
Procedure CloseWinB()
CloseWindow(#WindowB)
DisableWindow(#WindowA, #False)
SetActiveWindow(#WindowA)
EndProcedure
Procedure EventWinA(WinEvent)
Select WinEvent
Case #PB_Event_CloseWindow
CloseWinA()
Case #PB_Event_Gadget
Select EventGadget()
Case #ButtonA
OpenWinB()
EndSelect
EndSelect
EndProcedure
Procedure EventWinB(WinEvent)
Select WinEvent
Case #PB_Event_CloseWindow
CloseWinB()
Case #PB_Event_Gadget
Select EventGadget()
Case #ButtonB
CloseWinB()
EndSelect
EndSelect
EndProcedure
If OpenWinA()
Repeat
WinEvent = WaitWindowEvent()
Select EventWindow()
Case #WindowA
EventWinA(WinEvent)
Case #WindowB
EventWinB(WinEvent)
EndSelect
ForEver
EndIf : End
c ya,
nco2k