Fenster - Focusverlust verhindern

Anfängerfragen zum Programmieren mit PureBasic.
ThoPie
Beiträge: 130
Registriert: 19.05.2006 15:18
Kontaktdaten:

Fenster - Focusverlust verhindern

Beitrag 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.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Beim erstellen des Child-Fensters die ParentWindowID (letzter Parameter)
mit angeben, Haupfenster Disablen!

Ich hoffe Du meinst das

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ich glaube eher, er meint dieses MODAL-flag...
wie war denn nochmal die korrekte konstante, ich such mir grad nen wolf...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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 ?
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
ThoPie
Beiträge: 130
Registriert: 19.05.2006 15:18
Kontaktdaten:

Beitrag von ThoPie »

Vielen Dank.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
nco2k
Beiträge: 892
Registriert: 08.09.2004 23:13

Beitrag 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
~|__/
..o.o.. <--- This is Einkaufswagen. Copy Einkaufswagen into your signature to help him on his way to world domination.
Antworten