Seite 1 von 3

Toolbar ohne Toolbar

Verfasst: 30.08.2008 21:21
von legion
Hallo !

Kleiner Trick mit "SetWindowTheme_" ! <)
Funktioniert aber leider nur ab Windows XP.
XP-Skin-Unterstützung muss "ein" sein !

Lg. Legion

Code: Alles auswählen

Procedure AnsiToUni(Ansistring.s)
 Protected LenA,LenW,UnicodeString
  LenA = Len(Ansistring)
  LenW = MultiByteToWideChar_(#CP_ACP,0,Ansistring,LenA,0,0)
  If LenW > 0
   UnicodeString = SysAllocStringLen_(0,LenW)
   MultiByteToWideChar_(#CP_ACP,0,Ansistring,LenA,UnicodeString,LenW)
   Result = UnicodeString
   ProcedureReturn result
  Else
   ProcedureReturn 0
  EndIf
EndProcedure

Procedure ExtractLargeIcon(IconNr)
 Protected IconId
 If ExtractIconEx_("Shell32.dll",IconNr, @IconID,0,1)
  ProcedureReturn IconId
 Else
  ProcedureReturn 0
 EndIf 
EndProcedure

If OSVersion() >= #PB_OS_Windows_XP
 OpenWindow(0,0,0,620, 400, "ButtonToolbar",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
 SetWindowColor(0,$FFFFFF)
 CreateGadgetList(WindowID(0))
 ContainerGadget(0,0,0,620,50,#PB_Container_Raised) 
 ButtonImageGadget(1,2,2,40,40,ExtractLargeIcon(4)) 
 ButtonImageGadget(2,45,2,40,40,ExtractLargeIcon(13))
 ButtonImageGadget(3,90,2,40,40,ExtractLargeIcon(15))
 ButtonImageGadget(4,135,2,40,40,ExtractLargeIcon(16))
 ButtonImageGadget(5,180,2,40,40,ExtractLargeIcon(22))
 ButtonImageGadget(6,572,2,40,40,ExtractLargeIcon(27)) 
 
 For i = 1 To 6
  SetWindowTheme_(GadgetID(i), 0, AnsiToUni("Toolbar"))
 Next i

 Repeat
  Event = WaitWindowEvent()
  WindowID = EventWindow()
  GadgetID = EventGadget()
  EventType = EventType()
  If Event = #PB_Event_Gadget
   If GadgetID = 6
    Break
   Else
    Debug GadgetID
   EndIf
  EndIf
 Until Event = #PB_Event_CloseWindow
EndIf


Verfasst: 30.08.2008 21:28
von milan1612
Cool - sehr interessante Funktion :lol:

Verfasst: 30.08.2008 21:47
von ts-soft
Sieht gut aus :allright:

AnsiToUni kann man aber ohne API einfacher machen, z.B. so:

Code: Alles auswählen

Procedure.s AnsiToUni(String.s)
  Protected uString.s
  uString = Space(StringByteLength(String, #PB_Unicode) + 1)
  PokeS(@uString, String, #PB_Any, #PB_Unicode)
  ProcedureReturn uString
EndProcedure

Verfasst: 30.08.2008 21:56
von marco2007
Cool! :allright:

Verfasst: 30.08.2008 22:18
von legion
Danke für euer Feedback ! :D

@ts-soft
Dein AnsiToUni Beispiel funktioniert bei mir leider nicht.

Lg. Legion

Verfasst: 30.08.2008 22:30
von ts-soft
legion hat geschrieben:Danke für euer Feedback ! :D

@ts-soft
Dein AnsiToUni Beispiel funktioniert bei mir leider nicht.

Lg. Legion
Ja, sry, weil ichs in eine Procedure gepackt hab, mach es sonst direkt oder
mit einem Macro

Code: Alles auswählen

Procedure AnsiToUni(String.s)
  Static  uString.s
  uString = Space(StringByteLength(String, #PB_Unicode) + 1)
  PokeS(@uString, String, #PB_Any, #PB_Unicode)
  ProcedureReturn @uString
EndProcedure

Verfasst: 30.08.2008 22:44
von legion
Sieht doch gleich viel besser aus ! :allright:
Werde ab sofort deine Version benutzen.

Danke !

Lg. Legion

Verfasst: 30.08.2008 23:31
von NoUser
Echt coole Sache! :allright:

Verfasst: 31.08.2008 10:32
von legion
Noch eine andere Variante ... :mrgreen:

Code: Alles auswählen

Procedure AnsiToUni(String.s)
  Static  uString.s
  uString = Space(StringByteLength(String, #PB_Unicode) + 1)
  PokeS(@uString, String, #PB_Any, #PB_Unicode)
  ProcedureReturn @uString
EndProcedure

Procedure ExtractLargeIcon(IconNr)
 Protected IconId
 If ExtractIconEx_("Shell32.dll",IconNr, @IconID,0,1)
  ProcedureReturn IconId
 Else
  ProcedureReturn 0
 EndIf 
EndProcedure

If OSVersion() >= #PB_OS_Windows_XP
 OpenWindow(0,0,0,620, 400, "ButtonToolbar",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
 SetWindowColor(0,$FFFFFF)
 CreateGadgetList(WindowID(0))
 ContainerGadget(0,0,0,620,50,#PB_Container_Flat) 
 SetGadgetColor(0,#PB_Gadget_BackColor,$00FBCFB2)

 ButtonImageGadget(1,4,4,40,40,ExtractLargeIcon(4)) 
 ButtonImageGadget(2,47,4,40,40,ExtractLargeIcon(13))
 ButtonImageGadget(3,92,4,40,40,ExtractLargeIcon(15))
 ButtonImageGadget(4,137,4,40,40,ExtractLargeIcon(16))
 ButtonImageGadget(5,182,4,40,40,ExtractLargeIcon(22))
 ButtonImageGadget(6,574,4,40,40,ExtractLargeIcon(27)) 
 
 For i = 1 To 6
  SetWindowTheme_(GadgetID(i),0, AnsiToUni("ComboBox"))
 Next i

 Repeat
  Event = WaitWindowEvent()
  WindowID = EventWindow()
  GadgetID = EventGadget()
  EventType = EventType()
  If Event = #PB_Event_Gadget
   If GadgetID = 6
    Break
   Else
    Debug GadgetID
   EndIf
  EndIf
 Until Event = #PB_Event_CloseWindow
EndIf


Verfasst: 01.09.2008 11:28
von dige
hmm, wenn ich SetWindowTheme_() auskommentiere, wird mir weiterhin
die gleiche Toolbar angezeigt. Weshalb ich mich jetzt frage, was denn
das eigentlich bewirken soll..?

Bild