Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Mainform verstecken (https://www.delphipraxis.net/26907-mainform-verstecken.html)

the_seed 31. Jul 2004 11:18


Mainform verstecken
 
HI,
ich kann ja mit folgendem Befehl...
Code:
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.ShowMainForm := false;
end;

end.
die mainform verschwinden lassen , nur wie kann ich sie wieder anzeigen lassen ? -> Application.ShowMainForm := true;
funktioniert nicht
:gruebel:

axelf98 31. Jul 2004 12:27

Re: Mainform verstecken
 
Form1.show; ???

sCrAPt 31. Jul 2004 12:39

Re: Mainform verstecken
 
ich würde
Delphi-Quellcode:
Application.ShowMainForm := false;
direkt in den Projekt-Quelltext stecken (wodurch das mainform beim start nicht angezeigt wird) und mit formX.show es anzeigen lassen wenn es benötigt wird

the_seed 31. Jul 2004 18:18

Re: Mainform verstecken
 
Zitat:

Zitat von sCrAPt
ich würde
Delphi-Quellcode:
Application.ShowMainForm := false;
direkt in den Projekt-Quelltext stecken (wodurch das mainform beim start nicht angezeigt wird) und mit formX.show es anzeigen lassen wenn es benötigt wird

wie meinst du das? direkt in den project quelltext?
habe es im formcreate ereignis drin :gruebel:
dass aufrufen von anderen forms funktionbiert auch nicht...

sCrAPt 31. Jul 2004 18:21

Re: Mainform verstecken
 
den noch so unwichtigen Projektquelltext kriegste so: Delphi > Projekt > Quelltext anzeigen
Und so sollte es dann aussehen:
Delphi-Quellcode:
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.ShowMainForm := false; // Guck mal :D
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

S2B 31. Jul 2004 18:22

Re: Mainform verstecken
 
Ähm, wie meinst du das jetzt? Also wenn du die Mainform unsichtbar gemacht hast, dann kannst du andere Formen natürlich trotzdem anzeigen lassen. Wie du das machst, wurde hier schon oft genug beschrieben! 8)

MrKnogge 31. Jul 2004 18:22

Re: Mainform verstecken
 
Dephi IDE -> Projekt -> Quelltext anzeigen: nun siehst du den Projekt-Quelltext.

sCrAPt 31. Jul 2004 18:24

Re: Mainform verstecken
 
Zitat:

Dephi IDE -> Projekt -> Quelltext anzeigen: nun siehst du den Projekt-Quelltext.
Ein Papagei :drunken:

SirThornberry 31. Jul 2004 18:44

Re: Mainform verstecken
 
Und wenn es doch allgemein gehalten werden soll dann einfach
Delphi-Quellcode:
Application.Mainform.Show;

Meflin 31. Jul 2004 20:28

Re: Mainform verstecken
 
im übrigen sollte auch application.showmainform := true die mainform wieder sichtbar machen. bei mir tut es das zumindest...

the_seed 31. Jul 2004 23:08

Re: Mainform verstecken
 
Zitat:

Zitat von Meflin
im übrigen sollte auch application.showmainform := true die mainform wieder sichtbar machen. bei mir tut es das zumindest...

sollte :wink:
bei D7 EE aufjedenfall nicht, mit de befehl Application.Mainform.Show;
gehts aber THX

Int3g3r 27. Jun 2019 15:26

AW: Mainform verstecken
 
Guten Tag,

Ich stehe gerade vor einem ähnlichen Problem und habe diesen Thread gefunden.

Wenn ich meine Applikation mit Parameter starte soll nur ein Progressbar erscheinen. Das mainForm soll versteckt werden, nach Abschluss soll sich das Programm selbst schliessen.
Wenn ich meine Applikation ohne Parameter starte soll das mainForm angezeigt werden.

Mein Problem ist nun das ich noch nicht ganz verstehe wie eine Applikation aufgebaut wird.
Wenn ich in meinem Projekt
Delphi-Quellcode:
Application.ShowMainForm := false;
im OnCreate oder im Quelltext verwende, funktioniert meine Applikation nicht ordnungsgemäss weil das OnActivate Event nicht mehr ausgeführt wird.
Leider kann ich den Code im OnActivate nicht im OnCreate laufen lassen weil sich sonst die Applikation nach Abschluss nicht mehr selbst schliessen kann.

