Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Procedure Werte (https://www.delphipraxis.net/188013-procedure-werte.html)

codenoob 23. Jan 2016 21:22

Procedure Werte
 
Hi Delphianer

Ich habe verschiedene Bilder in einer Resourcedatei die ich auslesen kann.

Delphi-Quellcode:
procedure Bildauslesen;
var
  Hd: THandle;
  Ico: TIcon;
begin

  Hd:= LoadImage(HInstance, 'RES_ICON1', IMAGE_ICON, 0, 0, LR_DEFAULTCOLOR);

  Ico:= TIcon.Create;

  Ico.ReleaseHandle;
  Ico.Handle := Hd;

  Form1.image1.Picture.Icon.Assign(ico);
  Ico_1.Free;

end;
Nun wollte ich die Prozedur so umbauen das ich sie aufrufen kann und bestimmen kann welches Icon in welche Timage geladen werden soll.
Delphi-Quellcode:

procedure Bildauslesen(ICON: String; IMG: Timage);
var
  Hd: THandle;
  Ico: TIcon;
begin

  Hd:= LoadImage(HInstance, ICON, IMAGE_ICON, 0, 0, LR_DEFAULTCOLOR);

  Ico:= TIcon.Create;

  Ico.ReleaseHandle;
  Ico.Handle := Hd;

  IMG.image1.Picture.Icon.Assign(ico);
 
  Ico_1.Free;

end;
und mit dem Befehlt
Delphi-Quellcode:
 Bildauslesen(icon1 , Image1);
will ich das dann ausführen

Aber dies funktioniert nicht was mache ich da falsch?

Grüsse Tom

Luckie 23. Jan 2016 21:44

AW: Procedure Werte
 
Fehlermeldung? Und ist da nicht ein TImage zu viel:
Delphi-Quellcode:
IMG.image1.Picture.Icon.Assign(ico);
Du übergibst doch schon das TImage.

hoika 24. Jan 2016 00:59

AW: Procedure Werte
 
Hallo,
wenn der 1. Parameter ein String ist ...

Bildauslesen('icon1',


Heiko

Blup 25. Jan 2016 08:34

AW: Procedure Werte
 
ReleaseHandle hat dort nichts zu suchen:
Zitat:

ReleaseHandle informiert die TIcon-Instanz, dass sie für die Freigabe des Symbol-Handles nicht mehr zuständig ist.
Ico ist dafür verantwortlich das alte Handle freizugeben, wenn ein neues Handle zugewiesen wird.

Wenn man "Ico" erzeugt, muss man "Ico" auch freigeben und nicht irgendwas anderes z.B. "Ico_1".
Delphi-Quellcode:
procedure Bildauslesen(const ICON: string; IMG: TImage);
var
  Hd: THandle;
  Ico: TIcon;
begin
  Hd := LoadImage(HInstance, ICON, IMAGE_ICON, 0, 0, LR_DEFAULTCOLOR);

  Ico := TIcon.Create;
  try
    Ico.Handle := Hd;
    IMG.Picture.Assign(Ico);
  finally
    Ico.Free;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:58 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