2017-09-05 14 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.Close 또는 Form.Hide을 선택하면 차이가 BTW,

을 고려하십시오. 닫기는 CloseQuery()을 호출하는 절차를 거치며 Hide는 단순히 Visible 속성을 False으로 설정합니다.