Seite 1 von 1
Kleine Systemicons
Verfasst: 26.01.2012 18:34
von Delle
Hallo,
weiß jemand noch wie man die "kleinen" Systenicons extrahieren (und für Buttons) kann?
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 = -
Re: Kleine Systemicons
Verfasst: 26.01.2012 18:39
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
Re: Kleine Systemicons
Verfasst: 26.01.2012 19:13
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
Re: Kleine Systemicons
Verfasst: 26.01.2012 20:07
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 ?
Re: Kleine Systemicons
Verfasst: 26.01.2012 20:19
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.
Re: Kleine Systemicons
Verfasst: 26.01.2012 20:27
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