Warum wird das OnActivate nicht mehr ausgeführt ?
Wie lässt sich das verstecken des mainForms in meinem Fall erreichen?
Wenn möglich möchte ich den aufbau des mainForms nie sehen(kein geflacker) wenn ich parameter benutze.
Es sollte nur virtuell existieren.


Delphi-Quellcode:
program hcFileTransfer;

uses
  Forms,
  ftpprogressf in 'ftpprogressf.pas' {FormFtpprogressf},
  ftpf in 'ftpf.pas' {formFTP},
  ftpdialogf in 'ftpdialogf.pas' {FormFtpdialog};

begin
  Application.Initialize;
   if ParamCount > 1 then
   Application.ShowMainForm := false; // -> onActivate wird nicht mehr ausgeführt.
  Application.Title := 'hcFTP';
  Application.CreateForm(TformFTP, formFTP);
  Application.Run;
end.



procedure TformFTP.FormCreate(Sender: TObject);
begin
   FormFtpdialog := TFormFtpdialog.Create(self);
   FormFtpprogress := TFormFtpprogress.Create(self);
   State := OffLineConst;
   LocFileSizes := TStringList.Create;
   RemFileSizes := TStringList.Create;
   ComboBoxLocHistory.Items.Insert(0, GetCurrentDir);
   ComboBoxLocHistory.ItemIndex := 0;
   RadioGroupTransferMode.ItemIndex := 2;
   UpdateLocal;
   UpdateButtons;
   readSettings;
   if (edtLocalPath.Text <> '') and (edtLocalPath.Text <> ComboBoxLocHistory.Items[0]) then
   begin
      chDir(edtLocalPath.Text);
      ComboBoxLocHistory.Items.Insert(1, edtLocalPath.Text);
      ComboBoxLocHistory.ItemIndex := 1;
   end;
end;



procedure TformFTP.FormActivate(Sender: TObject);
begin
    if ParamCount > 0 then
   begin
      if lowercase(ParamStr(1)) = '-up' then
      begin
         parameterUpload; //Lade datei Hoch
         Close; // Close kann nicht im onCreate Event ausgeführt werden.
      end
      else if lowercase(ParamStr(1)) = '-down' then
      begin
         parameterDownload; //Lade date Herunter
         Close; // Close kann nicht im onCreate Event ausgeführt werden.
      end
      else
      begin
         showmessage('Ungültige Parameter!');
         Application.Terminate;
      end;
   end;
end;
Danke für die Hilfe,
Gruss Int3g3r

Delphi.Narium 27. Jun 2019 15:42

AW: Mainform verstecken
 
Steck doch den wesentlichen Code aus dem FormActivate in eine eigene Methode und rufe die dann wahlweise im FormActivate oder an beliebiger anderer Stelle auf.
Delphi-Quellcode:
program hcFileTransfer;

uses
  Forms,
  ftpprogressf in 'ftpprogressf.pas' {FormFtpprogressf},
  ftpf in 'ftpf.pas' {formFTP},
  ftpdialogf in 'ftpdialogf.pas' {FormFtpdialog};

begin
  Application.Initialize;
  Application.ShowMainForm := ParamCount > 1;
  Application.Title := 'hcFTP';
  Application.CreateForm(TformFTP, formFTP);
  if Application.ShowMainForm then begin
    Application.Run;
  end else begin
    // Hier die "neue" Methode aufrufen,
    formFTP.DoIt;
  end;
end.
Delphi-Quellcode:
procedure TformFTP.DoIt;
begin
   if ParamCount > 0 then
   begin
      if lowercase(ParamStr(1)) = '-up' then
      begin
         parameterUpload; //Lade datei Hoch
      end
      else if lowercase(ParamStr(1)) = '-down' then
      begin
         parameterDownload; //Lade date Herunter
      end
      else
      begin
         showmessage('Ungültige Parameter!');
      end;
      Close;
   end;
end;

procedure TformFTP.FormActivate(Sender: TObject);
begin
  DoIt;
end;
Ungetestet hingedaddelt.

DieDolly 27. Jun 2019 17:38

AW: Mainform verstecken
 
Zitat:

Wenn ich in meinem Projekt Application.ShowMainForm := false; im OnCreate oder im Quelltext verwende, funktioniert meine Applikation nicht ordnungsgemäss weil das OnActivate Event nicht mehr ausgeführt wird.
Ich empfehle dir, dich vom OnActivate-Event wenn irgendwie möglich zu trennen.
Mein Programm hat damals auch auf FormShow aufgebaut. Der notwendige Refactor, um all den Quark auszubessern, hat Monate gedauert.

Uwe Raabe 27. Jun 2019 22:46

AW: Mainform verstecken
 
Zitat:

Zitat von DieDolly (Beitrag 1435513)
Ich empfehle dir, dich vom OnActivate-Event wenn irgendwie möglich zu trennen.
Mein Programm hat damals auch auf FormShow aufgebaut. Der notwendige Refactor, um all den Quark auszubessern, hat Monate gedauert.

Oh, ich wurde schon mit Code konfrontiert, bei dem die haarsträubendsten Dinge im FormPaint passierten - auch schon mal Aufrufe von FormActivate oder FormResize.:roll:

Rollo62 28. Jun 2019 05:55

AW: Mainform verstecken
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1435525)
Zitat:

Zitat von DieDolly (Beitrag 1435513)
Ich empfehle dir, dich vom OnActivate-Event wenn irgendwie möglich zu trennen.
Mein Programm hat damals auch auf FormShow aufgebaut. Der notwendige Refactor, um all den Quark auszubessern, hat Monate gedauert.

Oh, ich wurde schon mit Code konfrontiert, bei dem die haarsträubendsten Dinge im FormPaint passierten - auch schon mal Aufrufe von FormActivate oder FormResize.:roll:

Warum nicht, das ist dann wie malen auf Gummi :lol:

Jasocul 28. Jun 2019 06:22

AW: Mainform verstecken
 
Ich mache diesen ganzen Zirkus mit Application.ShowMainForm gar nicht erst.
Für solche Variationen beim Programmstart sieht meine dpr-Datei so aus:
Delphi-Quellcode:
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TdtmMain, dtmMain);
  Application.CreateForm(TfrmMain, frmMain);
  if ParamCount >= 3 then
  begin
    frmMain.DoJobs;
    frmMain.Close;
  end
  else
  begin
    Application.Run;
  end;
Ich mache also bei parametergesteuertem Aufruf gar kein Application.Run. Dafür habe ich eine eigene Methode "DoJobs", die dann die automatisierten Prozesse durchführt. Dort eine Fortschrittsanzeige einzubauen sollte problemlos möglich sein. Ich hatte bisher keinen Bedarf für eine Anzeige, da das bei mir in der Regel zeitgesteuerte Prozesse sind, die keine Visualisierung erfordern. Theoretisch könnte man dafür auch ein Konsolen-Programm schreiben, aber bei Bedarf nutze ich solche Anwendungen auch mit GUI. Da ist ein Konsolenprogramm nicht mehr so praktisch.

Delphi.Narium 28. Jun 2019 08:31

AW: Mainform verstecken
 
Zitat:

Zitat von Jasocul (Beitrag 1435528)
Ich mache also bei parametergesteuertem Aufruf gar kein Application.Run. Dafür habe ich eine eigene Methode "DoJobs", die dann die automatisierten Prozesse durchführt. Dort eine Fortschrittsanzeige einzubauen sollte problemlos möglich sein. Ich hatte bisher keinen Bedarf für eine Anzeige, da das bei mir in der Regel zeitgesteuerte Prozesse sind, die keine Visualisierung erfordern. Theoretisch könnte man dafür auch ein Konsolen-Programm schreiben, aber bei Bedarf nutze ich solche Anwendungen auch mit GUI. Da ist ein Konsolenprogramm nicht mehr so praktisch.

Das ist meiner Meinung nach die einzige, sinnvolle Variante.

Und das Schöne daran: Banal einfach zu implementieren.

Setzt halt voraus, das man Progammsteuerungslogik nicht von irgendwelchen Anzeigeereignissen abhängig macht (was ich übrigens für einen sehr schlechten Programmierstil halte).

'ne Datei im FormActivate zu laden, ist keine besonders gute Idee. Was ist denn, wenn ein Formular mehrfach aktiviert wird? Wird die Datei dann mehrfach geladen? Jedes Mal, wenn man das Programm in den Vordergrund holt (und dann wieder in den Hintergrund schiebt, weil einem das Laden der Datei zu lange dauert, um danach das Programm wieder in den Vordergrund zu holen, weil das Laden endlich fertig ist, was zu einem erneuten Laden der Datei führt, weshalb man es für diese Zeit wieder in den Hintergrund schiebt, um danach das Programm wieder in den ...)?

jziersch 28. Jun 2019 08:36

AW: Mainform verstecken
 
Zitat:

Ich mache diesen ganzen Zirkus mit Application.ShowMainForm gar nicht erst.
Kann ich nur zustimmen.

Wenn Du in Delphi under 'Projekt' den Menü Eintrag "Quelltext anzeigen" wählst, siehst Du den code der beim Start eines Projektes abläuft.

Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.Run;

Das Formular welches als erstes erzeugt wird, wird dann auch angezeigt und gestartet.

In diesem Fall wäre dies "ProgressBar"

Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TProgessBar, ProgessBar);
Application.CreateForm(TForm1, Form1);
Application.Run;

welches dann den Job anstossen könnte und dann das Programm wieder beenden. Dabei kann dann das MainForm (also Form1) verwendet werden, ohne dass es angezeigt wird.
Wenn Du kein Form anzeigen willst, dann ist der "DoJobs" Ansatz perfekt.

hoika 28. Jun 2019 10:40

AW: Mainform verstecken
 
Hallo,

Zitat:

ne Datei im FormActivate zu laden, ist keine besonders gute Idee. Was ist denn, wenn ein Formular mehrfach aktiviert wird?
Das mache ich immer so.

Allerdings steht bei mir als erste Zeile
OnActivate := nil;

Int3g3r 28. Jun 2019 12:30

AW: Mainform verstecken
 
Vielen Dank für die Beispiele.

Es funktioniert nun.
Delphi-Quellcode:
// Projekt -> Quelltext Anzeigen (.dpr file)
begin
   Application.Initialize;
   Application.Title := 'FTP';
   Application.CreateForm(TformFTP, formFTP);
   if ParamCount > 0 then
      begin
         Application.ShowMainForm := false;
         formFTP.parameterStart;
         formFTP.Close;
      end
      else
      begin
         Application.Run;
      end;
end.

Delphi.Narium 28. Jun 2019 12:41

AW: Mainform verstecken
 
Zitat:

Zitat von Int3g3r (Beitrag 1435553)
Vielen Dank für die Beispiele.

Es funktioniert nun.
Delphi-Quellcode:
// Projekt -> Quelltext Anzeigen (.dpr file)
begin
   Application.Initialize;
   Application.Title := 'FTP';
   Application.CreateForm(TformFTP, formFTP);
   if ParamCount > 0 then
      begin
         Application.ShowMainForm := false;
         formFTP.parameterStart;
         formFTP.Close;
      end;
   Application.Run;
end.

Bitte anpassen:
Delphi-Quellcode:
// Projekt -> Quelltext Anzeigen (.dpr file)
begin
  Application.Initialize;
  Application.Title := 'FTP';
  Application.CreateForm(TformFTP, formFTP);
  if ParamCount > 0 then
  begin
    Application.ShowMainForm := false;
    formFTP.parameterStart;
    formFTP.Close;
  end else begin
    Application.Run; // Das muss nur ausgeführt werden,
                     // wenn kein Parameter übergeben wurde,
                     // aber bei einer Parameterübergabe bestimmt
                     // nicht mehr nach dem Schließen des Hauptformulares.
                     // Auch dann nicht, wenn es vielleicht so funktionieren mag.
  end;
end.

Int3g3r 28. Jun 2019 14:31

AW: Mainform verstecken
 
Danke für die Info. Ist nun angepasst.


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