Ich habe jetzt die funktion geändert.
Höheren MAXSIZE addiert und den String nochmals gesplittet um die richtige länge der ID zu extrahieren.
Delphi-Quellcode:
procedure TAudioVolume.LoadIconPathfromResource(IconPath: PWideChar);
var
Module: HModule;
Filename: WideString;
lpDest: array[0..32768] of WideChar;
SplitID: TSplitStrArray;
rSplitID: string;
ID: DWORD;
begin
// Remove First @ Letter
Filename := MidStr(IconPath, 2, Length(IconPath));
// Extract ID
SplitID := Split(Filename, ',');
rSplitID := SplitID[High(SplitID)];
rSplitID := MidStr(rSplitID, 2, Length(rSplitID));
ID := StrToInt(rSplitID);
// Remove ID from Path
Filename := LeftStr(Filename, Length(Filename) - 5);
FillChar(lpDest, SizeOf(lpDest), 0);
if ExpandEnvironmentStrings(PWideChar(Filename), lpDest, 32768) <> 0 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;
Update kommt später muss noch einiges andere tun.. zum Beispiel den Namen kürzen wenn zu lang für die GroupBox.
Tool Tipps addieren um den Kompletten Namen anzuzeigen wenn gekürzt
Lautsprecher Icon addieren usw..
gruss