Seite 2 von 4

Verfasst: 17.10.2007 06:38
von Thomas
So klappt das nicht!:

Code: Alles auswählen

SendMessage_(hwndToolbar,#TB_SETBITMAPSIZE,0,32 | 32 << 16)
Meine 32x32-Pixel-Icons werden wieder nur als 16x16 dargestellt Wieso? :|

Verfasst: 17.10.2007 07:11
von edel
weil die interne Imagelist auf 16x16 gestellt ist

Suche auf MSDN nach :

TB_GETIMAGELIST
TB_SETIMAGELIST
ImageList_Destroy
ImageList_Create

Wenn du das in deinen Code eingebaut setzt du noch die Button Groesse
richtig (siehe Fluid Byte Post). Danach kannst du deine Buttons einfuegen.

Verfasst: 17.10.2007 08:45
von Shardik
Thomas hat geschrieben: Kann man auch größere Toolbarsymbole darstellen?
z.B. 24x24-Pixel-Große Grafiken statt immer nur den kleinen 16x16-Pixel-Grafiken?
Sparkie hat im englischen Forum ein direkt einsetzbares Code-Beispiel für PB 3.9x veröffentlicht:
http://www.purebasic.fr/english/viewtop ... 06&start=3

Eine andere Möglichkeit besteht darin, die in den PureTools von Danilo enthaltene ToolbarPro einzusetzen (UserLib angepaßt an PB 4 und weiterentwickelt von srod):
http://www.purebasic.fr/english/viewtopic.php?t=25658

Verfasst: 17.10.2007 13:34
von Thomas
Shardik hat geschrieben:
Thomas hat geschrieben: Kann man auch größere Toolbarsymbole darstellen?
z.B. 24x24-Pixel-Große Grafiken statt immer nur den kleinen 16x16-Pixel-Grafiken?
Sparkie hat im englischen Forum ein direkt einsetzbares Code-Beispiel für PB 3.9x veröffentlicht:
http://www.purebasic.fr/english/viewtop ... 06&start=3
Das klappt aber nicht mit den ToolBarStandardButton(...)! :|

Gibt es ne möglichkeit ToolBarButtons wie beim IE zu erstellen?

Verfasst: 17.10.2007 13:50
von Fluid Byte
Gibt es ne möglichkeit ToolBarButtons wie beim IE zu erstellen?
Was ist an den anders?

Verfasst: 17.10.2007 14:48
von Thomas
Fluid Byte hat geschrieben:
Gibt es ne möglichkeit ToolBarButtons wie beim IE zu erstellen?
Was ist an den anders?
Größer, mit DropDown-Pfeilen, ...

Verfasst: 17.10.2007 14:57
von edel
Natuerlich
MSDN hat geschrieben: BTNS_DROPDOWN
Version 5.80. Creates a drop-down style button that can display a list when the button is clicked. Instead of the WM_COMMAND message used for normal buttons, drop-down buttons send a TBN_DROPDOWN notification. An application can then have the notification handler display a list of options. Use the equivalent style flag, TBSTYLE_DROPDOWN, for version 4.72 and earlier.
If the toolbar has the TBSTYLE_EX_DRAWDDARROWS extended style, drop-down buttons will have a drop-down arrow displayed in a separate section to their right. If the arrow is clicked, a TBN_DROPDOWN notification will be sent. If the associated button is clicked, a WM_COMMAND message will be sent.
Bzw TBSTYLE_DROPDOWN .

Verfasst: 17.10.2007 15:31
von Thomas
Fluid Byte hat geschrieben:

Code: Alles auswählen

OpenWindow(0,0,0,400,300,"void",$CC0001)

hwndToolbar = CreateToolBar(0,WindowID(0))

For i=0 To 5 : ToolBarStandardButton(i,i) : Next

SendMessage_(hwndToolbar,#TB_SETBUTTONSIZE,0,32 | 32 << 16)
SendMessage_(hwndToolbar,#TB_AUTOSIZE,0,0)

While WaitWindowEvent() ! 16 : Wend
Ok,
wie krieg ich hier die Icons größer und kann trotzdem noch ToolbarStandardButton(...) nutzen?

Verfasst: 17.10.2007 16:24
von Shardik
Thomas hat geschrieben: Ok,
wie krieg ich hier die Icons größer und kann trotzdem noch ToolbarStandardButton(...) nutzen?
Ich war jetzt zu faul, mit ResourceHacker die korrekte DLL zu suchen, aber mit der Shell32.Dll würde es so gehen:

Code: Alles auswählen

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

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

If OpenWindow(0, 0, 0, 350, 250, "ToolBar mit großen Standard-Icons", #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) 

  ; ----- Icons aus Shell32.dll extrahieren
  Shell32Icon0 = ExtractIcon_(0, "Shell32.dll", 42)
  Shell32Icon1 = ExtractIcon_(0, "Shell32.dll", 43)
  Shell32Icon2 = ExtractIcon_(0, "Shell32.dll", 44)

  ToolBarImageButton(0, Shell32Icon0)
  ToolBarImageButton(1, Shell32Icon1)
  ToolBarImageButton(2, Shell32Icon2)

  Repeat 
    EventID = WaitWindowEvent()

    If EventID = #PB_Event_Menu 
      Debug "ToolBar ID: "+Str(EventMenu()) 
    EndIf 

  Until EventID = #PB_Event_CloseWindow

  ImageList_Destroy_(hNewIList) 
EndIf
Noch einfacher (und mit den Standard-Icons) geht es mit Danilos UserLib ToolBarPro:

Code: Alles auswählen

If OpenWindow(0, 0, 0, 350, 250, "ToolBarPro mit großen Standard-Icons", #PB_Window_SystemMenu |#PB_Window_SizeGadget | #PB_Window_ScreenCentered)
  CreateTB(0, WindowID(0), 24, 24, #TBpro_FLAT | #TBpro_BORDER)
  AddTBsysIcons()
  AddTBbutton(0, #TBpro_FILEOPEN, #TBpro_BUTTON)
  AddTBbutton(1, #TBpro_FILESAVE, #TBpro_BUTTON)
  AddTBseparator()
  AddTBbutton(2, #TBpro_DELETE, #TBpro_BUTTON)

  Repeat 
    EventID = WaitWindowEvent()

    If EventID = #PB_Event_Menu
      Debug "ToolBar ID: " + Str(EventMenu())
    EndIf
  Until EventID = #PB_Event_CloseWindow
EndIf

Verfasst: 17.10.2007 16:29
von Thomas
ich glaub ich weiß nun auch, wieso es mit ToolbarStandardButton(..., #PB_ToolBarIcon_New) nicht geht:
Das Ding kann so nur 32x32 Pixel-Icons.