AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ICL in TImageList laden

Offene Frage von "jonny"
Ein Thema von jonny · begonnen am 15. Jan 2004 · letzter Beitrag vom 16. Jan 2004
Antwort Antwort
jonny

Registriert seit: 15. Dez 2003
235 Beiträge
 
Delphi 7 Enterprise
 
#1

ICL in TImageList laden

  Alt 15. Jan 2004, 23:21
Hallo hat jemand eine Idee wie ich eine ICL-Datei (Icon Library) in TImageList zur laufzeit laden kann?
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#2

Re: ICL in TImageList laden

  Alt 15. Jan 2004, 23:54
Soweit ich weis ist eine ICL nichts anderes als eine umbenannte DLL, das heisst du musst sie auch so behandeln:

Delphi-Quellcode:
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;
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.
  Mit Zitat antworten Zitat
jonny

Registriert seit: 15. Dez 2003
235 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: ICL in TImageList laden

  Alt 16. Jan 2004, 10:07
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.
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#4

Re: ICL in TImageList laden

  Alt 16. Jan 2004, 11:27
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;
  Mit Zitat antworten Zitat
jonny

Registriert seit: 15. Dez 2003
235 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: ICL in TImageList laden

  Alt 16. Jan 2004, 11:45
Danke jetzt funktioniert das!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz