Seite 3 von 4

Verfasst: 17.10.2007 16:35
von Thomas
Wie kann man so eine Toolbar programmieren?
http://www.purebasic.fr/english/viewtop ... ht=toolbar
(Die ist aber schon in PB geprogt, oder?)

Verfasst: 17.10.2007 17:00
von edel
Thomas hat geschrieben:Wie kann man so eine Toolbar programmieren?
http://www.purebasic.fr/english/viewtop ... ht=toolbar
(Die ist aber schon in PB geprogt, oder?)
Mit etwas Eigeninitiative, Hirn und einer Sprache deiner Wahl.

Verfasst: 17.10.2007 17:15
von Fluid Byte
Mit etwas Eigeninitiative, Hirn und einer Sprache deiner Wahl.
Falsch! Er kauft sich einfach ProGUI und fertig ist die Laube.

Verfasst: 17.10.2007 19:11
von Thomas
Also ich vermute mal das ist mit PB und viel API gemacht.
Auch glaube ich, dass er Rebar verwendet hat.

Liege ich da richtig?

Verfasst: 17.10.2007 19:13
von edel
Deswegen ist es trotzdem eine Toolbar.

Verfasst: 17.10.2007 19:38
von Thomas

Code: Alles auswählen

#TB_SETIMAGELIST = #WM_USER + 48 
#TB_GETIMAGELIST = #WM_USER + 49 

LoadImage(1, "Image.ico")

Procedure MakeLong(LowWord.W, HighWord.W) 
  ProcedureReturn (HighWord * $10000) | (LowWord & $FFFF) 
EndProcedure 

If OpenWindow(0, 0, 0, 300, 200, "Große Toolbar-Schaltflächen", #PB_Window_SystemMenu |#PB_Window_SizeGadget | #PB_Window_ScreenCentered) 
  hTB = CreateToolBar(0, WindowID(0)) 
  hOldIList = SendMessage_(hTB, #TB_GETIMAGELIST, 0, 0); 
  hNewIList = ImageList_Duplicate_(hOldIList) 
  ImageList_Destroy_(hOldIList) 
  ImageList_SetIconSize_(hNewIList, 32, 32) 
  SendMessage_(hTB, #TB_SETIMAGELIST, 0, hNewIList) 
  SendMessage_(hTB, #TB_SETBITMAPSIZE, 0, MakeLong(32,32)) 
  SendMessage_(hTB, #TB_SETBUTTONSIZE, 0, MakeLong(36,36)) 
  SendMessage_(hTB, #TB_AUTOSIZE, 0, 0) 
  ToolBarImageButton(0, ImageID(1)) 

  Repeat 
    EventID = WaitWindowEvent() 
    If EventID = #PB_Event_Menu 
      Debug "ToolBar ID: "+Str(EventMenu()) 
    EndIf 
  Until EventID = #PB_Event_CloseWindow 
  ImageList_Destroy_(hNewIList) 
EndIf 
Hier kann man doch eigentlich die beiden Zeilen weglassen:

Code: Alles auswählen

  SendMessage_(hTB, #TB_SETBITMAPSIZE, 0, MakeLong(32,32)) 
  SendMessage_(hTB, #TB_SETBUTTONSIZE, 0, MakeLong(36,36)) 
oder mach das nen Unterschied?

Verfasst: 17.10.2007 19:58
von Thomas
Wenns so richtig klappt:

Dann hab ich hier mal ein Bsp:

Code: Alles auswählen

;LoadImage(1, "Image.ico")

Procedure SetToolbarHeight(ToolbarID.l, Width.l, Height.l)

  OldListID.l = SendMessage_(ToolbarID, #TB_GETIMAGELIST, 0, 0)
  Global NewListID.l = ImageList_Duplicate_(OldListID)
  ImageList_Destroy_(OldListID)
  ImageList_SetIconSize_(NewListID, Width, Height)
  SendMessage_(ToolbarID, #TB_SETIMAGELIST, 0, NewListID)
  SendMessage_(ToolbarID, #TB_AUTOSIZE, 0, 0)

EndProcedure

Procedure FreeNewToolBar()

  ImageList_Destroy_(NewListID) 

EndProcedure

If OpenWindow(0, 0, 0, 300, 100, "Große Toolbar-Schaltflächen", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) 

  ToolbarID.l = CreateToolBar(0, WindowID(0))
  SetToolbarHeight(ToolbarID, 32, 32)

  ;ToolBarImageButton(0, ImageID(1))

  ToolBarImageButton(1, 5)
  ToolBarImageButton(2, 7)
  ToolBarImageButton(3, 9)
  ToolBarImageButton(4, 11)
  ToolBarImageButton(5, 21)

  Repeat
    EventID = WaitWindowEvent()
  Until EventID = #PB_Event_CloseWindow

  FreeNewToolBar()

EndIf

End

Verfasst: 17.10.2007 20:26
von edel
Mach es lieber so :

Code: Alles auswählen

Procedure CreateToolBarEx(ID.l, Width.l, Height.l,parent)
  ToolbarID.l = CreateToolBar(ID,parent)
  OldListID.l = SendMessage_(ToolbarID, #TB_GETIMAGELIST, 0, 0)
  ImageList_SetIconSize_(OldListID, Width, Height)
  SendMessage_(ToolbarID, #TB_SETIMAGELIST , 0, OldListID)
  SendMessage_(ToolbarID,#TB_AUTOSIZE,0,0) 
  ProcedureReturn ToolbarID
EndProcedure

If OpenWindow(0, 0, 0, 300, 100, "Große Toolbar-Schaltflächen", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
   
  CreateToolBarEx(0,32,32,WindowID(0))

  ToolBarImageButton(2, 7)

  Repeat
    EventID = WaitWindowEvent()
  Until EventID = #PB_Event_CloseWindow

EndIf

End

Verfasst: 17.10.2007 21:09
von Thomas
Und was ist mit diesen Zeilen:

Code: Alles auswählen

  OldListID.l = SendMessage_(ToolbarID, #TB_GETIMAGELIST, 0, 0) 
  Global NewListID.l = ImageList_Duplicate_(OldListID) 
  ImageList_Destroy_(OldListID) 
und

Code: Alles auswählen

  ImageList_Destroy_(hNewIList) 
Werden die nicht mehr benötigt (was machen die genau :oops: ?)? :?

Verfasst: 18.10.2007 04:14
von edel
Ist unnoetig. Zumal in dem Code sowieso nichts geloscht wurde, da
hNewIList nicht global war.