AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Forms & ARC "spielereien"

Ein Thema von Mavarik · begonnen am 1. Jul 2013 · letzter Beitrag vom 3. Jul 2013
 
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.130 Beiträge
 
Delphi 10.3 Rio
 
#1

Forms & ARC "spielereien"

  Alt 1. Jul 2013, 16:33
Hallo Zusammen!

Was erwartet man von ARC?

App mit 2 Forms... Main & Form1

Beispiel 1

Delphi-Quellcode:
Procedure TMain.Button1Click(Sender: TObject);
Var
  F : TForm1;
begin
  F := TForm1.Create(NIL);
  F.Show
end;
Was erwartet man?
Das Form wird angezeigt und nachdem man "out of Scope" ist, wird das Fenster wieder geschlossen und die
OnDestroy aufgerufen, oder?

Nöö eben nicht. F.RefCount ist 2 daher wird das Fenster weder geschlossen noch die Destroy aufgerufen.

Beispiel 2

Delphi-Quellcode:
Procedure TMain.Button1Click(Sender: TObject);
Var
  F : TForm1;
begin
  F := TForm1.Create(NIL);
  F.Show
  F := NIL;
end;
Bringt logischerweise auch nix.

Noch besser finde ich allerdings folgendes:

Beispiel 3

Delphi-Quellcode:
procedure TMain.Button1Click(Sender: TObject);
var
  [WEAK] F : TForm1;
begin
  F := TForm1.Create(NIL);
  F.Show;
end;
Hierbei ist F.RefCount=1 nachdem "out of scope" sollte jetzt F.RefCount endlich mal 0 sein, oder?

Naja... Auf jeden Fall wird das Fenster dargestellt und funktiniert "ganz prima"

Also wie zum Geier kann ich das Fenster schliessen und den onDestroy aufrufen?

Wie wäre es mit... Moment muss die IDE neu starten (nicht genug Arbeitsspeicher) da war wohl ein Memory Leak!
Weiter geht's...


Delphi-Quellcode:
Procedure TForm1.FormClose(Sender: TObject; var Action : TCloseAAction);
begin
  Action := TCloseAction.caFree; // Let's do the MDI Style
end;
Na endlich die OnDestroy wird aufgerufen... Aber halt...

Debugger Exception-Klasse SIGSEGV(11) ausgelöst. (Zeile 3569 in FMX.Platform.iOS)
> Form.MouseLeave blöde nur das Form jetzt schon NIL ist...

OK Dann anders!

Beispiel 4

Delphi-Quellcode:
procedure TMain.Button1Click(Sender: TObject);
var
  F : TForm1;
begin
  F := TForm1.Create(NIL);
  F.Showmodal;
  F.Free;
end;
Mit einem Button ModalResult := mrOK setzen...

UND? OK Fenster ist weg...

Unnötig zu erwähnen, dass die OnDestroy wieder nicht aufgerufen wird!

Noch jemand ne Idee?


Mavarik
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz