AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls MainForm nicht anzeigen, wenn Prog. direkt beendet wird
Thema durchsuchen
Ansicht
Themen-Optionen

MainForm nicht anzeigen, wenn Prog. direkt beendet wird

Ein Thema von Jumpy · begonnen am 22. Jun 2012 · letzter Beitrag vom 22. Jun 2012
Antwort Antwort
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.736 Beiträge
 
Delphi 6 Enterprise
 
#1

MainForm nicht anzeigen, wenn Prog. direkt beendet wird

  Alt 22. Jun 2012, 11:29
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?
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#2

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

  Alt 22. Jun 2012, 11:33
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#3

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

  Alt 22. Jun 2012, 12:12
Hast du schonmal versucht, im FormCreate das Application.ShowMainForm := false; zu setzen?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#4

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

  Alt 22. Jun 2012, 12:26
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#5

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

  Alt 22. Jun 2012, 12:27
Oder eventuell ein Delphi-Referenz durchsuchenAbort?
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#6

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

  Alt 22. Jun 2012, 12:31
Application.ShowMainForm := False ist in diesem Fall das Beste. MainForm bleibt so lange vorerst unsichtbar, bis es zB mit Show sichtbar gemacht wird.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#7

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

  Alt 22. Jun 2012, 12:42
Application.ShowMainForm := False ist in diesem Fall das Beste. MainForm bleibt so lange vorerst unsichtbar, bis es zB mit 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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#8

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

  Alt 22. Jun 2012, 12:47
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.
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.736 Beiträge
 
Delphi 6 Enterprise
 
#9

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

  Alt 22. Jun 2012, 13:03
Danke schonmal. Werd das Montag mal alles ausprobieren. Jetzt ist WE.
Ralph
  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 14:12 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