Q&A

  • 파일 열기 창이 뜨면 최상위 윈도우가 원래대로?
안녕하세요!



SetWindowPos(..., HWND_TOPMOST, ....)로 폼을 최상위 윈도우로 만들었습니다.



그런데, 파일 열기창을 띄우면(TOpenDialog.Execute) 최상위던 폼이 다른 윈도우에

의해서 덮이는군요. (ALT+TAB 등으로 다른 창을 활성화하면 뒤로 들어감)



파일 열기창을 [취소]로 없애는 순간 다시 최상위 윈도우가 되는데 이런 점을 없애고

계속 최상위로 유지하려면 어떻게 해야할까요?



(미디어 플레이어 같은 프로그램은 잘 되더군요)

1  COMMENTS
  • Profile
    구창민 2000.12.02 02:18
    최의종 wrote:

    > 안녕하세요!

    >

    > 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.