AGB  ·  Datenschutz  ·  Impressum  







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

Try-finally und modalresult

Ein Thema von idefix2 · begonnen am 21. Jun 2015 · letzter Beitrag vom 24. Jun 2015
Antwort Antwort
Seite 1 von 2  1 2      
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#1

Try-finally und modalresult

  Alt 21. Jun 2015, 14:07
Ich bin mir nicht ganz sicher, wie ich hier richtig vorgehe, bzw. ob ich das so machen kann:

Delphi-Quellcode:
type

TMyform=class(Tform)
  ...
private
  sl: TStringList
end;

implementation

procedure Tmyform.dosomething;
begin
  sl:=TStringList.create;
  try
    ...
    if bedingung1 then
      if bedingung 2 then ModalResult:=mrOK
                     else Modalresult:=mrAbort;
    ...
  finally
    sl.free;
  end (* try *);
end;
Kann ich davon ausgehen, dass bei der Abarbeitung der finally-Klausel meine Form noch existiert und das sl.free sicher durchgeführt wird, oder riskiere ich unter Umständen, dass ich mir mit der Zuweisung an Modalresult quasi den Ast abgesägt habe, auf dem ich sitze?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#2

AW: Try-finally und modalresult

  Alt 21. Jun 2015, 14:20
Mir persönlich ist kein Fall bekannt, in dem ein finally nicht ausgeführt wird, wenn der Block erst einmal betreten wurde. Zur Not kannst Du das aber auch im Debugger überprüfen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#3

AW: Try-finally und modalresult

  Alt 21. Jun 2015, 14:34
Habe jetzt eben bemerkt, die Frage ist ein Unsinn.
Durch die Zuweisung an modalresult wird ja das Formular nur geschlossen, freigegeben wird es ja wenn überhaupt erst später.
Meine Sorge war nicht, ob das finally durchgeführt wird, davon kann man, denke ich, mit Sicherheit ausgehen, sondern ob es das Formular dann in allen Fällen noch gibt.

Geändert von idefix2 (21. Jun 2015 um 14:38 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

AW: Try-finally und modalresult

  Alt 21. Jun 2015, 15:06
Die Methode läuft definitiv noch komplett durch.

ModalResult und Close haben erst am Ende (oben, in der Messagebehandlung) oder beim nächsten Application.ProcessMessages eine Auswirkung, auf das Schließen.
$2B or not $2B
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#5

AW: Try-finally und modalresult

  Alt 21. Jun 2015, 15:10
Beim Setzen von 'ModalResult' passiert erst einmal gar nichts. Außer, das ModalResult gesetzt wird. Erst wenn die Message, aufgrund dessen deine Methode aufgerufen wurde, abgearbeitet ist, wird ModalResult ausgewertet.

Steht auch so im VCL-Code.
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#6

AW: Try-finally und modalresult

  Alt 21. Jun 2015, 19:06
Alles klar.
Abgesehen davon wäre es egal. Sogar wenn das Close gleich durchgeführt würde, was nicht der Fall ist, wäre die Datenstruktur der Form immer noch da, also würde auch dann im finally nichts passieren. Dem sl.free ist es ja völlig egal, ob die Form gerade sichtbar oder unsichtbar ist.
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.116 Beiträge
 
Delphi 12 Athens
 
#7

AW: Try-finally und modalresult

  Alt 23. Jun 2015, 10:36
Bei try finally kann aber die Routine bei Exceptions überall zum finally block herausspringen.

Dann könnte ModalResult undefiniert sein (oder zumindest nicht so wie du es gerne hättest).
Also ich definiere alles Wichtige schonmal bevor try finally, und nur wenn er bis zum Result := OK kommt
ist alles richtig durchgelaufen.

Ansonsten wäre das dann wie gewünscht.

Rollo
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#8

AW: Try-finally und modalresult

  Alt 23. Jun 2015, 15:02
Zitat aus der Online-Hilfe: Der Standardwert von ModalResult ist mrNone. Wenn Sie der Eigenschaft einen anderen Wert zuweisen, wird das Formular geschlossen, und der Wert wird zum Rückgabewert des ShowModal-Funktionsaufrufs, mit dem das Formular angezeigt wird.
  Mit Zitat antworten Zitat
mm1256

Registriert seit: 10. Feb 2014
Ort: Wackersdorf, Bayern
642 Beiträge
 
Delphi 10.1 Berlin Professional
 
#9

AW: Try-finally und modalresult

  Alt 23. Jun 2015, 15:21
Ich habe mir angewöhnt, alles was im Formular zum Schließen beitragen kann (hier also die Stringlist) im "OnCreate" zu erzeugen und im "OnClose" wieder frei zu geben. In diesem Fall also würde sich die Frage dann gar nicht stellen und man müsste nicht darüber nachdenken, ob man es richtig macht.
Gruss Otto PS: Sorry wenn ich manchmal banale Fragen stelle. Ich bin Hobby-Programmierer und nicht zu faul die SuFu zu benutzen
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: Try-finally und modalresult

  Alt 23. Jun 2015, 15:36
Was man im OnCreate erzeugt und über die Lifetime der Form-Instanz benötigt, sollte man tunlichst im OnDestroy aufräumen.

Alle anderen Zeitpunkte/Events funktionieren nur unter bestimmten Bedingungen.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 17:22 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