Owned 폼 만들기

From YYpBD's MediaWiki

Jump to: navigation, search
[팁] owned 폼 만들기  
내려받기 : owned.zip (169256 바이트)

최상위폼(fsStayOnTop) 속성은 꽤나 자주 필요하다. 그런데 부작용이 따른다.
개인적으로 제일 싫은점은, 디버깅시에도 IDE 위를 꿋꿋하게 가리고 있어서..열받게 한다는 것이다....--;
사실 윈도우는 '모든 프로그램 위로' 가 아니고, '자기 윈도우중에서만 위로' 나오게 할 수 있다. 정확히 말하면, '자기 부모폼 뒤로는 가지않도록' 만들 수 있는데..이것이 바로 owned 폼이다.

* 만드는법

type
TOwnedForm = class(TForm)
protected
   FParentHandle: THandle;
public
   procedure CreateParams(var Params: TCreateParams); override;
   constructor Create(Owner: TComponent; ParentHandle: THandle); reintroduce; overload;
end;

constructor TOwnedForm.Create(Owner: TComponent; ParentHandle: THandle);
begin
FParentHandle := ParentHandle;
inherited Create(Owner);
end;

procedure TOwnedForm.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.WndParent := FParentHandle;
end;
----
자..아주 간단하다...폼의 CreateParams 를 override 하여, Params.WndParent 에 밑에 깔릴놈의 핸들을 넣어주면 끝이다...
일일이 CreateParams 를 override 할 수 도 있지만, 더 편하게 사용하고 싶으면..
새 폼을 만들때마다..

TForm2 = class(TForm)

부분을

TForm2 = class(TOwnedForm)

으로 쓱 바꾸고..기본 생성자 대신 새로 만든 생성자만 불러주는 식으로 사용해도 된다..
어찌됐든 이렇게 하면 부모 폼뒤로는 숨지 않으나, 디버그창은 가리지 않는 윈도우를  만들 수 있다. 툴윈도우나 미리보기 창 같은 조그만놈들을 stayontop 으로 만들지 않아도 된다!...........웬지...썰렁-_-;;

그럼 도움이 되길 바랍니다~ :)

맞춤검색