Jetzt habe ich verstanden.. Warum schwer machen wenn es auch einfach geht.
Delphi-Quellcode:
procedure TAudioVolume.LoadIconPathfromResource(IconPath: PWideChar);
var
Module: HModule;
Filename: string;
StrID: string;
ID: DWORD;
lpDest: PWideChar;
begin
lpDest := nil;
// Remove First @ Letter
Filename := MidStr(IconPath, 2, Length(IconPath));
// Extract ID
StrID := MidStr(Filename, Length(Filename) - 2, 4);
ID := StrToInt(StrID);
// Remove ID from Path
Filename := LeftStr(Filename, Length(Filename) - 5);
ExpandEnvironmentStrings(PWideChar(Filename), lpDest, Length(Filename));
if Assigned(lpDest) then
begin
// Load the Lib
Module := LoadLibraryExW(lpDest, 0, LOAD_LIBRARY_AS_DATAFILE);
// check for error
if Module <> INVALID_HANDLE_VALUE then
begin
Icon := TIcon.Create;
Icon.Handle := LoadIcon(Module, MakeIntResource(ID));
if Module <> 0 then
FreeLibrary(Module);
end;
end;
end;
Kann hier den Filename "StrID" noch splitten damit falls die ID mal <> 3 sein sollte es immer noch funktioniert.
gruss