Toolbar

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Beitrag 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?)
v6.00
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag 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.
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Mit etwas Eigeninitiative, Hirn und einer Sprache deiner Wahl.
Falsch! Er kauft sich einfach ProGUI und fertig ist die Laube.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Beitrag 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?
v6.00
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Deswegen ist es trotzdem eine Toolbar.
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Beitrag 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?
v6.00
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Beitrag 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
v6.00
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag 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
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Beitrag 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: ?)? :?
v6.00
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Ist unnoetig. Zumal in dem Code sowieso nichts geloscht wurde, da
hNewIList nicht global war.
Antworten