Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Icon aus DLL laden (https://www.delphipraxis.net/7898-icon-aus-dll-laden.html)

Pseudemys Nelsoni 23. Aug 2003 22:31


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:
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;
wieos geht das nun nicht? bei einem klick auf den button passiert gar nichts

Pseudemys Nelsoni 23. Aug 2003 22:58

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?

Christian Seehase 23. Aug 2003 23:35

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]

Pseudemys Nelsoni 23. Aug 2003 23:42

Re: Icon aus DLL laden
 
hallo christian,

ich denke mal du meintest das so, oder?:

Delphi-Quellcode:
    r := TResourceStream.Create(h, 'connect', 'RT_ICON');
kommt aber selber fehler :\

Christian Seehase 24. Aug 2003 00:06

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.

Aya 24. Aug 2003 00:40

Re: Icon aus DLL laden
 
Hi,

versuch es mal so:
Delphi-Quellcode:
r := TResourceStream.Create(h, 'connect', RT_ICON);
//oder
r := TResourceStream.Create(h, 'connect', RT_GROUP_ICON);
Au'revoir,
Aya~

Pseudemys Nelsoni 24. Aug 2003 00:41

Re: Icon aus DLL laden
 
hallo christian, doch die resourcen sind da, siehe hier:

http://www.angelfire.com/bug/delphi/reshack.JPG

Pseudemys Nelsoni 24. Aug 2003 00:50

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"

Aya 24. Aug 2003 00:53

Re: Icon aus DLL laden
 
Hi,

dann versuch es mal mit LoadImage.

Delphi-Quellcode:
Ico.Handle:=LoadImage(h,MAKEINTRESOURCE(ResID),IMAGE_ICON,0,0,LR_DEFAULTCOLOR);
Au'revoir,
Aya~

Christian Seehase 24. Aug 2003 00:56

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;

Pseudemys Nelsoni 24. Aug 2003 00:59

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:)

Pseudemys Nelsoni 24. Aug 2003 01:01

Re: Icon aus DLL laden
 
juhu das geht :D

vielen dank :)

Pseudemys Nelsoni 24. Aug 2003 01:04

Re: Icon aus DLL laden
 
noch eine frage, was ist HINST? sonst weiss ich soweit den code (instanz?)

HomerGER 7. Nov 2003 00:56

Re: Icon aus DLL laden
 
ich hab das gleich problem
mein code
Code:
//******************************************************************************
//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;
mit einem anderen progamm hab ich mal in die ddl geschaut, ist alles drin
er zeigt mir immer wieder die resurce nicht gefunden an
der code ist doch richtig ? warum geht es nicht

HomerGER 7. Nov 2003 10:30

Re: Icon aus DLL laden
 
hilfe

Sharky 7. Nov 2003 10:34

Re: Icon aus DLL laden
 
Zitat:

Zitat von HomerGER
hilfe

Wird kommen wenn es jamand weiss. Das Pushen bringt also nichts.

Christian Seehase 7. Nov 2003 20:39

Re: Icon aus DLL laden
 
Moin Homer,

was übergibst Du denn in icon_nr_s, und ist sichergestellt, dass der Resourcentyp RT_ICON ist?

HomerGER 7. Nov 2003 23:48

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

Christian Seehase 8. Nov 2003 01:18

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).

HomerGER 8. Nov 2003 03:46

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:
//******************************************************************************
//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;
und so rufe ich sie dann auf
Haupt_Form.Image1.Picture.Icon.Assign(Icon_Lesen_G U('Config_Icon1'));

bekomme ich immer eine Zugriffsverletzung

Christian Seehase 8. Nov 2003 12:19

Re: Icon aus DLL laden
 
Moin Homer,

hast Du auch schon mal die Kurzform probiert?

Delphi-Quellcode:
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;
Für Bitmaps gibt's auch LoadBitmap.

HomerGER 9. Nov 2003 14:15

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

Christian Seehase 9. Nov 2003 14:26

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.

HomerGER 9. Nov 2003 17:11

Re: Icon aus DLL laden
 
geschmackssache ???
nur so geht es. also bei icons.

Christian Seehase 9. Nov 2003 20:19

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:
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;
Die Funktion lässt sich dann nur nicht so schön einbinden, aber ich habe eine bessere Übersicht über die belegten Resourcen.

HomerGER 9. Nov 2003 21:24

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;

tcoman 8. Aug 2015 18:52

AW: Re: Icon aus DLL laden
 
Zitat:

Zitat von HomerGER (Beitrag 84002)
ich hab das gleich problem
mein code
Code:
//******************************************************************************
//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;
mit einem anderen progamm hab ich mal in die ddl geschaut, ist alles drin
er zeigt mir immer wieder die resurce nicht gefunden an
der code ist doch richtig ? warum geht es nicht

Grüß Dich HomerGER,
in der DLL müssen die Namen der Icons in
GROSSBUCHSTABEN stehen! Vllt erklärt das deine
Fehlermeldung "nicht gefunden".

Gruß,
tcoman

DeddyH 8. Aug 2015 19:53

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