Verhalten / Meldungen unter Windows

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
bembulak
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

Beitrag von bembulak »

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.

dietmarf
Beiträge: 31
Registriert: Mi 17. Jan 2007, 10:19
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von dietmarf »

Hmm, also ich beende meine Programme immer mit

close;

vielleicht erfüllt das ja auch seinen Zweck? Application.quit wird - auf die schnelle nachgeschaut - bei v0.9.21 unter Windows bei mir gar nicht als autovervollständigung angeboten, vielleicht nicht ohne Grund?

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 »

Application.Quit gibts in der aktuellen LCL wirklich nicht.
Soweit ich weiss gibts das nur im Excel :p
Gibts das in der VCL überhaupt ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

bembulak
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

Beitrag von bembulak »

Hmm, also ich beende meine Programme immer mit

close;


Danke, mit

Code: Alles auswählen

close;
funktioniert es ohne Probleme.


Ich hatte mich oben verschrieben - sorry. :oops:


Nicht

Code: Alles auswählen

Application.quit

sondern mit

Code: Alles auswählen

Application.Destroy
habe ich (mit meiner minimalen Delphierfahrung) die Programme bisher beendet. Das hat mit Delphi 7 auch funktioniert.

Danke für den Tip!

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 »

Application.Destroy funktioniert eigentlich auch benutz ich aber nur in fehlerfällen
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

bembulak
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

Beitrag von bembulak »

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!

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 »

Close benutz ich auch immer. Funktioniert wunderbar :)

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 »

Unter windows kann ich mit sicherheit sagen das es bei mit mit 0.9.21 funktioniert unter linux war ich mir jetzt nicht ganz sicher
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

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 »

und wenn Close nicht geht, gibts auch immer noch Application.Terminate;

Benutzeravatar
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:

Beitrag von af0815 »

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).

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 »

Ich verwende Application.terminate nur wenn sich Threads aufgehängt haben und ich sie nicht mehr beendet bekomme ist zwar nicht schön aber die betriebsysteme entfernen die threads auch
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Antworten