어찌해서 안된다는 말인지요..??
제 이야기는 하나의 프로그램에서 2개의 폼을 최상위로 잡았을때
둘다 다른 프로그램의 화면보다 무조건 최상위로 설정되는것을 여쭤본건데..??
쩝..
실제로 제가 이런 프로그램을 봤습니다..제 두눈으로..
너무 신기해서 ..델파이로 구현을 할려니깐.. 잘 안된느 군요...
그 폼의 Form Style은 다음과 같습니다..
WS_POPUP, WS_VISIBLE, WS_CLIPSIBLINGS, WS_CLIPCHILDREN,
WS_EX_TOPMOST, WS_EX_CONTROLPARENT
...
그 프로그램은 c로 맹글어 진듯한데..쩝..왜 델파이에서는 안되는건지..??
> 어찌해서 안된다는 말인지요..??
> 제 이야기는 하나의 프로그램에서 2개의 폼을 최상위로 잡았을때
> 둘다 다른 프로그램의 화면보다 무조건 최상위로 설정되는것을 여쭤본건데..??
> 쩝..
>
> 실제로 제가 이런 프로그램을 봤습니다..제 두눈으로..
> 너무 신기해서 ..델파이로 구현을 할려니깐.. 잘 안된느 군요...
>
> 그 폼의 Form Style은 다음과 같습니다..
> WS_POPUP, WS_VISIBLE, WS_CLIPSIBLINGS, WS_CLIPCHILDREN,
> WS_EX_TOPMOST, WS_EX_CONTROLPARENT
> ...
> 그 프로그램은 c로 맹글어 진듯한데..쩝..왜 델파이에서는 안되는건지..??
안녕하세요~ 구창민입니다.
재미있는 주제같아서 한번 해 봤습니다.
기원님이 원하시는 것이 이게 맞나 모르겠습니다.
두개의 폼이 동시에 떠서 어떤 윈도우보다
두개의 폼이 모두 항상 상위에 존재하는 것을 말씀하신거죠?
그리고, 아래분이 하신대로 작성하게 되면 다른 윈도우로 포커스가
넘어가면 최상위 상태를 유지할 수 없게 되지 않나요?
아래는 제가 급조해서 만들어 본건데,
아래 코딩을 Form1, Form2 두개의 폼에 그대로 삽입하셔서
한번 실행 해 보세요.
문제점이 있으시면 다시 질문 올려 주시구요~
일단 제가 테스트 해 보았을땐, 기원님이 원하시는 대로 잘 동작했습니다.
그럼~ 즐거운 프로그래밍 하시구요~
======== Unit1 ===================================================
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure AppOnMessage(var Msg: TMsg; var Handled: Boolean);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit2;
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMessage := AppOnMessage;
end;
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.Button1Click(Sender: TObject);
begin
Form2.Show;
end;
end.
=========================================================================
==================== Unit2 ==============================================
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm2 = class(TForm)
Button1: TButton;
procedure FormDeactivate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
uses Unit1;
{$R *.DFM}
procedure TForm2.FormDeactivate(Sender: TObject);
var H: Hwnd;
begin
H:= GetForeGroundWindow;
if H<>Form1.Handle then
begin
SetWindowPos(Form2.handle, HWND_TOPMOST, Form2.Left, Form2.Top, Form2.Width, Form2.Height,0)
end;
end;
end.
==============================================================================