CreateToolBar

Hier werden, insbesondere in den Beta-Phasen, Bugmeldungen gepostet. Das offizielle BugForum ist allerdings hier.
lite
Beiträge: 122
Registriert: 27.08.2012 21:08

CreateToolBar

Beitrag 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
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: CreateToolBar

Beitrag 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
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
lite
Beiträge: 122
Registriert: 27.08.2012 21:08

Re: CreateToolBar

Beitrag 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
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: CreateToolBar

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Re: CreateToolBar

Beitrag 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
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
Antworten