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 :mrgreen: , 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 :mrgreen:

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