기본 테마로 XP를 실행하는 Delphi 2006로 작성된 MDI 응용 프로그램이 있습니다.Delphi MDI 응용 프로그램과 MDI Children의 제목 표시 줄
각 창에 큰 XP 스타일 제목 표시 줄을 피하기 위해 MDI Children의 모양을 제어하는 방법이 있습니까?
MDIChildren
의 BorderStyle
을 bsSizeToolWin
으로 설정했지만 정상적인 양식으로 렌더링되었습니다.
기본 테마로 XP를 실행하는 Delphi 2006로 작성된 MDI 응용 프로그램이 있습니다.Delphi MDI 응용 프로그램과 MDI Children의 제목 표시 줄
각 창에 큰 XP 스타일 제목 표시 줄을 피하기 위해 MDI Children의 모양을 제어하는 방법이 있습니까?
MDIChildren
의 BorderStyle
을 bsSizeToolWin
으로 설정했지만 정상적인 양식으로 렌더링되었습니다.
모든 당신의 필요 -이 같은 과부하 절차 CreateWindowHandle :
unit CHILDWIN;
interface
uses Windows, Classes, Graphics, Forms, Controls, StdCtrls;
type
TMDIChild = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
procedure CreateWindowHandle(const Params: TCreateParams); override;
end;
implementation
{$R *.dfm}
procedure TMDIChild.CreateWindowHandle(const Params: TCreateParams);
begin
inherited CreateWindowHandle(Params);
SetWindowLong(Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
end;
end.
나는 거기 있다고 생각하지 않는다. 내 경험에 비추어 볼 때 Delphi의 MDI는 매우 엄격하게 제한되어 있으며 VCL (및 Windows API)의 구현으로 제어됩니다. 예를 들어, MDI 자식을 숨기려고하지 마십시오 (시도하면 예외가 발생하며이를 해결하기 위해 몇 가지 API를 수행해야합니다). 또는 MDI 자식의 기본 메뉴를 변경하는 방법 호스트 양식과 병합됩니다.
이러한 제한 사항을 감안할 때 왜 처음부터 특별한 제목 표시 줄을 사용하고 싶은지 다시 생각해 봐야할까요? 나는이 MDI 물건이 표준화되어 좋은 이유도 있습니다 추측 --- 사용자는 감사 수 :
(PS를! 좋은 주변 델파이 질문을보고)
감사를
onnodb 불행히도 클라이언트는 MDI와 작은 제목 표시 줄을 고집합니다.
Windows CreateParams를 재정 의하여 제목 표시 줄을 숨긴 다음 이동을위한 마우스 처리 기능이있는 간단한 패널을 만드는 방법을 알아 냈습니다. 충분히 잘 작동하므로 클라이언트가 실행하여 작업을 수행 할 수 있는지 확인하십시오.
MDI의 작동 방식은 수행하려는 작업으로 젤화되지 않습니다.
"MDI"형식이 필요한 경우 기본 제공 또는 commercial 도킹 패키지를 사용하고 도킹 설정을 사용하여 MDI 느낌을 모방 해보십시오.
내 델파이 앱에서는 주로 TFrames를 사용하여 메인 폼에 부모 역할을하고 최대화하여 클라이언트 영역을 차지합니다. 이것은 Outlook의 모습과 비슷한 것을 제공합니다. 그것은이 같은 작은 선물 간다 :
TMyForm = class(TForm)
private
FCurrentModule : TFrame;
public
property CurrentModule : TFrame read FModule write SetCurrentModule;
end;
procedure TMyForm.SetCurrentModule(ACurrentModule : TFrame);
begin
if assigned(FCurrentModule) then
FreeAndNil(FCurrentModule); // You could cache this if you wanted
FCurrentModule := ACurrentModule;
if assigned(FCurrentModule) then
begin
FCurrentModule.Parent := Self;
FCurrentModule.Align := alClient;
end;
end;
이 그것을 사용하기를, 당신은 단순히이 작업을 수행 할 수 있습니다
MyForm.CurrentModule := TSomeFrame.Create(nil);
당신이 인터페이스 (AN IModule 인터페이스 또는 뭔가를 만드는)를 사용해야 좋은 인수가 당신이 사용하는. 종종 그렇게 하긴하지만, 개념을 설명하는 데 필요한 것보다 더 복잡합니다.
HTH