2014-04-27 3 views
2

주 양식 (Form1)을 숨기고 다른 양식 (Form2)을 표시하면 작업 표시 줄에 응용 프로그램 아이콘이 표시되지 않습니다. 자식 양식에 대한 응용 프로그램 아이콘도 있으므로이 문제를 해결할 수있는 방법이 있습니까?비 주 폼을 작업 표시 줄 단추와 연관 시키려면 어떻게해야합니까?

+0

Form2.Icon에 할당 했습니까? Form2.Icon : = Application.Icon' –

+0

작업 표시 줄에 표시되었지만 표시되지 않습니다. – user763539

+0

아이콘이 누락 된 것으로 보입니다. 작업 표시 줄 버튼이 누락 된 것처럼 보입니다. –

답변

2

다음은 소유자를 언급 할 때 VCL 개념보다는 Windows 개념을 의미합니다.

나는 그것을 이해하기 때문에 작업 표시 줄에 단추가있는 다른 양식을 얻는 방법을 묻습니다. 작업 표시 줄은이다에 톱 레벨의 윈도우를 준비하는 방법은 버튼을 가지고 :

  1. 하면 창이 표시하고, 소유되지 않은 확인 또는
  2. 는 창이 표시 확인하고 WS_EX_APPWINDOW 확장 윈도우 스타일을 가지고 .

응용 프로그램의 기본 형식 인 Form1은 소유되지 않습니다. 표시되면 작업 표시 줄에 단추가 있습니다.

응용 프로그램의 다른 양식에는 소유자가 있습니다. 따라서 작업 표시 줄에 단추가 없습니다.

다른 양식에 작업 표시 줄에 단추가 있으려면 위의 옵션 중 하나를 적용해야합니다. 여기에는 CreateParams 무시가 포함됩니다.

procedure TForm2.CreateParams(var Params: TCreateParams); 
begin 
    inherited; 
    Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW; 
end; 

는이 코드를 삽입 할 수있는 코멘트 부탁 :

type 
    TForm2 = class(TForm) 
    .... 
    protected 
    procedure CreateParams(var Params: TCreateParams); override; 
    .... 
    end; 
.... 
procedure TForm2.CreateParams(var Params: TCreateParams); 
begin 
    inherited; 
    Params.WndParent := 0; 
end; 

위는이처럼 쓸 것이다 당신에게 옵션 2의 옵션 1을 제공합니다. 음, VCL 양식은 Win32 위에 구현됩니다. 이는 VCL 폼이 최상위 윈도우로 구현된다는 것을 의미합니다. Windows는 다양한 매개 변수를 수신하는 CreateWindowEx을 호출하여 만들어집니다. Windows는 잠재적으로 폼의 수명 기간 동안 다시 만들어지며, 일부 스캐 폴딩이 필요합니다.

스카 폴딩의 일부는 Windows VCL 컨트롤이 CreateWindowEx으로 전달할 매개 변수를 제공하는 메커니즘입니다. 이러한 매개 변수는 보호 된 가상 메서드 CreateParams에 제공됩니다. 당신은 결코 그 메소드를 호출하지 않는다. 당신은 선택적으로 그것을 구현할 수있다. 프레임 워크는 CreateWindowEx에 필요한 매개 변수를 알아야 할 때이를 호출합니다.

일반적으로 VCL 속성은 CreateWindowEx에 전달 된 매개 변수 (예 : 창 스타일)에 매핑됩니다. 그러나 위에서 설명한 두 옵션 모두 해당 VCL 속성이 없습니다. 따라서 CreateParams을 구현해야합니다.

+0

이 모든 것을 구현할 곳을 알려주는 마음이 있니? – user763539

+0

양식에. CreateParams를 재정의해야합니다. 그 사실을 아십니까? –

+0

@ David Heffernan - 아니요, Dave ... 결코 그렇게하지 않았습니다 .... – user763539