Seite 1 von 1

Fenster ohne Fokus

Verfasst: 15.10.2021 11:14
von jacdelad
Hallo,
ich habe eine Recht spezifische Frage: Für mein Ribbon gibt es Subfenster, z.B. ein ColorPicker. Wenn der aufgeht bekommt das Fenster den Fokus und das Fenster, auf dem das Ribbon liegt, verliert ihn. Wenn der ColorPicker den Fokus verliert lasse ich ihn automatisch schließen. So weit, so gut.
Mir wäre es lieber, wenn das Hauptfenster den Fokus behalten würde. Ich weiß auch wie das geht, Dank entsprechenden Style kann ich verhindern, dass der ColorPicker den Fokus bekommt. Aber: Kann ich dann auch Eingaben tätigen? Und wichtiger: Kann ich bemerken, wenn der Benutzer etwas außerhalb des Subfensters tut, z.B. ein Klick mit der Maus?

Re: Fenster ohne Fokus

Verfasst: 15.10.2021 15:34
von Axolotl
Moin,
also ich habe das immer so verstanden, dass Tastatureingaben an das control/gadget gehen, welches den Fokus hat.
Mauseingaben (Klicks?, Scrollrad, Bewegungen) können auch an unter dem Mauscursor befindliche Fenster(controls/gadget weitergegeben werden.
Aus dem Programm heraus kann man natürlich in jedes Fenster/control/gadget schreiben.

Innerhalb einer Anwendung sollte ich Jeden Maus-Klick, der in meinen Fenstern passiert, 'bemerken'.
Und ich meine, dass der Maus-Klick in ein Fenster/control/gadget den Fokus auf das Fenster/control/gadget verändert. Evtl. muss dann programatisch der Fokus auf das vorherige Fenster/control/gadget zurückgegeben werden....

Re: Fenster ohne Fokus

Verfasst: 15.10.2021 23:40
von jacdelad
Naja, das stimmt schon, aber ich will ein Fenster ohne Fokus haben und bemerken wenn was außerhalb, also auf einem anderen Fenster, angeklickt wird, um mein Fenster zu schließen. Ich weiß halt nur nicht,ob das überhaupt geht. Ich muss nochmal die Ribbons von Windows anschauen, wie die das handhaben (natürlich nicht die Programmierung, nur wie es rüberkommt, wer den Fokus hat, etc.).

Re: Fenster ohne Fokus

Verfasst: 16.10.2021 00:34
von Axolotl
Wann ich es richtig verstehe, dann muss das gehen. Du kannst ja auch zwei Fenster öffnen und in der gemeinsamen Hauptschleife die Ereignisse abarbeiten.

Re: Fenster ohne Fokus

Verfasst: 16.10.2021 08:08
von jacdelad
Das geht nicht, weil das Ribbon über ein Modul läuft.

Re: Fenster ohne Fokus

Verfasst: 17.10.2021 13:40
von Axolotl
Ich kenne leider 'das Ribbon' nicht und gegen Module habe ich eine gewisse Allergie entwickelt.
Ideen und Tipps die ich noch hätte, kennste wahrscheinlich eh und haste auch schon ausprobiert.
Also ich kann dann nix weiter beitragen. Sorry.
Happy coding and stay healthy.

Re: Fenster ohne Fokus

Verfasst: 17.10.2021 14:46
von jacdelad
Trotzdem danke. Das Ribbon (hier im Forum zu finden) ist absichtlich in einem Modul, damit es abgekapselt ist, weil es recht umfangreich ist.

Ich melde mich mal, wenn ich eine Lösung gefunden habe oder daran verzweifelt bin.

Re: Fenster ohne Fokus

Verfasst: 17.10.2021 14:53
von mk-soft
Habe etwas zeit ...

Sub Fenster schließen wenn Haupt Fenster Focus verliert

P.S. Unter Linux geht nicht, da hier die Fenster Event intern anders von gtk verarbeitet wird,

Code: Alles auswählen

;-TOP

Enumeration Windows
  #Main
  #Dialog
EndEnumeration

Enumeration Gadgets
  #Main_Button
EndEnumeration

Enumeration Status
  #MainStatusBar
EndEnumeration

Procedure Dialog()
  #DialogStyle = #PB_Window_Tool
  
  If OpenWindow(#Dialog, #PB_Ignore, #PB_Ignore, 400, 200, "Dialog" , #DialogStyle, WindowID(#Main))
    
  EndIf
  
EndProcedure


Procedure Main()
  
  #MainStyle = #PB_Window_SystemMenu | #PB_Window_MaximizeGadget | #PB_Window_MinimizeGadget
  
  If OpenWindow(#Main, #PB_Ignore, #PB_Ignore, 800, 600, "Window" , #MainStyle)
    ButtonGadget(#Main_Button, 10, 10, 120, 25, "Dialog")
    
    Repeat
      Select WaitWindowEvent()
        Case #PB_Event_CloseWindow
          Break
          
        Case #PB_Event_ActivateWindow
          Debug "#PB_Event_ActivateWindow"
          
        Case #PB_Event_DeactivateWindow
          Debug "#PB_Event_DeactivateWindow"
          Select EventWindow()
            Case #Main
              If IsWindow(#Dialog)
                If GetActiveWindow() <> #Dialog
                  CloseWindow(#Dialog)
                  Debug "Close window dialog (1)"
                EndIf
              EndIf
              
            Case #Dialog
              If GetActiveWindow() <> #main
                CloseWindow(#Dialog)
                Debug "Close window dialog (2)"
              EndIf
              
          EndSelect
          
        Case #PB_Event_Gadget
          Select EventGadget()
            Case #Main_Button
              If IsWindow(#Dialog)
                SetActiveWindow(#Dialog)
              Else
                Dialog()
              EndIf
          EndSelect
          
      EndSelect
    ForEver
    
  EndIf
  
EndProcedure : Main()

Re: Fenster ohne Fokus

Verfasst: 17.10.2021 21:32
von jacdelad
Vielen Dank erstmal. Das Ribbon läuft momentan eh nur unter Windows, da ich einige API-Aufrufe verwende. Ich komme hoffentlich morgen dazu das zu testen, ansonsten etwas später. Außerdem geht es ja auch Datum, dass was anderes im Hauptfenster passiert (Gadget angeklickt...), eben außerhalb des Ribbon-Subfensters. Aber das das Subfenster ja auch Eingaben in Stringgadgets bearbeiten muss komme ich wahrscheinlich sowiedo nicht darum ihm den Fokus zu geben.