Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Icon aus Resource laden? (https://www.delphipraxis.net/74792-icon-aus-resource-laden.html)

Pseudemys Nelsoni 8. Aug 2006 19:25


Icon aus Resource laden?
 
Moin,

man kann in MSVC# ja jeder Form ein Icon (das oben links erscheint) hinzufügen - wie in Delphi eben auch... Mein Problem ist folgendes, ich weise meinen 3 Forms das _gleiche_ Icon im "Objekt Inspektor" hinzu. Natürlich kann die IDE ja nicht wissen, dass es sich um das gleiche Icon handelt, also wird es doppelt und dreifach in die exe - was ja nutzlos ist - hinzugefügt. jJemand nde Idee wie ich allen Forms das gleiche Icon geben kann? Aus EINER Resource?

Bernhard Geyer 8. Aug 2006 19:33

Re: Icon aus Resource laden?
 
Eine Möglichkeit: Definier dir eine eigene Form-Basisklasse welche ein Zusatzproperty "IconName" besitzt. Beim Erzeugen des Formulars kann aufgrund dieses Namens das Icon aus der Exe-Resource geladen werden.

ChrisE 8. Aug 2006 20:43

Re: Icon aus Resource laden?
 
Hallo,

generell helfen hier die Methoden
Delphi-Quellcode:
Icon.LoadFromResourceName('DerName');
//bzw.
Icon.LoadFromResourceID(Nummer);
wenn es nur ein Icon für alle Fenster gibt:
- entweder in den Projektoptionen zuweisen
oder
- Application.Icon.LoadFromResourceName bzw Application.Icon.LoadFromResourceID
in der dpr aufrufen z.B. nach Application.Initialize

wenn es mehrere Fenster gibt und nur ein paar des selbe Icon haben:
z.B. in OnCreate von den Form oder in der dpr nach dem Application.CreateForm(TMyForm, MyForm)
MyForm.Icon.LoadFromResourceName bzw MyForm.Icon.LoadFromResourceID

Ich hoffe das hilft dir in die richtige Richtung

Gruß, Chris

P.S.: Nicht vergessen die Ressourcendatei in den Pfad der DPR abzulegen. Die Standardmäßige Compileranweisung
Delphi-Quellcode:
{$R *.res}
in der DPR sollt dafür sorgen, dass die Ressourcendatei verfügbar ist und verwendet wird

Pseudemys Nelsoni 9. Aug 2006 12:03

Re: Icon aus Resource laden?
 
Moin,

danke für eure Antworten, da ich C# und nicht Delphi verwende, hab ich solche Methoden nicht :(

Ich habe es schon so versucht:

Code:
this.Icon = new Icon(typeof(Control), "myicon");

ich weiss nichtmal was "typeof(Control)" bewirkt, da ich es aus der MSDN habe, dennoch funktioniert das ganze nicht und ich bekomme eine Exception die sagt "Die Resource myicon kann in der Klasse System.Windows.Forms.Control nicht gefunden werden"

Ist es denn so schwer ein Icon aus einer Resource zu laden?<g>

ChrisE 9. Aug 2006 12:57

Re: Icon aus Resource laden?
 
Ups...

Zitat:

Zitat von Pseudemys Nelsoni
Moin,
man kann in MSVC# ja ....

da sollte man den Post doch etwas aufmerksamer lesen.
Sorry

Jürgen Thomas 9. Aug 2006 13:25

Re: Icon aus Resource laden?
 
Delphi oder C#?

Grundsätzlich unterscheiden sich Delphi und C# nicht entscheidend; Tipps für die eine Sprache können auch bei der anderen Sprache sehr gut helfen. Dumm nur, dass die Namen von Methoden zu ändern sind und man dann nicht weiß, nach welchem Stichwort man suchen soll...

Konkret:

Zitat:

Zitat von ChrisE
Delphi-Quellcode:
Icon.LoadFromResourceName('DerName');

kann ersetzt werden durch:
Code:
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
//  so hat es der Compiler in InitializeComponent() eingetragen
Zitat:

Zitat von ChrisE
wenn es nur ein Icon für alle Fenster gibt:
MyForm.Icon.LoadFromResourceName

Dazu habe ich bisher leider kein Pendant gefunden: Die Application-Klasse von NET ist etwas anderes als TApplication von Delphi; insbesondere wird das Application.Icon nicht bereitgestellt.

Aber du kannst Folgendes machen:

1. Irgendwo müssen WinForm1, WinForm2 und WinForm3 verknüpft sein, z.B. durch WinForm1.Button1_Click mit dem Aufruf von WinForm2.

2. Dort kannst Du das Icon "übergeben":
Code:
WinForm2.Icon = WinForm1.Icon;
Unter Delphi durfte das so keinesfalls gemacht werden, weil dabei nur ein Handle des Icons übertragen wird; und wenn WinForm2 aufgelöst wird, geht der Verweis auf das Icon von WinForm1 ins Nirwana. Aber unter NET sollte der GarbageCollector dies vernünftig kontrollieren.

Vielleicht helfen Dir diese Informationen weiter.
Jürgen


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