Q&A

  • 좀 도와주세요....^^
Application의 OnMessage에 달아서 쓸려고 합니다..

마우스가 콤포넌트를 떠났을때를 처리 하려니...

모르겠네여...

좀 도와 주세여...

(참고로 wndProc는 쓰지 않으려고 합니다..)

모든 동일 콤포넌트(다른 폼에도 있음)에 쓰려고 해서요...



procedure TfrmMain.OnAppMessage(var Msg: TMsg; var Handled: Boolean);

var

W: TWinControl;

begin

if (Msg.message = WM_MOUSEMOVE) then

begin

W := FindVCLWindow(Mouse.CursorPos);



if W <> nil then

begin

if (W is TDBGrid) then

begin

if (W as TDBGrid).Tag = 0 then

begin

(W as TDBGrid).Height := (W as TDBGrid).Height + 10;

(W as TDBGrid).Tag := 1;

end; //end if (W as TPanel).Tag = 1 then

end

else

begin

//?????????????????????????????

end; //end if (W is TPanel) then

end; //end if W <> nil then

end; // end if (Msg.message = WM_MOUSEMOVE) then

end;



procedure TfrmMain.FormCreate(Sender: TObject);

begin

//

Application.OnMessage := OnAppMessage;

end;

2  COMMENTS
  • Profile
    이정욱 1999.11.17 00:51
    쩝.. 그것보단 그 콘트롤을 상속받아서 이벤트 두개를 넣어주시는것이 좋을듯 하네요.



    CM_MOUSEENTER 와 CM_MOUSELEAVE 메세지를 받아서 처리하시면 훨씬 시스템에 부담을 덜 주게 되죠.. MouseMove보다 말이죠.





    진정한초보 wrote:

    > Application의 OnMessage에 달아서 쓸려고 합니다..

    > 마우스가 콤포넌트를 떠났을때를 처리 하려니...

    > 모르겠네여...

    > 좀 도와 주세여...

    > (참고로 wndProc는 쓰지 않으려고 합니다..)

    > 모든 동일 콤포넌트(다른 폼에도 있음)에 쓰려고 해서요...

    >

    > procedure TfrmMain.OnAppMessage(var Msg: TMsg; var Handled: Boolean);

    > var

    > W: TWinControl;

    > begin

    > if (Msg.message = WM_MOUSEMOVE) then

    > begin

    > W := FindVCLWindow(Mouse.CursorPos);

    >

    > if W <> nil then

    > begin

    > if (W is TDBGrid) then

    > begin

    > if (W as TDBGrid).Tag = 0 then

    > begin

    > (W as TDBGrid).Height := (W as TDBGrid).Height + 10;

    > (W as TDBGrid).Tag := 1;

    > end; //end if (W as TPanel).Tag = 1 then

    > end

    > else

    > begin

    > //?????????????????????????????

    > end; //end if (W is TPanel) then

    > end; //end if W <> nil then

    > end; // end if (Msg.message = WM_MOUSEMOVE) then

    > end;

    >

    > procedure TfrmMain.FormCreate(Sender: TObject);

    > begin

    > //

    > Application.OnMessage := OnAppMessage;

    > end;

  • Profile
    진정한초보 1999.11.17 01:13
    님의 답변 고맙습니다...

    꼭 어떤 특정 콤포넌트를 지정하는 것이 아니라 다른 콤포넌트에도 적용시키려고 합니다. 그러다보니 일괄적으로 한 곳에서 다 처리하려니...잘 안 돼네여...

    콤포너트에서 마우스가 벗어났을때 바로 직전에 마우스가 위치했던 콤포너트를 되돌리려고 합니다..



    이정욱 wrote:

    > 쩝.. 그것보단 그 콘트롤을 상속받아서 이벤트 두개를 넣어주시는것이 좋을듯 하네요.

    >

    > CM_MOUSEENTER 와 CM_MOUSELEAVE 메세지를 받아서 처리하시면 훨씬 시스템에 부담을 덜 주게 되죠.. MouseMove보다 말이죠.

    >

    >

    > 진정한초보 wrote:

    > > Application의 OnMessage에 달아서 쓸려고 합니다..

    > > 마우스가 콤포넌트를 떠났을때를 처리 하려니...

    > > 모르겠네여...

    > > 좀 도와 주세여...

    > > (참고로 wndProc는 쓰지 않으려고 합니다..)

    > > 모든 동일 콤포넌트(다른 폼에도 있음)에 쓰려고 해서요...

    > >

    > > procedure TfrmMain.OnAppMessage(var Msg: TMsg; var Handled: Boolean);

    > > var

    > > W: TWinControl;

    > > begin

    > > if (Msg.message = WM_MOUSEMOVE) then

    > > begin

    > > W := FindVCLWindow(Mouse.CursorPos);

    > >

    > > if W <> nil then

    > > begin

    > > if (W is TDBGrid) then

    > > begin

    > > if (W as TDBGrid).Tag = 0 then

    > > begin

    > > (W as TDBGrid).Height := (W as TDBGrid).Height + 10;

    > > (W as TDBGrid).Tag := 1;

    > > end; //end if (W as TPanel).Tag = 1 then

    > > end

    > > else

    > > begin

    > > //?????????????????????????????

    > > end; //end if (W is TPanel) then

    > > end; //end if W <> nil then

    > > end; // end if (Msg.message = WM_MOUSEMOVE) then

    > > end;

    > >

    > > procedure TfrmMain.FormCreate(Sender: TObject);

    > > begin

    > > //

    > > Application.OnMessage := OnAppMessage;

    > > end;