Icons für Forms und Application

Für Fragen rund um die Ide und zum Debugger
LigH
Beiträge: 25
Registriert: Mi 20. Sep 2006, 09:54

Icons für Forms und Application

Beitrag von LigH »

Da die Frage vermutlich früher oder später in diesem Unterforum landen würde, präsentiere ich hier schon mal meine Lösung. :wink:

In der Lazarus-Version 0.9.16 (und sicher noch länger...) ist es leider nicht möglich, einer Application bzw. einem Projekt über die IDE ein Icon zuzuweisen. Ebenfalls macht es keinen Sinn, einem Formular ein Icon im Designer zuzuweisen, solange es zur Laufzeit bisher leider noch nicht korrekt angewendet wird. Bisher ist also manuelle Vorbereitung notwendig.

Das ganze beginnt mit einem Ressourcenscript als Textdatei. Es sollte den gleichen Namen wie das Projekt bekommen, nur als Dateiendung *.rc (bitte darauf achten, dass "Erweiterungen bei bekannten Dateitypen ausblenden" in den Ordneroptionen des Windows-Explorers ausgeschaltet wird, damit man nicht versehentlich Dateien mit der Endung *.rc.txt erhält); nennen wir unser Projekt mal als Beispiel MyProject.

Nach dem Erstellen einer Icon-Datei (nennen wir sie mal MainIcon.ico) kommt nun in dieses Ressourcenskript die Zeile

Code: Alles auswählen

MainIcon ICON "MainIcon.ico"
Der Name MainIcon am Anfang der Zeile ist ziemlich wichtig (die Groß-/Kleinschreibung nicht unbedingt), denn in den FreePascal-Quelltexten taucht der String 'MAINICON' einige Male auf. Wer mag, kann auch noch weitere Icons als zusätzliche Zeilen anfügen, immer in der Form
Ressourcename ICON "Dateiname"
Zum Beispiel:

Code: Alles auswählen

FormIcon ICON "FormIcon.ico"
Nun wird das Ressourcenscript übersetzt mit Hilfe des Programmes Lazarus-Installation\pp\bin\i386-win32\windres.exe (gut, wenn man den %PATH% passend erweitert hat):

Code: Alles auswählen

windres -i MyProject.rc -o MyProject.res
In den Quelltext des Projektes (Projekt | Quelltext anzeigen => MyProject.lpr) kommt nun gleich oben bei den anderen Compiler-Direktiven noch die folgende Zeile hinzu:

Code: Alles auswählen

{$R *.res}
Hat die *.res-Datei nicht den selben Namen wie das Projekt, dann müsste man statt des * den kompletten Namen ausschreiben.

Dadurch, dass in der Ressourcendatei - die nun mit gelinkt wird - das Haupt-Icon den Namen MAINICON hat, sorgen einige Stellen in der Deklaration der TApplication dafür, dass dieses Icon nun als Application- und Standard-Icon registriert wird. Das sieht man dann sowohl im Explorer, als auch bei der Task-Umschaltung (Alt+Tab). Auch Formulare (außer Dialoge) erhalten damit standardmäßig dieses Icon.

Wer ein anderes Icon haben will, der muss es nun im OnCreate-Ereignis des jeweiligen Fensters zuweisen.

Code: Alles auswählen

implementation
 
uses Windows;
 
procedure TForm1.FormCreate(Sender: TObject);
var
  hFormIcon: THandle;
begin
  hFormIcon := LoadIcon(hInstance, 'FORMICON');
  SetClassLong(self.Handle, GCL_HICON, hFormIcon);
  SetClassLong(self.Handle, GCL_HICONSM, hFormIcon);
end;
Ich hoffe, das war ein guter Einstand in diesem Forum, und wünsche gutes Gelingen!

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

super, danke für die Anleitung.
Eventuell sollte man sie auch mal als Tutorial später in ein extra Forum verschieben.

knight
Beiträge: 802
Registriert: Mi 13. Sep 2006, 22:30

Beitrag von knight »

