Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Anwendung ohne MainForm (https://www.delphipraxis.net/169394-anwendung-ohne-mainform.html)

Andreas L. 17. Jul 2012 11:37

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:
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.
Bisher hat alles wunderbar auf diese Weise funktioniert.

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:
  while not Application.Terminated do
    Application.HandleMessage;
Was ist besser? HandleMessage oder ProccesMessages? Das TApplication-Ojbekt macht intern auch nicht anderes als
Delphi-Quellcode:
  ...
      repeat
        try
          HandleMessage;
        except
          HandleException(Self);
        end;
      until Terminated;
...

mkinzler 17. Jul 2012 12:17

AW: Anwendung ohne MainForm
 
Verstecke die Mainform einfach

Andreas L. 17. Jul 2012 12:50

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?

Bummi 17. Jul 2012 13:12

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;

Furtbichler 18. Jul 2012 07:30

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 11:10 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