2016-10-29 37 views
7

這是* .dpr:MainForm中試圖展示在關閉登錄表單

program Project1; 

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

{$R *.res} 
var 
    MainForm: TForm1; 

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

登錄形式:

unit Unit2; 

interface 

uses 
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, 
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; 

type 
    TForm2 = class(TForm) 
    Button1: TButton; 
    private 
    { Private declarations } 
    public 
    { Public declarations } 
    end; 

var 
    Form2: TForm2; 

procedure Login; 

implementation 

{$R *.dfm} 

Uses Unit1; 


procedure Login; 
begin 
    with TForm2.Create(nil) do 
    try 
    Application.MainForm.Hide; 
    if ShowModal = mrOK then 
     Application.MainForm.Show 
    else 
     Application.Terminate; 
    finally 
    Free; 
    end; 
end; 

end. 

主要形式:

unit Unit1; 

interface 

uses 
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, 
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; 

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

var 
    Form1: TForm1; 

implementation 

{$R *.dfm} 

Uses Unit2; 

procedure TForm1.Button1Click(Sender: TObject); 
begin 
Login; 
end; 

end. 

兩個按鈕被設置莫代爾:mrOK。 登錄表單不是自動創建的,而是可用表單的列表中。

問題是這樣的: 如果關閉登錄表單(不單擊按鈕)一秒鐘,主表單顯示並關閉(當然,應用程序也關閉)。它發生得非常快。看起來像閃爍。

如何在我關閉登錄表單時爲我的主窗體嘗試顯示自己的這一嘗試進行註冊?

此外,設置:

Application.MainFormOnTaskbar := False; 

不利於要麼...

回答

5

而不是躲在主要形式告訴你之前登錄,你應該使用初始化應用開始與主窗體隱藏。爲此,只需在創建主窗體之前添加Application.ShowMainForm := false

Application.Run在關閉登錄表單後顯示或不顯示基於Application.ShowMainForm默認值爲true的變量的主窗體。所以這將引入閃爍,因爲主窗體將在應用程序終止之前顯示。

begin 
    Application.Initialize; 
    Application.MainFormOnTaskbar := True; 
    Application.ShowMainForm := false; 
    Application.CreateForm(TForm1, Form1); 
    Login; 
    Application.Run; 
end. 
+0

登錄過程由主窗體使用,以便用戶可以登錄和註銷。他們無法直接訪問主窗體。這就是把它藏在第一位的原因。 ps建議的方式並不能消除主要表格。 – user3351050

+0

然後離開Application.MainForm.Hide在登錄過程中,只需跳過從啓動顯示主窗體。 –

+0

@ Dalija Prasnikar我不太瞭解你......主窗體在啓動時不顯示。由於登錄過程隱藏它,因此它已創建但未顯示。 – user3351050

3

把你的登錄程序進入功能和更改主代碼:

program Project1; 

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

{$R *.res} 
var 
    MainForm: TForm1; 

begin 
    Application.Initialize; 
    Application.MainFormOnTaskbar := True; 
    if Login then 
    begin 
     Application.CreateForm(TForm1, Form1); 
     Application.Run; 
    end 
    else Application.Terminate; 
end. 

我不明白,你正在檢查你的登錄表單。我認爲你應該返回TRUE(登錄通過)或FALSE作爲結果,而不是試圖與其他形式操縱。