안녕하세요!
SetWindowPos(..., HWND_TOPMOST, ....)로 폼을 최상위 윈도우로 만들었습니다.
그런데, 파일 열기창을 띄우면(TOpenDialog.Execute) 최상위던 폼이 다른 윈도우에
의해서 덮이는군요. (ALT+TAB 등으로 다른 창을 활성화하면 뒤로 들어감)
파일 열기창을 [취소]로 없애는 순간 다시 최상위 윈도우가 되는데 이런 점을 없애고
계속 최상위로 유지하려면 어떻게 해야할까요?
(미디어 플레이어 같은 프로그램은 잘 되더군요)
> 안녕하세요!
>
> SetWindowPos(..., HWND_TOPMOST, ....)로 폼을 최상위 윈도우로 만들었습니다.
>
> 그런데, 파일 열기창을 띄우면(TOpenDialog.Execute) 최상위던 폼이 다른 윈도우에
> 의해서 덮이는군요. (ALT+TAB 등으로 다른 창을 활성화하면 뒤로 들어감)
>
> 파일 열기창을 [취소]로 없애는 순간 다시 최상위 윈도우가 되는데 이런 점을 없애고
> 계속 최상위로 유지하려면 어떻게 해야할까요?
>
> (미디어 플레이어 같은 프로그램은 잘 되더군요)
예전에 테스트 해 본 코드입니다.
원하시는 대로 동작할겁니다.
즐거운 프로그래밍 하시길~
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure AppOnMessage(var Msg: TMsg; var Handled: Boolean);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.AppOnMessage(var Msg: TMsg; var Handled: Boolean);
Begin
if Msg.Message = 45057 then
SetWindowPos(Form1.handle, HWND_TOPMOST, Form1.Left, Form1.Top, Form1.Width, Form1.Height,0);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMessage := AppOnMessage;
end;
end.