Verhalten / Meldungen unter Windows
-
- Beiträge: 370
- Registriert: Di 6. Feb 2007, 09:29
- OS, Lazarus, FPC: L0.9.29 SVN:24607 FPC 2.4.0-32 bit @ Win XP SP3
- CPU-Target: 32bit i386, ARM
- Wohnort: Oberösterreich
Verhalten / Meldungen unter Windows
Hi!
(ich weiß nicht ob ich hier jetzt richtig bin, als wenn nicht: Mod, bitte verschieben, danke)
Nachdem meine Lazarus Installation unter Linux 1a funktioniert hat, habe ich es auf der Windose auch draufgeklatscht.
Die Linuxversion funktioniert super. Sie lädt schnell und alles, das ich bisher ausprobiert habe (ich kämpfe mich gerade durch ein FPC / Delphi Wikiboo), funktiniert auch!
Unter Windows verhält es sich leider anders.
Version unter Windows: 0.9.20 Beta / SVN-REV: 10176
Wenn ich einen Button eine simple Form lege und mit Application.Quit (nach dem Klick auf den Button) das Progamm wieder beenden will, passiert folgendes:
Nach dem Klicken des Buttons kommen folgende Fehler in Form von MessageBoxen:
Error: Project project1 raised an exception class 'External SIGSEGV'.
und danach
Ausführung angehalten: Adresse: $004CDB67, Prozedur: TOBJECT_DISPATCH, Datei:
Todo: Assembler-Ansicht and dieser Stelle)
Tja, ganz schlau werde ich da einfach nicht.
Wenn mir jemand einen Tip geben könnte, wie man sowas vermeidet, ausmerzt, ... ,
wäre ich sehr dankbar.
(ich weiß nicht ob ich hier jetzt richtig bin, als wenn nicht: Mod, bitte verschieben, danke)
Nachdem meine Lazarus Installation unter Linux 1a funktioniert hat, habe ich es auf der Windose auch draufgeklatscht.
Die Linuxversion funktioniert super. Sie lädt schnell und alles, das ich bisher ausprobiert habe (ich kämpfe mich gerade durch ein FPC / Delphi Wikiboo), funktiniert auch!
Unter Windows verhält es sich leider anders.
Version unter Windows: 0.9.20 Beta / SVN-REV: 10176
Wenn ich einen Button eine simple Form lege und mit Application.Quit (nach dem Klick auf den Button) das Progamm wieder beenden will, passiert folgendes:
Nach dem Klicken des Buttons kommen folgende Fehler in Form von MessageBoxen:
Error: Project project1 raised an exception class 'External SIGSEGV'.
und danach
Ausführung angehalten: Adresse: $004CDB67, Prozedur: TOBJECT_DISPATCH, Datei:
Todo: Assembler-Ansicht and dieser Stelle)
Tja, ganz schlau werde ich da einfach nicht.
Wenn mir jemand einen Tip geben könnte, wie man sowas vermeidet, ausmerzt, ... ,
wäre ich sehr dankbar.
-
- Beiträge: 370
- Registriert: Di 6. Feb 2007, 09:29
- OS, Lazarus, FPC: L0.9.29 SVN:24607 FPC 2.4.0-32 bit @ Win XP SP3
- CPU-Target: 32bit i386, ARM
- Wohnort: Oberösterreich
Hmm, also ich beende meine Programme immer mit
close;
Danke, mit
Code: Alles auswählen
close;
Ich hatte mich oben verschrieben - sorry.
Nicht
Code: Alles auswählen
Application.quit
sondern mit
Code: Alles auswählen
Application.Destroy
Danke für den Tip!
-
- Beiträge: 370
- Registriert: Di 6. Feb 2007, 09:29
- OS, Lazarus, FPC: L0.9.29 SVN:24607 FPC 2.4.0-32 bit @ Win XP SP3
- CPU-Target: 32bit i386, ARM
- Wohnort: Oberösterreich
Application.Destroy funktioniert eigentlich auch benutz ich aber nur in fehlerfällen
Glaub ich dir, denn Application.Destroy verursacht den Fehler oben. ^^
Ne im Ernst - ich hatte das so im Kopf und dachte es wäre richtig.
Objekt.Methode == Application.Destroy
Wobei Application die "MainClass" ist, wie man in Java sagen würde.
Wenn ein einfaches close; reicht, soll es mir recht sein. Wobei der Fehler, wie gesagt auch nur unter Windows auftritt. Unter Linux läuft alles glatt!
- af0815
- Lazarusforum e. V.
- Beiträge: 6198
- 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:
und wenn Close nicht geht, gibts auch immer noch Application.Terminate;
Also wenn 'close' auf das Haupformular nicht geht, dann sollte man sich was überlegen
Das aufrufen von Close oder das Anklicken des X, oder close aus dem Systemmenü arbeitet folgend:
* Close ruft die Methode CloseQuery auf
* CloseQuery ruft OnCloseQuery auf wenn es definiert ist.
* Wenn OnCloseQuery bei der ANfrage true zurückgibt, dann wird der Event OnClose (wenn definiert ist) aufgerufen
* Wenn das jetzt das Hauptformular ist und OnClose gibt etwas anderes aus als caNone (oder ist undefiniert), so wird jetzt Application.Terminate aufgerufen um die Form endgültig zu schliessen
* Wenn es nicht das Hauptformular ist und OnClose gibt caHide zurück (oder ist nicht definiert) dann wird die Methode Hide aufgerufen.
Sowohl OnCloseQuery als auch OnClose können zum ändern des Schliessverhaltens herangezogen werden (oder auch nur verstecken, User muss noch speichern etc...).
Wenn man Application.Terminate aufruft so wird OnCloseQuery und OnClose nicht aufgerufen.
Die prozedure Halt ist noch härter, die Applikation wird ohne weitere Aufräumarbeiten beendet - verdammt hart.
Also in diesem Sinne, verwende ich IMMER Close und geben meinen Usern und dem Programm geordnet zu beenden (mit Speicher abfrage etc.)
Die Infos stammen auch von Delphi, bis jetzt habe ich aber noch keinen Grund gesehen bei Lazarus, das das Verhalten nicht gleich ist.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).