Seite 1 von 1

CreateToolBar

Verfasst: 04.12.2016 09:12
von lite
Hallo

Möglicherweise bin ich auf einen Fehler in PureBasic gestoßen.
Es betrifft das Toolbar-Gadget.
Solange die Toolbar integriert ist, verändern sich die Fenstereigenschaften.
Wen man nach dem Start des Prgs ein anderes Fenster anklickt, sollte das eigene Prg nach 2,5 Sekunden wieder vorne kommen.
Das Fenster bleibt im Hintergrund obwohl es mit den anderen Befehlen (Topmost,Sticky...) nach vorne geholt werden sollte.

Bitte den Code mal prüfen.

Code: Alles auswählen

  If OpenWindow(0, 0, 0, 150, 125, "ToolBar", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
        
    If CreateToolBar(0, WindowID(0))
      ToolBarStandardButton(0, #PB_ToolBarIcon_New)
      ToolBarStandardButton(1, #PB_ToolBarIcon_Open)
      ToolBarStandardButton(2, #PB_ToolBarIcon_Save)
    EndIf
    
    Delay (2500)
    SetWindowPos_(WindowID(0),#HWND_TOPMOST,0,0,0,0,#SWP_NOMOVE|#SWP_NOSIZE)
    StickyWindow(0, #True) 
    SetActiveWindow(0)
    SetWindowState(0, #PB_Window_Maximize)
    
    Repeat
      Event = WaitWindowEvent()
      If Event = #PB_Event_Menu
        Debug "ToolBar ID: "+Str(EventMenu())
      EndIf
    Until Event = #PB_Event_CloseWindow 
  EndIf

Ohne Toolbar funktioniert es wie es sein sollte.

Code: Alles auswählen

  If OpenWindow(0, 0, 0, 150, 125, "ToolBar", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
        
   ; If CreateToolBar(0, WindowID(0))
   ;   ToolBarStandardButton(0, #PB_ToolBarIcon_New)
   ;   ToolBarStandardButton(1, #PB_ToolBarIcon_Open)
   ;   ToolBarStandardButton(2, #PB_ToolBarIcon_Save)
   ; EndIf
    
    Delay (2500)
    SetWindowPos_(WindowID(0),#HWND_TOPMOST,0,0,0,0,#SWP_NOMOVE|#SWP_NOSIZE)
    StickyWindow(0, #True) 
    SetActiveWindow(0)
    SetWindowState(0, #PB_Window_Maximize)
    
    Repeat
      Event = WaitWindowEvent()
      If Event = #PB_Event_Menu
        Debug "ToolBar ID: "+Str(EventMenu())
      EndIf
    Until Event = #PB_Event_CloseWindow 
  EndIf

Gibt es zum Erstellen einer Toolbar einen API-Aufruf als alternative ?

Gruß

Lite

Re: CreateToolBar

Verfasst: 04.12.2016 12:54
von RSBasic
Die Fensterstyles ändern sich nach dem Erstellen der ToolBar nicht:

Code: Alles auswählen

If OpenWindow(0, 0, 0, 150, 125, "ToolBar", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  
  Debug GetWindowLongPtr_(WindowID(0), #GWL_STYLE)
  Debug GetWindowLongPtr_(WindowID(0), #GWL_EXSTYLE)
  
  If CreateToolBar(0, WindowID(0))
    ToolBarStandardButton(0, #PB_ToolBarIcon_New)
    ToolBarStandardButton(1, #PB_ToolBarIcon_Open)
    ToolBarStandardButton(2, #PB_ToolBarIcon_Save)
  EndIf
  
  Debug GetWindowLongPtr_(WindowID(0), #GWL_STYLE)
  Debug GetWindowLongPtr_(WindowID(0), #GWL_EXSTYLE)
  
  Delay (2500)
  SetWindowPos_(WindowID(0),#HWND_TOPMOST,0,0,0,0,#SWP_NOMOVE|#SWP_NOSIZE)
  StickyWindow(0, #True)
  SetActiveWindow(0)
  SetWindowState(0, #PB_Window_Maximize)
  
  Debug GetWindowLongPtr_(WindowID(0), #GWL_STYLE)
  Debug GetWindowLongPtr_(WindowID(0), #GWL_EXSTYLE)
  
  Repeat
    Event = WaitWindowEvent()
    If Event = #PB_Event_Menu
      Debug "ToolBar ID: "+Str(EventMenu())
    EndIf
  Until Event = #PB_Event_CloseWindow
EndIf
Aber ich kann es ebenfalls bestätigen. Keine Ahnung, woran das liegt.
Ich habe aber eine Lösung gefunden, wie du das umgehen kannst:

Code: Alles auswählen

If OpenWindow(0, 0, 0, 150, 125, "ToolBar", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  
  If CreateToolBar(0, WindowID(0))
    ToolBarStandardButton(0, #PB_ToolBarIcon_New)
    ToolBarStandardButton(1, #PB_ToolBarIcon_Open)
    ToolBarStandardButton(2, #PB_ToolBarIcon_Save)
  EndIf
  
  Delay (2500)
  SetWindowPos_(WindowID(0),#HWND_TOPMOST,0,0,0,0,#SWP_NOMOVE|#SWP_NOSIZE)
  StickyWindow(0, #True)
  SetActiveWindow(0)
  SetWindowState(0, #PB_Window_Minimize)
  SetWindowState(0, #PB_Window_Maximize)
  
  Repeat
    Event = WaitWindowEvent()
    If Event = #PB_Event_Menu
      Debug "ToolBar ID: "+Str(EventMenu())
    EndIf
  Until Event = #PB_Event_CloseWindow
EndIf

Re: CreateToolBar

Verfasst: 04.12.2016 19:29
von lite
@RSBasic

Danke für Lösung. Es hilft momentan weiter. Nur sieht es nicht besonders professionell aus. Komisch ist das verhalten auf alle Fälle.
Vielleicht ist es auch ein Windows-Bug.
Irgendwie muss es eine andere Lösung geben.
Der PureBasic-Editor nutzt eine Toolbar und dort funktioniert es auch.
Bringt es was, eine Meldung im englischen Forum zu machen ?

Gruß

Lite

Re: CreateToolBar

Verfasst: 04.12.2016 19:52
von RSBasic
Es ist auch lustig, dass StickyWindow() gar nicht wirksam ist, wenn vorher die ToolBar erstellt wird und das Fenster plötzlich im Hintergrund erscheint.
Selbst wenn man das Fenster manuell mit der Maus in den Vordergrund setzt, bleibt das Fenster nicht im Vordergrund, wenn man ein anderes Fenster öffnet.
Wenn die ToolBar erst danach erstellt wird, funktioniert es einwandfrei und das Fenster bleibt stets im Vordergrund.
Ob es ein PB- oder Windows-Bug ist, weiß ich nicht. Das müsste man mit reinen WinAPI-Befehlen testen.
Aber du kannst gerne mal im englischen Forum nachfragen, warum das so ist.

Re: CreateToolBar

Verfasst: 04.12.2016 19:53
von _JON_
lite hat geschrieben:Bringt es was, eine Meldung im englischen Forum zu machen ?
Die Beta Phase für PB 5.44 läuft gerade.
Da kann ein gemeldeter Bug, mit etwas Glück schnell behoben werden. :D