Icons aus DLL holen
Verfasst: 05.08.2017 18:53
Gibt es, aber wenn man es braucht nicht zu finden oder macht nicht das was man braucht
Hier ein weiterer Beitrag von mir zu dem Thema,
außerdem wollte ich mal den Form-Designer ausprobieren. nun ja, brauchbar aaaaber ...
Da über das Thema Lizenz in einem anderen Thread gesprochen wird. Jeder darf obigen Code oder Teile daraus benutzen und weiter verbreiten.
PS: wird weiter verbreiten zusammen geschrieben oder auseinander ?
Hier ein weiterer Beitrag von mir zu dem Thema,
außerdem wollte ich mal den Form-Designer ausprobieren. nun ja, brauchbar aaaaber ...
Code: Alles auswählen
; 05.08.2017 HJBremer - PB 5.60 x64 Windows 10
EnableExplicit
Enumeration FormGadget
#Window_0
#ListIcon_Main
#Combo_DLL
#Button_Copy
#ListIcon_Wahl
#Button_Kill
#Editor_Befehle
#Option_16
#Option_32
#Image_Show
EndEnumeration
LoadFont(0, "Consolas", 11)
SetGadgetFont(#PB_Default, FontID(0))
Procedure FillListe(file$)
Protected j, icon, anz = ExtractIconEx_(file$, -1, #Null, #Null, #Null) - 1
Protected iconinfo.ICONINFO, bitmap.BITMAP
ClearGadgetItems(#ListIcon_Main)
HideGadget(#ListIcon_Main, 1)
For j = 0 To anz
If GetGadgetState(#Option_16)
ExtractIconEx_(file$, j, #Null, @icon, 1) ;16x16
Else
ExtractIconEx_(file$, j, @icon, #Null, 1) ;32x32
EndIf
GetIconInfo_(icon, iconinfo)
GetObject_(iconinfo\hbmMask, SizeOf(BITMAP), bitmap)
AddGadgetItem(#ListIcon_Main, j, "Nr " + Str(j) + " " + Str(bitmap\bmWidth) + "x" + Str(bitmap\bmHeight), icon)
DestroyIcon_(icon)
Next
HideGadget(#ListIcon_Main, 0)
EndProcedure
Procedure OpenWindow_0(x = 0, y = 0, width = 1360, height = 750)
OpenWindow(#Window_0, x, y, width, height, "Icon", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_ScreenCentered | #PB_Window_WindowCentered)
ListIconGadget(#ListIcon_Main, 10, 10, 950, 730, "Column 1", 100)
ComboBoxGadget(#Combo_DLL, 980, 510, 190, 25, #PB_ComboBox_Editable)
ButtonGadget(#Button_Copy, 980, 550, 190, 25, "Copy to Clipboard")
ListIconGadget(#ListIcon_Wahl, 970, 10, 380, 480, "Column 1", 150, #PB_ListIcon_MultiSelect | #PB_ListIcon_AlwaysShowSelection)
SetGadgetFont(#ListIcon_Wahl, #PB_Default)
ButtonGadget(#Button_Kill, 1180, 550, 170, 25, "Auswahl Löschen")
EditorGadget(#Editor_Befehle, 980, 590, 370, 150)
ImageGadget(#Image_Show, 1180, 510, 0, 0, 0, #PB_Image_Raised)
OptionGadget(#Option_16, 1225, 510, 60, 20, "16x16")
OptionGadget(#Option_32, 1290, 510, 60, 20, "32x32")
SetGadgetState(#Option_32, 1)
SetGadgetAttribute(#ListIcon_Main, #PB_ListIcon_DisplayMode, #PB_ListIcon_LargeIcon)
SetGadgetAttribute(#ListIcon_Wahl, #PB_ListIcon_DisplayMode, #PB_ListIcon_LargeIcon)
EndProcedure
Procedure Window_0_Events(event)
Protected file$, icon, item, info$
Select event
Case #PB_Event_Gadget
Select EventGadget()
Case #ListIcon_Main
If EventType() = #PB_EventType_LeftClick
file$ = GetGadgetText(#Combo_DLL)
item = GetGadgetState(#ListIcon_Main)
If item > -1
If GetGadgetState(#Option_16)
ExtractIconEx_(file$, item, #Null, @icon, 1): info$ = "16"
Else
ExtractIconEx_(file$, item, @icon, #Null, 1): info$ = "32"
;oder icon = ExtractIcon_(0, file$, item) nur 32
EndIf
SetGadgetState(#Image_Show, icon)
AddGadgetItem(#ListIcon_Wahl, -1, file$ + "-" + Str(item) + "-" + info$, icon)
DestroyIcon_(icon)
EndIf
EndIf
Case #Combo_DLL
If EventType() = #PB_EventType_Change
FillLIste(GetGadgetText(#Combo_DLL))
EndIf
Case #Button_Copy
Protected anz = CountGadgetItems(#ListIcon_Wahl) - 1
Protected befehl$, befehl0$ = "", befehl1$ = "", befehl2$ = "", nr = 0
Protected j, x$, item$, form$, name$
For j = 0 To anz
x$ = GetGadgetItemText(#ListIcon_Wahl, j)
file$ = #DOUBLEQUOTE$ + StringField(x$, 1, "-") + #DOUBLEQUOTE$ ;DLL Name
item$ = RSet(StringField(x$, 2, "-"), 3) ;nr in der DLL
form$ = StringField(x$, 3, "-") ;16 oder 32
nr + 1: name$ = "icon" + RSet(Str(nr), 3, "0")
If form$ = "32"
befehl0$ + "Define " + name$ + " = ExtractIcon_(0, " + file$ + ", " + item$ + ") ;32x32" + #CRLF$
Else
befehl0$ + "Define " + name$ + #CRLF$
befehl1$ + "ExtractIconEx_(" + file$ + ", " + item$ + ", #Null, @" + name$ + ", 1) ;16x16" + #CRLF$
EndIf
befehl2$ + "DestroyIcon_(" + name$ + ")" + #CRLF$
Next
befehl$ = befehl0$ + #CRLF$ + befehl1$ + #CRLF$ + befehl2$
SetClipboardText(befehl$)
SetGadgetText(#Editor_Befehle, befehl$)
Case #Button_Kill
item = GetGadgetState(#ListIcon_Wahl)
If item > -1
RemoveGadgetItem(#ListIcon_Wahl, item)
SetGadgetState(#ListIcon_Wahl, item)
EndIf
Case #Option_16
SetGadgetAttribute(#ListIcon_Main, #PB_ListIcon_DisplayMode, #PB_ListIcon_SmallIcon)
FillLIste(GetGadgetText(#Combo_DLL))
SetGadgetState(#Image_Show, 0)
Case #Option_32
SetGadgetAttribute(#ListIcon_Main, #PB_ListIcon_DisplayMode, #PB_ListIcon_LargeIcon)
FillLIste(GetGadgetText(#Combo_DLL))
SetGadgetState(#Image_Show, 0)
EndSelect
EndSelect
EndProcedure
OpenWindow_0()
AddGadgetItem(#Combo_DLL, -1, "shell32.dll")
AddGadgetItem(#Combo_DLL, -1, "moricons.dll")
AddGadgetItem(#Combo_DLL, -1, "DDORes.dll")
AddGadgetItem(#Combo_DLL, -1, "ieframe.dll")
AddGadgetItem(#Combo_DLL, -1, "imageres.dll")
AddGadgetItem(#Combo_DLL, -1, "wmploc.dll")
AddGadgetItem(#Combo_DLL, -1, "compstui.dll")
AddGadgetItem(#Combo_DLL, -1, "mmcndmgr.dll")
AddGadgetItem(#Combo_DLL, -1, "pifmgr.dll")
SetGadgetState(#Combo_DLL, 0)
FillLIste(GetGadgetText(#Combo_DLL))
Repeat
Define Event = WaitWindowEvent()
Select EventWindow()
Case #Window_0
Window_0_Events(Event)
EndSelect
Until Event = #PB_Event_CloseWindow
PS: wird weiter verbreiten zusammen geschrieben oder auseinander ?