Ich habe heute wieder mal ein paar Fragen und hoffe, ihr könnt mir helfen. Es geht also nicht um ein spezifisches Problem, als vielmehr um einige grundlegende Fragen zu Lazarus und FPC.
Ich fange also einfach mal an:
- Ich habe mit Hilfe dieses Tutorials aus dem Wiki eine *.RES Datei erstellt (mit Windres) und auch schon erfolgreich zum Laufen gebracht.
Meine Frage dazu stellt sich folgendermaßen zusammen: ich muss mit der Compilerdirektive (ist es eine?)die *.res-Datei einbinden. Wie das vom Compiler dann gehandhabt wird, kann mir eigentlich egal sein, solange es funktioniert, denn das tut es ja auch wunderbar. Ich muss allerdings die Unit "Windows" einbinden. Meine Frage dazu ist: was tut diese Unit? Stellt sie WinAPI-Sachen zur Verfügung, oder wie? Ohne diese Unit könnte ich beim Erstellen der Form1 das Icon nicht laden.Code: Alles auswählen
{$ifdef win32} {$R ginttu.res} {$endif}
Muss diese Konstante (IDI_ICON1) genau diesen Wert haben? Woher weiß ich, dass ich 101 nehmen muss? Und was sind und bewirkenCode: Alles auswählen
procedure TForm1.FormCreate(Sender: TObject); const IDI_ICON1 = 101; begin TrayIcon1.Icon.Handle:= LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1)); TrayIcon1.PopUpMenu := PopupMenu1; end;
hInstance und MAKEINTRESOURCE()? Kann mir dazu jemand ein paar Informationen geben? Ich wäre sehr dankbar! - Mein Programm hat also ein TrayIcon und die OnClose - Aktion wird mit
ausser Kraft gesetzt und das Fenster nur "versteckt". Dafür habe ich dann das TrayIcon, welches über eine Menü verfügt, über den ich das Fenster wieder anzeigen kann, bzw. das Programm über das TPopupMenu schließen will. Hier nun meine Frage: welcher Weg ist der sauberste, um das Programm zu beenden. Ein Einfaches
Code: Alles auswählen
procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction); begin CloseAction := caNone; TrayIcon1.Visible:= True; Form1.Visible:= False; end;
funktionier leider nicht. Die Applikation läuft weiter (bzw. sieht es nicht so aus, als würde der Debugger das begreifen).Code: Alles auswählen
procedure TForm1.MenuItem2Click(Sender: TObject); begin //Dies ist "Exit" im TPopupMenu Close; end;
Eine ander Möglichkeit wäre
, aber ist dies auch der richtige Weg? Ich meine, ist Terminate nicht ein Weg mit dem Holzknüppel?Code: Alles auswählen
procedure TForm1.MenuItem2Click(Sender: TObject); begin Application.Terminate; // ist Application.Terminate der richtige Weg? end;
Also: wie kann ich das Programm sauber beenden und eventuell noch Aufräumarbeiten (Dateien speichern, Objekte freigeben, ...) durchführen.
Wieder wäre ich für ein wenig Information sehr dankbar.