Zum Thema Ressourcen gibt es auch eine Seite im Wiki:
http://wiki.lazarus.freepascal.org/Lazarus_Resources/de" onclick="window.open(this.href);return false;

knight

LigH
Beiträge: 25
Registriert: Mi 20. Sep 2006, 09:54

Beitrag von LigH »

Recht interessant. Und bestätigt die Ursache: Die von Lazarus verwaltete TIcon-Klasse unterscheidet sich wesentlich von Windows-Icons. Damit Windows das Application-Icon erkennt, muss man die Betriebssystem-Unabhängigkeit aufgeben, und die Funktionalitäten des Systems nutzen.

ralli
Beiträge: 374
Registriert: Mi 13. Sep 2006, 15:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Hagen a.T.W.
Kontaktdaten:

Icon wird unter Linux nicht angezeigt

Beitrag von ralli »

Das Erstellen und Compilieren einer Resourcen Datei mit einem MainIcon und das Einfügen in der Unit als Compilerdirective funktioniert unter Windows einwandfrei, unter Linux meckert der Compiler zwar nicht, aber das Icon wird im Hauptprogramm auch nicht angezeigt.

Ralli

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Linux kennt ja auch keine Icons, dafür gibts die Icon Eigenschaft in TForm. Linux unterstützt keine Resourcen in executables du musst also auch mainicon usw in exteren Dateien verlagern und erst in der "verknüpfung" zusammenführen
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

gaucho
Beiträge: 2
Registriert: Fr 6. Jul 2007, 17:18
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Schwabenländle
Kontaktdaten:

Beitrag von gaucho »

Nachdem ich nun fast eine halbe Ewigkeit gesucht habe, um herauszufinden, wie ich denn in Windows ein Icon an die exe kleben, bin ich hier fündig geworden.

Sage meinen Dank :-)

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6763
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Beitrag von af0815 »

@LigH
Wenn du es noch als Artikel ins die 'WissensDB/Tutorials' kopierst, dann ist der gute Artikel endgültig am Platz. :-)
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

LigH
Beiträge: 25
Registriert: Mi 20. Sep 2006, 09:54

Beitrag von LigH »

Ich bin davon ausgegangen, dass ein Moderator das dank Unterstützung der Forensoftware leichter hinkriegt...

P.S.: Was hab ich da für eine Katze? Asiatisches Kalendertier?

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

LigH hat geschrieben:Ich bin davon ausgegangen, dass ein Moderator das dank Unterstützung der Forensoftware leichter hinkriegt...
monta scheint momentan ein wenig beschäftigt zu sein. Ein Tutorial zu erstellen ist ganz einfach:

1. Rechts oben auf WissensDB klicken
2. Auf Tutorials klicken
3. Aus "Artikel senden" (direkt unter Überschrift) klicken
4. Im sich öffnenden Fenster den Text eingeben, den du hier im ersten Beitrag gepostet hast.
P.S.: Was hab ich da für eine Katze? Asiatisches Kalendertier?
Das ist dein Chinesisches Sternzeichen. Sei froh mit deiner Katze - ich hab ne Ratte :(

Monta, lassen sich die chinesischen Sternzeichen für den Monat März irgendwie verändern? Die Chinesen haben da doch bestimmt mehrere Alternativen... ... ich hätte dann gerne einen Gepard. ;)

LigH
Beiträge: 25
Registriert: Mi 20. Sep 2006, 09:54

Beitrag von LigH »


Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Was das mit der Ratte ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

Finde, es gibt attraktivere Tiere. Wenns nach den Chinesen ging wäre ich Ratte.
Was bist du denn? ...
... ein Affe. :D

LigH
Beiträge: 25
Registriert: Mi 20. Sep 2006, 09:54

Beitrag von LigH »

Alles eine Frage der Kultur. Hier essen sie Hunde, da verehren sie Rinder...

Aber was hat das noch mit Icons zu tun?! :roll: :P

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Full Ack wenn monta mal wieder auftaucht, kann er ja den kram mal rauslöschen
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Antworten