Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem mit Icon aus Ressource (https://www.delphipraxis.net/60442-problem-mit-icon-aus-ressource.html)

ManuMF 6. Jan 2006 23:20


Problem mit Icon aus Ressource
 
Hallo,

ich möchte ein zusätzliches Icon in mein Programm einbinden, um es für eine Verknüpfung und - hier liegt das Problem - für ein Formular zu nutzen. Ich habe 3 Möglichkeiten probiert.

:arrow: RC-Datei, Delphi-Code, Fehler

Möglichkeit 1
Delphi-Quellcode:
9 ICON "Zahnrad.ico"
Delphi-Quellcode:
var ResIco : TResourceStream;

begin
  ResIco := TResourceStream.CreateFromID(hInstance, 9, 'ICON');
  try
    Icon.LoadFromStream(ResIco);
  finally
    FreeAndNil(ResIco);
  end;
:!: Zuriffsverletzung

Möglichkeit 2 (RT_ICON = vordefiniert)
Delphi-Quellcode:
9 RT_ICON "Zahnrad.ico"
Delphi-Quellcode:
var ResIco : TResourceStream;

begin
  ResIco := TResourceStream.CreateFromID(hInstance, 9, 'RT_ICON');
  try
    Icon.LoadFromStream(ResIco);
  finally
    FreeAndNil(ResIco);
  end;
:!: kein Fehler, Icon wird im Formular angezeigt, ist aber für die Verknüpfung nicht zu sehen, als wäre es nicht da.

Möglichkeit 3
Delphi-Quellcode:
ZrI ICON "Zahnrad.ico"
Delphi-Quellcode:
var ResIco : TResourceStream;

begin
  ResIco := TResourceStream.Create(hInstance, 'ZrI', 'ICON');
  try
    Icon.LoadFromStream(ResIco);
  finally
    FreeAndNil(ResIco);
  end;
:!: "Ressource 'ZrI' wurde nicht gefunden

Ich hoffe, jemand kann die "2 Bedingungen" unter einen Hut bringen :(

Danke,
ManuMF

SirThornberry 6. Jan 2006 23:40

Re: Problem mit Icon aus Ressource
 
ich hab grad probiert und glaube den Fehler gefunden zu haben. Wenn die rc-Datei so aussieht:
Code:
ZrI ICON "Icon1.ico"
so zeigt mein Ressourcenhacker als Typ "Icon" an und nicht "ICON"
wenn die RC-Datei hingegen so aussieht:
Code:
ZrI ICON2 "Icon1.ico"
so zeigt der Ressorucenhacker als Typ "ICON2" an.

Da ICON also ein resserviertes Wort ist wird das ganze nicht unbedingt als "ICON" eingebunden. Bei Verwendung des Types "ICON" wird sogar geprüft vom Ressourcencompiler ob es sich um eine gültige Icon-Datei handelt.

Folgendes sollte also bei dir funktionieren:
Code:
ZrI ICON "Zahnrad.ico"
Delphi-Quellcode:
var ResIco : TResourceStream;

begin
  ResIco := TResourceStream.Create(hInstance, 'ZrI', 'Icon');
  try
    Icon.LoadFromStream(ResIco);
  finally
    FreeAndNil(ResIco);
  end;
anstelle von "Icon" ist es jedoch besser die constante zu nutzen RT_ICON zu verwenden.
Delphi-Quellcode:
var ResIco : TResourceStream;

begin
  ResIco := TResourceStream.Create(hInstance, 'ZrI', RT_ICON);
  try
    Icon.LoadFromStream(ResIco);
  finally
    FreeAndNil(ResIco);
  end;

ManuMF 6. Jan 2006 23:45

Re: Problem mit Icon aus Ressource
 
Hallo,

wenn ich diesen Code verwende, funktioniert es ja nicht (Möglichkeit 3).

Die Ergänzung mit RT_ICON funktioniert auch nicht, dann habe ich das Icon nicht als Symbol für eine Verknüpfung. :-(

Gruß,
ManuMF

SirThornberry 7. Jan 2006 00:02

Re: Problem mit Icon aus Ressource
 
Ich bin ja sooo toll :mrgreen: :love:
Du musst als Typ: RT_GROUP_ICON verwenden (im Delphi-Quelltext)

Hab es gefunden als ich in der Hilfe bei "FindResource" mir mal die typen angesehen hab auf der Suche nach einem IconTyp. Und bei RT_ICON stand Hardware-dependent. Also hab ich nach einer Icon-Konstanten gesucht wo "Hardware-independent" steht. Und siehe da. Direkt über der Konstanten RT_ICON fand ich RT_GROUP_ICON

ManuMF 7. Jan 2006 00:18

Re: Problem mit Icon aus Ressource
 
Hallo,

Zitat:

Zitat von SirThornberry
Ich bin ja sooo toll :mrgreen: :love:

Das bezweifle ich nicht, denn es kommt keine Fehlermeldung. ;-)

Aber statt des Icons im Formular nur ein 16x16 schwarzes Quadrat...

Gruß,
ManuMF

SirThornberry 7. Jan 2006 00:37

Re: Problem mit Icon aus Ressource
 
so, das ganze geht viel einfacher:
Delphi-Quellcode:
Self.Icon.Handle := LoadIcon(HInstance, 'ZrI');
und schon hat dein Fenster ein anderes Icon.

ManuMF 7. Jan 2006 00:47

Re: Problem mit Icon aus Ressource
 
Hallo,

Danke! :thumb: Endlich klappt es...

Das hilft mir, 4KB einzusparen. ;-) Nein, im Ernst, ich möchte es ja für die Zukunft wissen, wenn ich mal wesentlich mehr Icons zu laden haben sollte...

Gruß,
ManuMF


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