![]() |
Anwendung ohne MainForm
Hi,
in einer Anwendung sollen alles Forms erst dann erstellt werden wenn sie benötigt werden. Es soll auch kein MainForm geben, lediglich ein DatenModul soll von Anfang an verfügbar sein. Lösche ich aus der Projekt-Datei die Zeile Application.CreateForm(...); mit der das MainForm erzeugt wurde, startet die Anwendung zwar, nach erstellen des DatenModul beendet sich das Programm aber sofort. Mit folgenden Code kann ich das verhindern:
Delphi-Quellcode:
Bisher hat alles wunderbar auf diese Weise funktioniert.
program Project3;
uses Forms, Unit2 in 'Unit2.pas' {Form2}, Unit3 in 'Unit3.pas' {DataModule3: TDataModule}; {$R *.res} begin Application.Initialize; Application.MainFormOnTaskbar := False; Application.CreateForm(TDataModule3, DataModule3); Application.ShowMainForm := False; Application.Run; while not Application.Terminated do Application.ProcessMessages; end. Jetzt wollte ich aber wissen: Kann das irgendwelche Seiteneffekte erzeugen? Oder die Performance der Anwendung mindern? Gibt es noch andere Möglichkeiten eine Anwendung ohne MainForm zu erzeugen (keine Konsolen-App)? EDIT: Mit HandleMessage geht es auch:
Delphi-Quellcode:
Was ist besser? HandleMessage oder ProccesMessages? Das TApplication-Ojbekt macht intern auch nicht anderes als
while not Application.Terminated do
Application.HandleMessage;
Delphi-Quellcode:
...
repeat try HandleMessage; except HandleException(Self); end; until Terminated; ... |
AW: Anwendung ohne MainForm
Verstecke die Mainform einfach
|
AW: Anwendung ohne MainForm
@mkinzler:
Du meinst einfach Form2.Visible := False + Application.ShowMainForm := False? Dann habe ich ja eine leere Form im Projekt die zu nichts nütze ist. Oder gibt es noch einen anderen Weg? |
AW: Anwendung ohne MainForm
das Wechseln der Mainform geht ja ...
Delphi-Quellcode:
var
P:Pointer; begin P := @Application.Mainform; Application.MainForm.Free; Pointer(P^) := TForm6.Create(Application); TForm(p^).Show; end; |
AW: Anwendung ohne MainForm
Ich würde die Mainform trotzdem unsichtbar halten, einfach weil es im Sinne der VCL ist. Ich verbiege die Intention von Frameworks nur ungerne, eben wegen eventueller Seiteneffekte. Wenn Du die Mainform als Controller implementierst, hast Du von Dort aus auch die Kontrolle, wann und wie die Applikation beendet wird.
Ich packe auf die Mainform einer unsichtbaren Anwendung eigentlich immer Statusinformationen oder Config-Einstellungen und verwende ein Tray Icon mit Popup-Menu, um dieses Fenster bei Bedarf sichtbar zu machen. Ich verhindere dann noch, das beim Schließen dieses Fensters die Anwendung terminiert. Zum Schließen der Anwendung habe ich einen Menüeintrag im Popupmenü des Tray-Icons. Ich empfinde das als Windows-konform. @Bummi: Dein Code knallt, sobald Application.MainForm einen Getter bekommt, oder? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:23 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