Seite 1 von 1

[Fixed] PB 4.51 x86 - Toolbarfunktionen

Verfasst: 06.06.2011 20:28
von Bisonte
Hallo.

Ich habe ein merkwürdiges Phänomen, das ich durchaus als Bug bezeichnen möchte.

Wenn man in PB4.51 eine Toolbarfunktion aufruft, ohne das irgendwo im restlichen Source
ein OpenWindow() kommt, gibt der Compiler einen

POLINK:error: Unresolved external symbol '_PB_Image_GETDIBPitch.'
POLINK:fatal error: 1 unresolved external(s)

aus.

Ich war grade dabei mir aus den RSBasic WinApi Snippets, eine Procedure zu basteln.

Code: Alles auswählen

Procedure.i SetToolBarButtonSize(ToolBar.i, Size.i)
  
  Protected TBID
  
  If IsToolBar(ToolBar)
    TBID = SendMessage_(ToolBarID(ToolBar),#TB_GETIMAGELIST,0,0)
    ImageList_SetIconSize_(TBID,Size,Size)
    SendMessage_(ToolBarID(ToolBar),#TB_SETIMAGELIST,0,TBID)
    SendMessage_(ToolBarID(ToolBar),#TB_AUTOSIZE,0,0)
  EndIf

EndProcedure

; If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
;   
; 
Hier erscheint bei mir dieser besagte Fehler, wenn ich das Openwindow wieder aktiviere, gibt es den Fehler nicht.
(Hab das auch auf WinXP getestet, mit frisch installiertem PB4.51)

Auch ein ganz banales IsToolBar() allein im Quellcode löst diesen Fehler aus.
Kann das jemand bestätigen ?

Re: PB 4.51 x86 - Toolbarfunktionen

Verfasst: 06.06.2011 20:33
von ts-soft
Tritt in PB4.60 b3 nicht mehr auf, somit also bereits gefixed.

Gruß
Thomas

Re: PB 4.51 x86 - Toolbarfunktionen

Verfasst: 06.06.2011 20:47
von Bisonte
Ok. Dann bin ich beruhigt ;)

Edit : aber bis die final erscheint, wende ich dann das ganze so an :

Code: Alles auswählen

Procedure.i SetToolBarButtonSize(hToolBar.i, Size.i)
  
  Protected TBID
  
  If hToolBar
    TBID = SendMessage_(hToolBar,#TB_GETIMAGELIST,0,0)
    ImageList_SetIconSize_(TBID,Size,Size)
    SendMessage_(hToolBar,#TB_SETIMAGELIST,0,TBID)
    SendMessage_(hToolBar,#TB_AUTOSIZE,0,0)
  EndIf

EndProcedure

Re: [Fixed] PB 4.51 x86 - Toolbarfunktionen

Verfasst: 06.06.2011 21:13
von ts-soft
Als workaround würde auch dies gehen:

Code: Alles auswählen

Procedure.i SetToolBarButtonSize(ToolBar.i, Size.i)
 
  Protected TBID
 
  If IsToolBar(ToolBar)
    TBID = SendMessage_(ToolBarID(ToolBar),#TB_GETIMAGELIST,0,0)
    ImageList_SetIconSize_(TBID,Size,Size)
    SendMessage_(ToolBarID(ToolBar),#TB_SETIMAGELIST,0,TBID)
    SendMessage_(ToolBarID(ToolBar),#TB_AUTOSIZE,0,0)
  EndIf
  ProcedureReturn 
  OpenWindow(-1, 0, 0, 0, 0, "")
EndProcedure

Re: [Fixed] PB 4.51 x86 - Toolbarfunktionen

Verfasst: 07.06.2011 00:55
von Bisonte
Das gefällt mir ;)

Dann muss man nicht immer als Parameter ToolBarID() benutzen ;)

Aber sind das Fenster und dessen Ressourcen sofort wieder freigegeben,
oder sollte man da noch ein CloseWindow() dranhängen ?

Re: [Fixed] PB 4.51 x86 - Toolbarfunktionen

Verfasst: 07.06.2011 07:20
von ts-soft
Bisonte hat geschrieben:Aber sind das Fenster und dessen Ressourcen sofort wieder freigegeben,
oder sollte man da noch ein CloseWindow() dranhängen ?
Nein, der Code wird niemals ausgeführt, lediglich der Compiler bemerkt, das es ein Fenster "gibt",
und initialisiert alles für Menu und Toolbar.