Kleine Systemicons

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

Kleine Systemicons

Beitrag von Delle »

Hallo,

weiß jemand noch wie man die "kleinen" Systenicons extrahieren (und für Buttons) kann?

Bild

Hab nur die "großen" gefunden:

Code: Alles auswählen

; German forum: 
; Author: Unknown (updated for PB4.00 by blbltheworm)
; Date: 21. January 2003
; OS: Windows
; Demo: No

SystemPath.s=Space(255)
Result=GetSystemDirectory_(SystemPath.s,255)
OpenWindow(0,0,0,800,150,"Icon-Test",#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(0))
 For a=0 To 19
  ButtonImageGadget(a,10+a*36,10,36,36,ExtractIcon_(0,SystemPath+"\SetupAPI.dll",a))
  ButtonImageGadget(a,10+a*36,50,36,36,ExtractIcon_(0,SystemPath+"\SetupAPI.dll",a+19))
 Next
EndIf
Repeat : Until WindowEvent()=#PB_Event_CloseWindow
End

; IDE Options = PureBasic v4.00 (Windows - x86)
; Folding = -
PB 6.21 | Win 11
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

Re: Kleine Systemicons

Beitrag von Delle »

Bei der Toolbar sind die alle mit drin, brauche sie aber eher für Buttons:

Konstante Dargestelltes Symbol
---------------------------------------------------
#PB_ToolBarIcon_New Neu
#PB_ToolBarIcon_Open Öffnen
#PB_ToolBarIcon_Save Speichern
#PB_ToolBarIcon_Print Drucken
#PB_ToolBarIcon_PrintPreview Druckvorschau
#PB_ToolBarIcon_Find Suchen
#PB_ToolBarIcon_Replace Ersetzen

#PB_ToolBarIcon_Cut Ausschneiden
#PB_ToolBarIcon_Copy Kopieren
#PB_ToolBarIcon_Paste Einfügen
#PB_ToolBarIcon_Undo Rückgängig
#PB_ToolBarIcon_Redo Wiederholen

#PB_ToolBarIcon_Delete Löschen
#PB_ToolBarIcon_Properties Eigenschaften
#PB_ToolBarIcon_Help Hilfe
PB 6.21 | Win 11
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

Re: Kleine Systemicons

Beitrag von ts-soft »

ExtractIcon_ kannst Du dafür nicht einsetzen, mit LoadImage_ API geht es, nur die gewünschte Größe angeben, in der DLL
sollte diese vorhanden sein.

Falls Du mit LoadImage nicht klar kommt, bastel ich Dir auch ein Beispiel.

Gruß
Thomas

// edit

Code: Alles auswählen

Procedure MyLoadImage(Path.s, Width, Height)
  ProcedureReturn LoadImage_(GetModuleHandle_(0), Path, #IMAGE_ICON, Width, Height, #LR_LOADFROMFILE)
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
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: Kleine Systemicons

Beitrag von Bisonte »

und da es mit API hinzugefügte Icons sind, sollte man die auch wieder mit DestroyIcon_(handle) freigeben, weil PB das nicht von alleine macht bei Programmende...

richtig ?
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
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

Re: Kleine Systemicons

Beitrag von ts-soft »

Bisonte hat geschrieben:richtig ?
In diesem Fall ist das richtig, weil wir das Flag: #LR_SHARED nicht verwendet haben.
Wenn mit #LR_SHARED geladen wird, ist das nicht nötig, aber dann dürfen wir die Größe nicht bestimmen und darum geht es hier ja.
Bei den ExtracIcon_ und ähnlichen ist es grundsätzlich erforderlich, diese zu zerstören, da diese an keinen Prozess gebunden sind
und Windows somit nicht weiß, wann diese freizugeben wären.
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
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Kleine Systemicons

Beitrag von Danilo »

Mit ExtractIconEx_() gibt es die großen und kleinen Icons.

Code: Alles auswählen

OpenWindow(0,0,0,800,500,"Icons",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
    ExplorerListGadget(0, 0, 0, 450, 500, "C:\*.exe;*.dll;*.ico",#PB_Explorer_FullRowSelect)
    ListIconGadget(1, 450, 0, 350, 250, "", 350)
        SetGadgetAttribute(1, #PB_ListIcon_DisplayMode, #PB_ListIcon_LargeIcon)
    ListIconGadget(2, 450, 250, 350, 250, "", 350)
        SetGadgetAttribute(2, #PB_ListIcon_DisplayMode, #PB_ListIcon_SmallIcon)
Repeat
    event = WaitWindowEvent()
    If event = #PB_Event_Gadget And EventGadget()=0 And EventType()=#PB_EventType_Change
        path.s = GetGadgetText(0)
        SetWindowTitle(0,"Icon - "+path)
        item = GetGadgetState(0)
        If GetGadgetItemState(0,item) & #PB_Explorer_File
            ClearGadgetItems(1) : ClearGadgetItems(2)
            file.s = path+GetGadgetItemText(0,item)
            numIcons = ExtractIconEx_(file,0,0,0,0)
            If numIcons
                Dim largeIcons(numIcons) : Dim smallIcons(numIcons)
                If ExtractIconEx_(file,0,largeIcons(),smallIcons(),numIcons)
                    For i = 0 To numicons-1
                        If largeIcons(i) : AddGadgetItem(1,-1,"Icon "+Str(i),largeIcons(i)) : DestroyIcon_(largeIcons(i)) : EndIf
                        If smallIcons(i) : AddGadgetItem(2,-1,"Icon "+Str(i),smallIcons(i)) : DestroyIcon_(smallIcons(i)) : EndIf
                    Next
     EndIf:EndIf:EndIf:EndIf
Until event = #PB_Event_CloseWindow
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Antworten