AGB  ·  Datenschutz  ·  Impressum  







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

Prozedur einer anderen Form aufrufen

Ein Thema von Delphimagnet · begonnen am 28. Sep 2004 · letzter Beitrag vom 28. Sep 2004
 
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#16

Re: Prozedur einer anderen Form aufrufen

  Alt 28. Sep 2004, 14:49
Hi Delphimagnet,

ich hab das jetzt mal kurz gelesen und komme selber schon mit deinen Bezeichnern und dem was du da machst durcheinande.

Wenn ich solche Sachen machen muß lege ich mir erst mal folgende Grundprinzipien fest um spätere Verwirrung zu vermeiden:

1. Alle modalen Fenster werden global erzeugt und bleiben während der gesamten Programmlaufzeit existent, oder ich erzeuge sie generell lokal und sorge auch lokal für die Freigabe (generell).
Erste Methode hat den Vorteil, dass man sich nicht lokal um die Instanz kümmern muß. Es müssen beim Aufruf immer nur die Initialisierungswerte neutralisiert werden (vom Vorherigen Eintrag bleiben keine Werte bestehen, außer das ist so gewünscht).
Zweite Methode ist dann sinnvoll wenn relativ viel an Werten übergeben werden soll und das bereinigen der Daten zuviel Schreibarbeit kostet. Außerdem weden nicht alle Dialoge zur Startzeit erstellt und man spart somit natürlich Resourcen.

Du scheinst aber offensichtlich die zweite Methode zu bevorzugen. Dann mache ich folgendes:

In der automatisch erzeugten Formular-Unit lösche ich den globalen Var-Eintrag auf das Fenster (aus reiner Sicherheit, falls man doch mal aus reiner Dummheit diese verwenden will).

Der Button zum Schließen des Fensters erhält bei mir nur das ModalResult (z.B. mrOK). Somit wird das Fenster zwar geschlossen, aber die Instanz noch erhalten. Jetzt werte ich modalResult des Fensters aus und reagiere dementsprechend mit der Übernahme von Werten. Danach wird die Instanz mittels Destroy, Free oder FreeAndNil freigegeben. Damit bei Fehlern keine Speicherleiche zurück bleibt kapsel ich alles in einen try finally Block.

So funzt es bei mir schon ewig und ohne Murren.

Codebsp.:
Delphi-Quellcode:
procedure TMDIvertreterkonto.act_HVSuchenExecute(Sender: TObject);
var
  dlg : TDLGsuchergebnissUebernahme;

Begin
  dlg := TDLGsuchergebnissUebernahme.create(self);
  try
    dlg.Showmodal();
    IF DLG.ModalResult = mrcancel then Exit;
    // hier mit DLG machen was du willst
  filally
    dlg.Free;
  end;
end;
Wenn es so nicht klappt, dann steckt bei dir ein Problem an ganz anderer Stelle. Die hab ich bis jetzt aber noch nicht gesehen.

Gruß oki
  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:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz