AGB  ·  Datenschutz  ·  Impressum  







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

Anwendung ohne MainForm

Ein Thema von Andreas L. · begonnen am 17. Jul 2012 · letzter Beitrag vom 18. Jul 2012
Antwort Antwort
Andreas L.

Registriert seit: 23. Mai 2011
Ort: Furth im Wald
308 Beiträge
 
Delphi 11 Alexandria
 
#1

Anwendung ohne MainForm

  Alt 17. Jul 2012, 11:37
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;
...
Andreas Lauß
Blog

Geändert von Andreas L. (17. Jul 2012 um 11:48 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Anwendung ohne MainForm

  Alt 17. Jul 2012, 12:17
Verstecke die Mainform einfach
Markus Kinzler
  Mit Zitat antworten Zitat
Andreas L.

Registriert seit: 23. Mai 2011
Ort: Furth im Wald
308 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Anwendung ohne MainForm

  Alt 17. Jul 2012, 12:50
@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?
Andreas Lauß
Blog
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: Anwendung ohne MainForm

  Alt 17. Jul 2012, 13:12
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;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#5

AW: Anwendung ohne MainForm

  Alt 18. Jul 2012, 07:30
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?
  Mit Zitat antworten Zitat
Antwort Antwort


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