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 ?