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/)
-   -   MainForm nicht anzeigen, wenn Prog. direkt beendet wird (https://www.delphipraxis.net/168999-mainform-nicht-anzeigen-wenn-prog-direkt-beendet-wird.html)

Jumpy 22. Jun 2012 10:29

MainForm nicht anzeigen, wenn Prog. direkt beendet wird
 
Hallo,

es gibt bei uns schon länger ein Programm, dass im FormCreate des MainForms prüft, ob der Nutzer berechtigt ist das Programm zu nutzen.
Falls nicht kommt eine showmessage und das Programm wird beendet.

Dabei blitzt aber nochmal kurz das Mainform auf, was ausser mir scheinbar keinen stört, aber ich find das blöd, deswegen woll ich mal fragen, wie man das verhindern kann?

DeddyH 22. Jun 2012 10:33

AW: MainForm nicht anzeigen, wenn Prog. direkt beendet wird
 
Verleg doch die Prüfung aus dem FormCreate direkt in die *.dpr. Erst bei gültiger Prüfung werden die Formulare dann angelegt.
Delphi-Quellcode:
if IsOK then
  begin
    Application.Initialize;
    Application.CreateForm(...);
    Application.Run;
  end;

Uwe Raabe 22. Jun 2012 11:12

AW: MainForm nicht anzeigen, wenn Prog. direkt beendet wird
 
Hast du schonmal versucht, im FormCreate das
Delphi-Quellcode:
Application.ShowMainForm := false;
zu setzen?

nahpets 22. Jun 2012 11:26

AW: MainForm nicht anzeigen, wenn Prog. direkt beendet wird
 
Alternativ sollte auch das gehen:
Delphi-Quellcode:
begin
  Application.Initialize;
  Application.CreateForm(MainformOderWieEsAuchHeissenMag);
  if MainformOderWieEsAuchHeissenMag.IsOk then begin
    Application.Run;
  end;
end;
Application.Run wird nur dann aufgerufen, wenn die im Create des Hauptformulars zu prüfenden Bedingungen für den Programmstart zutreffen, erst dann wird (wie mir scheint) das Formular angezeigt. Das MainForm bekommt eine Public-Variabel bIsOK vom Typ Boolean, der Du im FormCreate das Ergebnis Deiner Prüfung als boolschen Wert zuweist, damit muss Du die Prüfung nicht verlagern. Sinnvoller wäre aber, die Prüfung in eine eigene Funktion zu packen, die Du dann im FormCreate oder in der DPR aufrufen kannst. Das ist abhängig davon, ob Du zur Prüfzeit schon Zugriff auf ein initialisiertes MainForm benötigst oder nicht.

himitsu 22. Jun 2012 11:27

AW: MainForm nicht anzeigen, wenn Prog. direkt beendet wird
 
Oder eventuell ein Delphi-Referenz durchsuchenAbort?

Popov 22. Jun 2012 11:31

AW: MainForm nicht anzeigen, wenn Prog. direkt beendet wird
 
Delphi-Quellcode:
Application.ShowMainForm := False
ist in diesem Fall das Beste. MainForm bleibt so lange vorerst unsichtbar, bis es zB mit
Delphi-Quellcode:
Show
sichtbar gemacht wird.

himitsu 22. Jun 2012 11:42

AW: MainForm nicht anzeigen, wenn Prog. direkt beendet wird
 
Zitat:

Zitat von Popov (Beitrag 1172046)
Delphi-Quellcode:
Application.ShowMainForm := False
ist in diesem Fall das Beste. MainForm bleibt so lange vorerst unsichtbar, bis es zB mit
Delphi-Quellcode:
Show
sichtbar gemacht wird.

Aber nur, wenn Visible nicht schon True war.
Das gilt auch für weite Formulare, welche automatisch erstellt werden ... alles was Visible=True hat, wird sichtbar und dazu eben noch die MainForm, bei ShowMainForm=True.

Aber da könnte man versuchen das Visible auf False zu setzen, wobei es hier vermutlich auch wieder aufblinken würde, wenn es vorher schon Visible war.

nahpets 22. Jun 2012 11:47

AW: MainForm nicht anzeigen, wenn Prog. direkt beendet wird
 
Application.Terminate und Halt(255) würden ebenso gehen.
Wenn Application.ShowMainForm := False und dann das Beenden des Programmes oder das Show vergessen werden, dann läuft die Anwendung halt unsichtbar, was nicht zwingend erwünscht sein muss.
Wenn Application.Run nicht aufgerufen wird, beendet sich das Programm auf dem regulären Weg.

Jumpy 22. Jun 2012 12:03

AW: MainForm nicht anzeigen, wenn Prog. direkt beendet wird
 
Danke schonmal. Werd das Montag mal alles ausprobieren. Jetzt ist WE.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:31 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