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?

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 = -

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