Icons für Forms und Application

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

Icons für Forms und Application

Beitrag von LigH »

Kategorie: Diverse Anleitungen
Typ: Tutorial

Artikel Name: Icons für Forms und Application
Autor: LigH
Beschreibung: Geeignete Ressourcen für Windows erstellen


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. Die Ursache liegt wohl vor allem darin, dass Icons für bestimmte Betriebssysteme sich im Aufbau von der systemunabhängigen TIcon-Klasse für FreePascal / Lazarus unterscheiden.

Bisher ist also manuelle Vorbereitung notwendig. Diese werde ich für Windows hier erklären:

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;

Antworten