Toolbar ohne Toolbar

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
legion
Beiträge: 467
Registriert: 08.10.2006 18:04
Computerausstattung: Intel Core i5-6500 @ 4x 3.6GHz mit Windows 10 Pro, Intel Core-i7 mit Ubuntu 18.04 bionic, x86_64 Linux 4.18.0-16-generic, Microsoft Surface Pro - Windows 10 Pro
Wohnort: Wien
Kontaktdaten:

Toolbar ohne Toolbar

Beitrag 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

Zuletzt geändert von legion am 30.08.2008 22:11, insgesamt 2-mal geändert.
PB 5.71 LTS Windows 10 Pro & Ubuntu 18.04.2 LTS & Linux Mint 19.3
-----------------------------------------------------
Alles ist, wie man glaubt, dass es ist!
Benutzeravatar
milan1612
Beiträge: 810
Registriert: 15.04.2007 17:58

Beitrag von milan1612 »

Cool - sehr interessante Funktion :lol:
Bin nur noch sehr selten hier, bitte nur noch per PN kontaktieren
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
marco2007
Beiträge: 906
Registriert: 26.10.2006 13:19
Kontaktdaten:

Beitrag von marco2007 »

Cool! :allright:
Windows 11 - PB 6.03 x64
_________________________________
Benutzeravatar
legion
Beiträge: 467
Registriert: 08.10.2006 18:04
Computerausstattung: Intel Core i5-6500 @ 4x 3.6GHz mit Windows 10 Pro, Intel Core-i7 mit Ubuntu 18.04 bionic, x86_64 Linux 4.18.0-16-generic, Microsoft Surface Pro - Windows 10 Pro
Wohnort: Wien
Kontaktdaten:

Beitrag von legion »

Danke für euer Feedback ! :D

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

Lg. Legion
PB 5.71 LTS Windows 10 Pro & Ubuntu 18.04.2 LTS & Linux Mint 19.3
-----------------------------------------------------
Alles ist, wie man glaubt, dass es ist!
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
legion
Beiträge: 467
Registriert: 08.10.2006 18:04
Computerausstattung: Intel Core i5-6500 @ 4x 3.6GHz mit Windows 10 Pro, Intel Core-i7 mit Ubuntu 18.04 bionic, x86_64 Linux 4.18.0-16-generic, Microsoft Surface Pro - Windows 10 Pro
Wohnort: Wien
Kontaktdaten:

Beitrag von legion »

Sieht doch gleich viel besser aus ! :allright:
Werde ab sofort deine Version benutzen.

Danke !

Lg. Legion
PB 5.71 LTS Windows 10 Pro & Ubuntu 18.04.2 LTS & Linux Mint 19.3
-----------------------------------------------------
Alles ist, wie man glaubt, dass es ist!
NoUser

Beitrag von NoUser »

Echt coole Sache! :allright:
Benutzeravatar
legion
Beiträge: 467
Registriert: 08.10.2006 18:04
Computerausstattung: Intel Core i5-6500 @ 4x 3.6GHz mit Windows 10 Pro, Intel Core-i7 mit Ubuntu 18.04 bionic, x86_64 Linux 4.18.0-16-generic, Microsoft Surface Pro - Windows 10 Pro
Wohnort: Wien
Kontaktdaten:

Beitrag 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

PB 5.71 LTS Windows 10 Pro & Ubuntu 18.04.2 LTS & Linux Mint 19.3
-----------------------------------------------------
Alles ist, wie man glaubt, dass es ist!
Benutzeravatar
dige
Beiträge: 1236
Registriert: 08.09.2004 08:53

Beitrag 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
"Papa, ich laufe schneller - dann ist es nicht so weit."
Antworten