2017-09-05 4 views
-1

問題は次のとおりです。アプリケーションの復元後に追加のフォームを閉じることができないため、アプリケーションを最小限に抑えるときに追加フォームを非表示にする方法。添付されたコードは動作を示します。まず、ボタンを押して追加のフォームを開きます。 Form Style set fsStayOnTopを設定しました。その後、タイマーボタンを押してメインフォームを最小化します。タイマーの復元後、追加のものを閉じることはできません。Delphi XE2:Windowsでファイルを開いてアプリケーションを最小限にする

program MINIBUG; 

uses 
    Vcl.Forms, 
    MainForm in 'MainForm.pas' {Form7}, 
    AddForm in 'AddForm.pas' {Form8}; 

{$R *.res} 

begin 
    Application.Initialize; 
    Application.MainFormOnTaskbar := True; 
    Application.CreateForm(TForm7, Form7); 
    Application.CreateForm(TForm8, Form8); 
    Application.Run; 
end. 

unit AddForm; 

interface 

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

type 
    TForm8 = class(TForm) 
    private 
    { Private declarations } 
    public 
    { Public declarations } 
    end; 

var 
    Form8: TForm8; 

implementation 

{$R *.dfm} 

end. 

unit MainForm; 

interface 

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

type 
    TForm7 = class(TForm) 
    btnAddForm: TButton; 
    tmr1: TTimer; 
    Button1: TButton; 
    procedure btnAddFormClick(Sender: TObject); 
    procedure tmr1Timer(Sender: TObject); 
    procedure Button1Click(Sender: TObject); 
    private 
    { Private declarations } 
    public 
    { Public declarations } 
    end; 

var 
    Form7: TForm7; 


implementation 

{$R *.dfm} 

procedure TForm7.btnAddFormClick(Sender: TObject); 
begin 
    Form8.Show; 
end; 

procedure TForm7.Button1Click(Sender: TObject); 
begin 
    tmr1.Enabled := True; 
end; 

procedure TForm7.tmr1Timer(Sender: TObject); 
begin 
    tmr1.Enabled := False; 
    form8.Close; 
    Application.Restore; 
end; 

end. 
+1

私は、あなたの問題解決に必要な情報を十分に提供していないのではないかと心配しています。あなたが残した最も重要な情報は、アプリケーションが開くように設定されているファイルをダブルクリックした後に実行されるコードです。私はこの問題が実際にこのコードにあるかもしれないと推測しています。 – SilverWarior

+2

[mcve] –

+0

を入力してください。提示されたコードで説明した問題を再現できるようになりました。私はこれが実際の状況を模倣していることを理解しています。したがって、OnTimerイベントの 'form8.Close;'が複製している実際の動作を説明してください。もしその行がコメントアウトされていれば問題ありません。 –

答えて

0

テストケースエラー?

あなたのテストケースが正しいかどうかわかりません。タイマーイベントが関連するファイルをダブルクリックする行為をシミュレートした場合、それはなぜForm8.Closeアクションにつながりますか?あなたは、問題の一部は、関連するファイルが開かれたときに追加のフォームが(メインフォームと共に)表示されたため、タイマーを開始するときに隠蔽(Form.Hide)が行われ、OnTimerでフォームが表示されます( `Form.Show)。

回答

はとにかく、アプリケーションがを最小限に抑えたときに追加のフォームを非表示にするには、どのようにあなたの実際の質問、への答えは、あなたが特別な何かをする必要がないことです。追加のフォームは、何もせずに隠されます。あなたには、いくつかの理由にしたいか、追加のフォームを隠す積極的にしなければならない場合

、メインフォームにTApplicationEventsコンポーネントを追加することによってそれを行う、とForm8.Showを呼び出すためにForm8.HideOnRestoreイベントを呼び出すためにそのOnMinimizeイベントを使用します。

はまた、あなたがForm.CloseForm.Hideを選択した場合は差がある、ところで

を検討してください。 CloseはCloseQuery()に電話をかける手順に進みますが、HideはVisibleプロパティをFalseに設定するだけです。

関連する問題