![]() |
Icon aus DLL laden
hallo, sorry ist dann auch mein letzter thread für heute (bis 0 uhr :D).
alsoich habe eine dll erstellt in dem alle icons sind(z.G sind sie auch transparent)...aber ich bekomme diese nicht geladen. Ich habe es dem code aus der code library abgeschaut, bloss das ich statt JPG icon genomme habe. Also das ganze sah dann so aus:
Delphi-Quellcode:
wieos geht das nun nicht? bei einem klick auf den button passiert gar nichts
procedure TForm1.Button1Click(Sender: TObject);
var h :HINST; r :TResourceStream; ic :TIcon; i :integer; begin h := LoadLibrary('icons.dll'); if h <> 0 then begin r := TResourceStream.Create(h, 'connect', 'ICON'); ic := TIcon.Create; try ic.LoadFromStream(r); Image1.Picture.Icon.Assign(ic); finally ic.Free; r.Free; end; end; FreeLibrary(h); end; |
Re: Icon aus DLL laden
ach es ging doch, die dll war nur im falschen ordner....ich bekomme nur die fehlermeldung "Resource connect wurde nicht gefunden"... sie is aber drin und ich hab es so in die res eingetragen:
connect ICON "connect.ico" ist das falsch? |
Re: Icon aus DLL laden
Moin silent,
versuch's mal RT_ICON statt mit ICON. [EDIT] Ich meine für die Typangabe in TResourceStream.Create. Nicht in der Resourcendatei [/EDIT] |
Re: Icon aus DLL laden
hallo christian,
ich denke mal du meintest das so, oder?:
Delphi-Quellcode:
kommt aber selber fehler :\
r := TResourceStream.Create(h, 'connect', 'RT_ICON');
|
Re: Icon aus DLL laden
Moin Silent,
seltsam, so ist es zumindest dokumentiert, und ansonsten sieht alles richtig aus. Hast Du ein Programm, mit dem Du Dir Resourcen ansehen kannst? Damit würde ich jetzt mal die DLL anschauen, ob die Resource von einem anderem Programm gefunden wird. Du könntest auch mit Hilfe einer der Demos die bei Delphi eigentlich mitgeliefert werden, nämlich dem ResourceExplorer, nachschauen, wenn Du sonst nichts dafür hast. |
Re: Icon aus DLL laden
Hi,
versuch es mal so:
Delphi-Quellcode:
Au'revoir,
r := TResourceStream.Create(h, 'connect', RT_ICON);
//oder r := TResourceStream.Create(h, 'connect', RT_GROUP_ICON); Aya~ |
Re: Icon aus DLL laden
hallo christian, doch die resourcen sind da, siehe hier:
![]() |
Re: Icon aus DLL laden
hallo aya,
bei dem erstem kommt das gleiche, also das "connect" nicht gefunden wird...bei letzterem kommt "systemresourcen erschöpft" |
Re: Icon aus DLL laden
Hi,
dann versuch es mal mit LoadImage.
Delphi-Quellcode:
Au'revoir,
Ico.Handle:=LoadImage(h,MAKEINTRESOURCE(ResID),IMAGE_ICON,0,0,LR_DEFAULTCOLOR);
Aya~ |
Re: Icon aus DLL laden
Moin silent,
dann mal ohne ResourceStream:
Delphi-Quellcode:
var
h :HINST; ic :TIcon; i :integer; begin h := LoadLibrary('icons.dll'); if h <> 0 then begin ic := TIcon.Create; try ic.Handle := LoadIcon(h,'connect'); Image1.Picture.Icon.Assign(ic); finally ic.Free; end; end; FreeLibrary(h); end; |
Re: Icon aus DLL laden
der text ist schon wieder zu schwierig für mich (ich versteh immer gern was ich tue, daher kopier icht nicht gern), ich lass es erstmal lieber, danke dir aber ;)
gibt es vielleicht eine art TIconList? edit: das war an aya gerichtet, ich guck mir deins gerade mal an christian:) |
Re: Icon aus DLL laden
juhu das geht :D
vielen dank :) |
Re: Icon aus DLL laden
noch eine frage, was ist HINST? sonst weiss ich soweit den code (instanz?)
|
Re: Icon aus DLL laden
ich hab das gleich problem
mein code
Code:
mit einem anderen progamm hab ich mal in die ddl geschaut, ist alles drin
//******************************************************************************
//Global //Icon aus Image.dll Function Icon_Lesen_GU(icon_nr_s : String) : TIcon; var lib_h : THandle; res_s : TResourceStream; icon_ic : TIcon; begin lib_h := LoadLibrary('Image.dll'); if (lib_h <> 0) then begin res_s := TResourceStream.Create(lib_h, icon_nr_s, RT_ICON); icon_ic := TIcon.Create; try icon_ic.LoadFromStream(res_s); Result := icon_ic; finally res_s.Free; icon_ic.Free; end; FreeLibrary(lib_h); end; end; er zeigt mir immer wieder die resurce nicht gefunden an der code ist doch richtig ? warum geht es nicht |
Re: Icon aus DLL laden
hilfe
|
Re: Icon aus DLL laden
Zitat:
|
Re: Icon aus DLL laden
Moin Homer,
was übergibst Du denn in icon_nr_s, und ist sichergestellt, dass der Resourcentyp RT_ICON ist? |
Re: Icon aus DLL laden
Hi chritian
in der resource steht Config_Icon1 ICON F:\Homers_XP_Tool_V3\3_Ressourcen\Progress_Icon\Co nfig_Icon1.ico Config_Icon2 ICON F:\Homers_XP_Tool_V3\3_Ressourcen\Progress_Icon\Co nfig_Icon2.ico aus der mach ich dann eine dll und der function übergeb ich "config_Icon1" mit einem icongrabber kann ich sehen das die icon da sind @Sharky - sorry |
Re: Icon aus DLL laden
Moin Homer,
versteh' ich jetzt nicht so ganz, aber probier doch mal die Version mit dem LoadIcon (siehe weiter oben im Thread). |
Re: Icon aus DLL laden
moin christian
ich will nicht nur icon in die dll tun sondern auch bmp's mit der function bekomme ich immer die meldung recource nicht gefunden und mit der function die meinst
Delphi-Quellcode:
und so rufe ich sie dann auf
//******************************************************************************
//Global //Icon aus Image.dll Function Icon_Lesen_GU(icon_nr_s : String) : TIcon; var h :HINST; ic :TIcon; i :integer; begin h := LoadLibrary('Image.dll'); if h <> 0 then begin ic := TIcon.Create; try ic.Handle := LoadIcon(h, PChar(icon_nr_s)); Result := ic; finally ic.Free; end; end; FreeLibrary(h); end; Haupt_Form.Image1.Picture.Icon.Assign(Icon_Lesen_G U('Config_Icon1')); bekomme ich immer eine Zugriffsverletzung |
Re: Icon aus DLL laden
Moin Homer,
hast Du auch schon mal die Kurzform probiert?
Delphi-Quellcode:
Für Bitmaps gibt's auch LoadBitmap.
Function Icon_Lesen_GU(icon_nr_s : String) : TIcon;
var h :HINST; begin Result := nil; h := LoadLibrary('image.dll'); try if h <> 0 then begin Result := TIcon.Create; Result.Handle := LoadIcon(h, PChar(icon_nr_s)); end; finally FreeLibrary(h); end; end; |
Re: Icon aus DLL laden
hier liegt die würze in der kürze
danke aber nur den handle übergeben .. hmm und nicht das icon ? verstehen tu ich es aber nicht |
Re: Icon aus DLL laden
Moin Homer,
da das Result als TIcon deklariert ist, wird ja nicht nur das Handle übergeben. Bei derartigen Funktionsergebnistypen würde ich das eh' eher so machen, dass das Ergebnis als Parameter zurückgeliefert wird, und nicht im Result. Ist aber wohl auch Geschmackssache. |
Re: Icon aus DLL laden
geschmackssache ???
nur so geht es. also bei icons. |
Re: Icon aus DLL laden
Moin Homer,
wenn ich das so mache, kann ich das Icon, was ich zurückerhalten will auch als Parameter übergeben:
Delphi-Quellcode:
Die Funktion lässt sich dann nur nicht so schön einbinden, aber ich habe eine bessere Übersicht über die belegten Resourcen.
function (const AsIconname : string;const AicResult : TIcon) : boolean; // true = Success
var h :HINST; begin Result := false; h := LoadLibrary('image.dll'); try if h <> 0 then begin AicResult.Handle := LoadIcon(h, PChar(AsIconname)); Result := true; end; finally FreeLibrary(h); end; end; |
Re: Icon aus DLL laden
ne las mal deine kurzform funktioniert wunderbar
genau so wie es haben wollt ich glaube es gib mit TICON ein generelles Problem auch aus einer resource oder dll zu laden hier meine function um es aus dll usw zu extrahieren
Code:
//******************************************************************************
// HauptFunction //Icon aus exe dll usw ins Image ausgeben Procedure Icon_Extract_GU(input_s : String; kompo_s : String); var bild_path_s : String; icon : TIcon; path_s : String; pos_i : Integer; index_i : Integer; begin try //Platzhalter ersetzen //für %Root% und so bild_path_s := Platzhalter_Ersetzen_GU(input_s); //Alles rücksetzen icon := TIcon.Create; path_s := ''; //Kein Komma verhanden if pos(',', bild_path_s) = 0 then begin bild_path_s := bild_path_s + ',0'; pos_i := pos(',', bild_path_s); end //Komma vorhanden else begin pos_i := pos(',', bild_path_s); end; //Path filtern path_s := copy(bild_path_s, 1, pos_i - 1); //Index filtern index_i := StrToInt(copy(bild_path_s, pos_i + 1, Length(bild_path_s))); icon.Handle := ExtractIcon(hInstance,PChar(path_s),index_i); (Haupt_Form.FindComponent(kompo_s) as TImage).Picture.Icon := icon; finally icon.Free; end; end; |
AW: Re: Icon aus DLL laden
Zitat:
in der DLL müssen die Namen der Icons in GROSSBUCHSTABEN stehen! Vllt erklärt das deine Fehlermeldung "nicht gefunden". Gruß, tcoman |
AW: Icon aus DLL laden
Der letzte Post ist fast 12 Jahre her :shock:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:39 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