![]() |
ICL in TImageList laden
Hallo hat jemand eine Idee wie ich eine ICL-Datei (Icon Library) in TImageList zur laufzeit laden kann?
|
Re: ICL in TImageList laden
Soweit ich weis ist eine ICL nichts anderes als eine umbenannte DLL, das heisst du musst sie auch so behandeln:
Delphi-Quellcode:
Die Icons müssen also einzeln zur IL hinzugefügt werden, wie du eine Liste der enthaltenen Icons und deren Namen bekommst, weis ich allerdings im Moment nicht.
var
AIco : TIcon; hDLL : THandle; begin hDLL := LoadLibraryEx('Eine.icl', 0, LOAD_LIBRARY_AS_DATAFILE); AIco := TIcon.Create; try AIco.Handle := LoadImage(hDLL, '1', IMAGE_ICON, ImageList1.Width, ImageList1.Height, LR_DEFAULTCOLOR); ImageList1.AddIcon(AIco); finally AIco.Free; end; FreeLibrary(hDLL); end; |
Re: ICL in TImageList laden
Also ich hab das mal so gemacht und da tut sich garnichts. Ich habe sogar einfach so zum test mal der Form1.Icon ein Icon zugewiesen und da hat sich auch nichts verändert. Der name den ich benutzt habe für das Icon in der ICL war richt habe davor nachgeguckt wie die heissen.
|
Re: ICL in TImageList laden
Habs mal erweitert, jetzt fügt er alle Icons ein:
Delphi-Quellcode:
function ResourcenameCallBack(Module:HModule;resTyp:Pchar;resname:Pchar;list: TStrings):Integer;stdcall;
begin if HiWord(Cardinal(resname)) <> 0 then list.Add(' ' + resname) else list.Add(Format(' #%d', [loword(Cardinal(resname))])); Result := 1; end; function CheckResName(const AName : String) : PChar; begin If (Pos(' #', AName) = 1) then result := MakeIntResource(StrToInt(Copy(Aname, 3, length(AName)))) else result := PChar(AName); end; procedure TForm1.Button1Click(Sender: TObject); var AIco : TIcon; hDLL : THandle; IcoList : TStringList; i : integer; begin Button1.Enabled := false; hDLL := LoadLibraryEx(PChar(Edit1.Text), 0, LOAD_LIBRARY_AS_DATAFILE); IcoList := TStringList.Create; try //ImageList1.Clear; EnumResourceNames(hDLL, RT_GROUP_ICON, @ResourcenameCallBack, Integer(IcoList)); for i := 0 to IcoList.Count-1 do begin AIco := TIcon.Create; try AIco.Handle := LoadImage(hDLL, CheckResName(IcoList[i]), IMAGE_ICON, ImageList1.Width, ImageList1.Height, LR_DEFAULTCOLOR); ImageList1.AddIcon(AIco); finally AIco.Free; end; end; finally IcoList.Free; FreeLibrary(hDLL); end; Button1.Enabled := true; end; |
Re: ICL in TImageList laden
Danke jetzt funktioniert das!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz