AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Mainform verstecken

Ein Thema von the_seed · begonnen am 31. Jul 2004 · letzter Beitrag vom 28. Jun 2019
Antwort Antwort
Seite 2 von 3     12 3   
the_seed

Registriert seit: 31. Dez 2003
213 Beiträge
 
#11

Re: Mainform verstecken

  Alt 1. Aug 2004, 00:08
Zitat von Meflin:
im übrigen sollte auch application.showmainform := true die mainform wieder sichtbar machen. bei mir tut es das zumindest...
sollte
bei D7 EE aufjedenfall nicht, mit de befehl Application.Mainform.Show;
gehts aber THX
  Mit Zitat antworten Zitat
Int3g3r

Registriert seit: 28. Nov 2018
Ort: Schweiz
118 Beiträge
 
Delphi 10.3 Rio
 
#12

AW: Mainform verstecken

  Alt 27. Jun 2019, 16:26
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 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)) = '-upthen
      begin
         parameterUpload; //Lade datei Hoch
         Close; // Close kann nicht im onCreate Event ausgeführt werden.
      end
      else if lowercase(ParamStr(1)) = '-downthen
      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

Geändert von Int3g3r (27. Jun 2019 um 16:41 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
1.721 Beiträge
 
Delphi 7 Professional
 
#13

AW: Mainform verstecken

  Alt 27. Jun 2019, 16:42
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)) = '-upthen
      begin
         parameterUpload; //Lade datei Hoch
      end
      else if lowercase(ParamStr(1)) = '-downthen
      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.
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
1.901 Beiträge
 
#14

AW: Mainform verstecken

  Alt 27. Jun 2019, 18:38
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.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
8.378 Beiträge
 
Delphi 10.4 Sydney
 
#15

AW: Mainform verstecken

  Alt 27. Jun 2019, 23:46
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.119 Beiträge
 
Delphi 10.4 Sydney
 
#16

AW: Mainform verstecken

  Alt 28. Jun 2019, 06:55
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.
Warum nicht, das ist dann wie malen auf Gummi
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.186 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#17

AW: Mainform verstecken

  Alt 28. Jun 2019, 07:22
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.
Peter
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
1.721 Beiträge
 
Delphi 7 Professional
 
#18

AW: Mainform verstecken

  Alt 28. Jun 2019, 09:31
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 ...)?
  Mit Zitat antworten Zitat
jziersch

Registriert seit: 9. Okt 2003
Ort: München
180 Beiträge
 
Delphi 10.4 Sydney
 
#19

AW: Mainform verstecken

  Alt 28. Jun 2019, 09:36
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.
WPCubed GmbH
Komponenten für Delphi:
WPTools, wPDF, WPViewPDF

Geändert von jziersch (28. Jun 2019 um 09:41 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
7.929 Beiträge
 
Delphi XE4 Professional
 
#20

AW: Mainform verstecken

  Alt 28. Jun 2019, 11:40
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;
Heiko
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 +2. Es ist jetzt 09:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf