Fenster ohne Fokus

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
jacdelad
Beiträge: 341
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
Wohnort: Riesa
Kontaktdaten:

Fenster ohne Fokus

Beitrag 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?
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Axolotl
Beiträge: 146
Registriert: 31.12.2008 16:34

Re: Fenster ohne Fokus

Beitrag 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....
Mostly running PureBasic <latest stable version and current alpha/beta> (x64) on Windows 11 Home
Benutzeravatar
jacdelad
Beiträge: 341
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
Wohnort: Riesa
Kontaktdaten:

Re: Fenster ohne Fokus

Beitrag 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.).
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Axolotl
Beiträge: 146
Registriert: 31.12.2008 16:34

Re: Fenster ohne Fokus

Beitrag 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.
Mostly running PureBasic <latest stable version and current alpha/beta> (x64) on Windows 11 Home
Benutzeravatar
jacdelad
Beiträge: 341
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
Wohnort: Riesa
Kontaktdaten:

Re: Fenster ohne Fokus

Beitrag von jacdelad »

Das geht nicht, weil das Ribbon über ein Modul läuft.
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Axolotl
Beiträge: 146
Registriert: 31.12.2008 16:34

Re: Fenster ohne Fokus

Beitrag 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.
Mostly running PureBasic <latest stable version and current alpha/beta> (x64) on Windows 11 Home
Benutzeravatar
jacdelad
Beiträge: 341
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
Wohnort: Riesa
Kontaktdaten:

Re: Fenster ohne Fokus

Beitrag 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.
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Fenster ohne Fokus

Beitrag 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()
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
jacdelad
Beiträge: 341
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
Wohnort: Riesa
Kontaktdaten:

Re: Fenster ohne Fokus

Beitrag 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.
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Antworten