AW: (Formular-)Handling größerer Projekte
Hi zusammen
Zitat:
Delphi-Quellcode:
Tatsächlich funktioniert das. Und zwar deshalb, weil in TCustomForm.Close geprüft wird, ob die Form die Mainform ist und anschliessend Application.Terminate aufgerufen wird (DelphiXE4). Nach einigen elses wird auch Release aufgerufen. Beim Durchsteppen sprang meine 'ausgeführte Zeile' gleich nach dem Terminate auf end.
unit TestMainUnit;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Menus; type TForm1 = class(TForm) btn1: TButton; MainMenu1: TMainMenu; Datei1: TMenuItem; Bearbeiten1: TMenuItem; procedure btn1Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.btn1Click(Sender: TObject); begin Form1.Close; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end; end. Das verblüfft mich doch ziemlich, da auf Delphi-Treff lange ein Tutorial zum schliessen eines Objektes (einer Form?) aus sich selbst heraus zu finden war. Kann es sein, dass dieses Release erst in neueren Delphiversionen integriert wurde? Gruss Delbor |
AW: (Formular-)Handling größerer Projekte
[QUOTE=mm1256;1293209]
Delphi-Quellcode:
Wenn Du hier Angst hast, dass es knallt und deshalb die Assigned-Abfrage eingefügt hast, dann darfst Du das unten auch nicht so machen:
if (Result = nil) then
begin Result := TForm(AFormClass.Create(Application)); end; if Assigned(Result) then // sonst knallts !!!! Result.Show;
Delphi-Quellcode:
.
with TFrmClient1.Create(Application) do Show;
EDIT: Da war ein Fehler in der Abfrage |
AW: (Formular-)Handling größerer Projekte
Dazu kommt es doch gar nicht, denn denn wäre ja
Code:
schon FALSE
Application.Components[i] is TFrmClient1
|
AW: (Formular-)Handling größerer Projekte
Hi mm1256
Alternativ könntest du die Clientforms, die du zur Laufzeit erstellst, auch in eine (generische?) Objektliste stecken, dann müsstest du nicht alle Komponenten der Anwendung durchlaufen, sondern nur den Listeninhalt. Solltest du eine ältere Delphiversion haben, die noch keine Objectlisten kennt, kannst du auch ein TList-Objekt benutzen und da einen Zeiger ablegen. Gruss Delbor |
AW: (Formular-)Handling größerer Projekte
Zitat:
|
AW: (Formular-)Handling größerer Projekte
Zitat:
EDIT Zitat:
|
AW: (Formular-)Handling größerer Projekte
Zitat:
Delphi-Quellcode:
als Owner nur den Formularen gibst, was soll da auch sonst noch drin sein?
Application
Dort ist das drin, was du da rein steckst:
Delphi-Quellcode:
program foo;
... begin Application.Initialize; Application.CreateForm( TFooForm, FooForm ); // <- Da, wird Owner Application.Run; end. |
AW: (Formular-)Handling größerer Projekte
Zitat:
Du gehst ja nicht alle Komponenten der Anwendung durch, sondern wie Sir Rufo schon richtig angemerkt hat, nur die Komponenten deren Owner "Application" ist. Und dies sind eben meistens nur die Formulare. |
AW: (Formular-)Handling größerer Projekte
Zitat:
|
AW: (Formular-)Handling größerer Projekte
Hi zusammen
Zitat:
Gruss Delbor |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:02 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