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/)
-   -   Delphi Mainform erst anzeigen nachdem andere Form geschlossen wurde (https://www.delphipraxis.net/51513-mainform-erst-anzeigen-nachdem-andere-form-geschlossen-wurde.html)

CodeX 13. Aug 2005 23:30


Mainform erst anzeigen nachdem andere Form geschlossen wurde
 
hi!

vor dem eigentlichen programmstart soll ein kleines fenster angezeigt werden, wo der benutzer einige daten eingeben muss. wenn dann per button bestätigt wird, wird dieses geschlossen und das eigentliche programm angezeigt.

ich bekomme es aber absolut nicht hin, dass nur dieses formular (Form2) ohne das programm (Form1) angezeigt wird.
was ich unter anderem schon versucht habe:
- im objektinspektor: form1 visible auf false, form2 visible auf true
- erstellungsreihenfolge geändert, dann wird es zwar richtig angezeigt, jedoch beendet sich das programm beim schließen des abfragefensters
- bei oncreate von form1 visible auf false

das blöde ist ja, dass das anzeigen des programmfensters irgendwie erzwungen wird, da das abfragefenster zuerst angezeigt wird und dann vom programmfenster verdeckt wird.

kann mir jemand eine sichere methode nennen oder tipps geben, was ich noch alles versuchen kann?

danke.

turboPASCAL 13. Aug 2005 23:37

Re: Mainform erst anzeigen nachdem andere Form geschlossen w
 
Schau mal unter dem Link, da wurde so etwas ähnlichen schon einmal behandelt.
Minimierungsprobleme

prinz_inzide 13. Aug 2005 23:37

Re: Mainform erst anzeigen nachdem andere Form geschlossen w
 
hab so was auch ma gemacht, ich glaub ich hab einfach form1, also die mainform, genommen für die einstellungen, dann form1 gehided und form2 geshowed (form2 war dann das eigentliche progamm)..


is zwar net die beste lösung sollte aber funktioniern.

nfg

Beckman 13. Aug 2005 23:49

Re: Mainform erst anzeigen nachdem andere Form geschlossen w
 
du meinst ein splashscreen, hoffe ich.
ich hab da mal gebastelt. ich habs so geloest:

Delphi-Quellcode:
begin
  SplashForm := TSplashForm.Create(Application);
  try
    SplashForm.Show;
    Application.Initialize;
    SplashForm.Update;
    //Sleep(1000); //delay-command

    while SplashForm.ProgressBar1.Position < 100 do begin
      SplashForm.ProgressBar1.StepIt;

      if (SplashForm.ProgressBar1.Position = 10) then begin
        end;
      if (SplashForm.ProgressBar1.Position = 20) then begin
        end;
      //usw usw mit den positions um sone art loading balken zu simulieren.
      //hab da einfach aufgaben beim start aufgeteilt (war bisschen aufwendigeres zeugs..

      Sleep(20); //damits wirklich auch aufwendiger ausschaut ^^
      Application.ProcessMessages;
      end;

  if paramstr(1) = '/h' then application.ShowMainForm := False;

  Application.CreateForm(TMainForm, MainForm);
  SplashForm.Hide;
  finally
   SplashForm.Free;
  end;
  Application.Run;

CodeX 15. Aug 2005 14:47

Re: Mainform erst anzeigen nachdem andere Form geschlossen w
 
@turbopascal
ehrlich gesagt finde ich in dem thread nichts, was mir weiterhelfen könnte :S

@prinz_inzide
das habe ich mir auch schon überlegt, aber dann müsste ich einige sachen wieder abändern und außerdem bezweifle ich, dass dann nicht noch andere unerwartete probleme auf mich zukommen werden.

@beckman
so ungefähr habe ich das hier schon irgendwo mal gelesen, aber auf die art funktioniert es leider auch nicht. ich habe eine weile daran herumprobiert und habe herausgefunden, dass es so erzwungenermaen geht:
Delphi-Quellcode:
begin
Form2 := TForm2.Create(Application);
  try
  Form2.ShowModal;
  Application.Initialize;
  Form2.Update;
  Application.CreateForm(TForm1, Form1);
[...]
  finally
  Form2.Free;
  end;
  Application.Run;
das showmodal scheint das anzeigen der mainform solage zu unterdrücken, wie Form2 geöffnet ist.
naja, mehr getrickst als recht, aber was solls.

Tyrael Y. 15. Aug 2005 15:08

Re: Mainform erst anzeigen nachdem andere Form geschlossen w
 
Mach dir zwei Formulare, eine Hauptform und eine Nebenform...


Hauptform
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  THauptform = class(TForm)
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Hauptform: THauptform;

implementation

uses Unit2;

{$R *.dfm}

procedure THauptform.FormCreate(Sender: TObject);
var LNebenForm: TNebenform;
begin
  Hauptform.Hide;

  LNebenForm := TNebenform.Create(self);
  try
    if LNebenForm.ShowModal = mrOk then
      HauptForm.Show;
  finally
    LNebenform.Free;
  end;
end;

end.
Nebenform:
Delphi-Quellcode:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TNebenform = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Nebenform: TNebenform;

implementation

{$R *.dfm}

procedure TNebenform.Button1Click(Sender: TObject);
begin
 ModalResult := mrOK;
end;

end.

..den Rest kannst du an deinen eigenen Code anpassen...


Gruß

Tyrael

ManuMF 15. Aug 2005 16:39

Re: Mainform erst anzeigen nachdem andere Form geschlossen w
 
Ich hätte es so gelöst:

Delphi-Quellcode:
// HauptForm

unit HauptUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, AnfangsUnit;

type
  THauptForm = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  HauptForm: THauptForm;

implementation

{$R *.dfm}

procedure THauptForm.FormCreate(Sender: TObject);
begin
  Application.ShowMainForm := false;
  AnfangsForm.Show;
end;

end.




// Formular, das zuerst angezeigt werden soll:

unit AnfangsUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TAnfangsForm = class(TForm)
    WeiterButton: TButton;
    procedure WeiterButtonClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  AnfangsForm: TAnfangsForm;
  UserEingabe : Boolean;

implementation

{$R *.dfm}

uses HauptUnit;



procedure TAnfangsForm.WeiterButtonClick(Sender: TObject);
begin
  UserEingabe := true;
  AnfangsForm.Close;
  HauptForm.Show;
end;

proceudre TAnfangsForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if not (UserEingabe) then
    Aplication.Terminate;
end;

end.
Wichtig ist die Erwähnung in uses, bei Unit2 aber hinter implementation.
Das OnClose-Ereignis beendet die Anwendung, wenn der User nichts getan hat. Sonst bleibt das Programm ohne sichtbares Fenster trotzdem da.

Gruß,
ManuMF


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