From YYpBD's MediaWiki
[팁] 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 으로 만들지 않아도 된다!...........웬지...썰렁-_-;;
그럼 도움이 되길 바랍니다~ :)