Seite 1 von 1
Iconauswahl-Dialog [WinAPI]
Verfasst: 04.03.2011 16:55
von RSBasic
Mit diesem Code kann das Iconauswahl-Fenster geöffnet werden, so dass der Anwender ein bestimmtes Icon aus einer DLL-Datei selber auswählen kann:
Code: Alles auswählen
;Hinweis: Die Compiler-Einstellung "Unicode-Executable erstellen" muss aktiviert sein!
EnableExplicit
Define IcoLibPath$ = "C:\Windows\System32\shell32.dll"
Define DlgResult
Define hWnd=0
Define DefaultIconID = 5
DlgResult = PickIconDlg_(hWnd,@IcoLibPath$,Len(IcoLibPath$),@DefaultIconID)
If DlgResult=0
MessageRequester("","Kein Icon ausgewählt.",0)
Else
MessageRequester("","Icon wurde ausgewählt und kann nun z.B. mit ExtractIcon_() extrahiert werden. Icon-Nummer: "+Str(DefaultIconID),0)
EndIf
;PickIconDlg: http://msdn.microsoft.com/en-us/library/bb776481%28v=vs.85%29.aspx
Re: Iconauswahl-Dialog [WinAPI]
Verfasst: 05.03.2011 11:13
von Mr.L
Wenn man den Psudotype "p-unicode" verwendet, braucht man die Compiler-Einstellung nicht zu verändern:
Code: Alles auswählen
EnableExplicit
Define IcoLibPath$ = "C:\Windows\System32\shell32.dll"
Define DlgResult
Define hWnd=0
Define DefaultIconID = 5
If OpenLibrary(0,"Shell32.dll")
Prototype.l PickIconDlg(hwnd,pszIconPath.p-unicode,cchIconPath,piIconIndex)
Define PickIconDlg.PickIconDlg = GetFunction(0,"PickIconDlg")
DlgResult = PickIconDlg(hWnd,IcoLibPath$,Len(IcoLibPath$),@DefaultIconID)
If DlgResult = 0
MessageRequester("","Kein Icon ausgewählt.",0)
Else
MessageRequester("","Icon wurde ausgewählt und kann nun z.B. mit ExtractIcon_() extrahiert werden. Icon-Nummer: "+Str(DefaultIconID),0)
EndIf
;PickIconDlg: http://msdn.microsoft.com/en-us/library/bb776481%28v=vs.85%29.aspx
EndIf
Re: Iconauswahl-Dialog [WinAPI]
Verfasst: 05.03.2011 13:26
von RSBasic
@Mr.L
Vielen Dank für das Anpassen

Re: Iconauswahl-Dialog [WinAPI]
Verfasst: 05.03.2011 16:16
von hjbremer
Das mit Prototype macht aber nur dann Sinn wenn man den Namen der Datei weiß.
Wenn nicht, dann Nullstring übergeben und Path ausgeben lassen. Vor allem, wenn man dann doch eine andere Datei im Dialog auswählt.
Wer sicher gehen will kann auch #MAX_PATH * 2 nehmen, bin mir nicht sicher ob das sein muß. Bei mir zumindest nicht.
Code: Alles auswählen
EnableExplicit
Define IcoLibPath.s{#MAX_PATH} = ""
Define IconID
If PickIconDlg_(0, @IcoLibPath, #MAX_PATH, @IconID)
Debug PeekS(@IcoLibPath,-1,#PB_Unicode)
MessageRequester("","Icon wurde ausgewählt und kann nun z.B. mit ExtractIcon_() extrahiert werden. Icon-Nummer: "+Str(IconID),0)
EndIf
Re: Iconauswahl-Dialog [WinAPI]
Verfasst: 26.10.2013 05:46
von chi
Ascii/Unicode Executables, Mit oder Ohne Pfad...
Code: Alles auswählen
EnableExplicit
#MaxPath = 1024
Procedure.s ExpandEnvironmentStrings(string$)
Protected size = ExpandEnvironmentStrings_(string$, "", 0)
Protected ret$ = Space(size)
ExpandEnvironmentStrings_(string$, ret$, #MaxPath)
ProcedureReturn ret$
EndProcedure
Define IconPath.s{#MaxPath}
Define IconId = 0
PokeS(@IconPath, ExpandEnvironmentStrings("%windir%\explorer.exe"), -1, #PB_Unicode)
;PokeS(@IconPath, "C:\Windows\System32\shell32.dll", -1, #PB_Unicode)
;PokeS(@IconPath, "", -1, #PB_Unicode)
If PickIconDlg_(0, @IconPath, #MaxPath, @IconID)
Debug "Icon: " + Str(IconId)
Debug "Path: " + ExpandEnvironmentStrings(PeekS(@IconPath, -1, #PB_Unicode))
EndIf