안녕하세요.. 고수 여러분... ^^
다름이 아니고 이미지에 마우스가 올라가면 그림이 바뀌고 마우스가 그곳을 벗어나면
다시 원래에 이미지가 오는 것을 구현하려고 합니다..
OnMouseMove 로 구현을 했더니 바뀌긴 바뀌는데 원 상태로는 돌아오질 않는군요..
또 밑에 글을 읽어보니 mouseenter 와 mouseleave 같은 것이 있는데 정확히 어떻게 사용하는지를 모르겠어요....
제발 고수여러분의 답변을 학수 고대합니다...
더와 주십시요.... ^^
> 안녕하세요.. 고수 여러분... ^^
>
> 다름이 아니고 이미지에 마우스가 올라가면 그림이 바뀌고 마우스가 그곳을 벗어나면
> 다시 원래에 이미지가 오는 것을 구현하려고 합니다..
>
> OnMouseMove 로 구현을 했더니 바뀌긴 바뀌는데 원 상태로는 돌아오질 않는군요..
>
> 또 밑에 글을 읽어보니 mouseenter 와 mouseleave 같은 것이 있는데 정확히 어떻게 사용하는지를 모르겠어요....
>
> 제발 고수여러분의 답변을 학수 고대합니다...
>
> 더와 주십시요.... ^^
---------------------------------------------------------------------------------
CM_MouseEnter와 CM_MouseLeave는 Controls.pas 에 정의 되어 있는 컨트롤메시지 입니다.
Timage 클래스는 TGraphicControl을 상속하고 TGraphicControl 클래스는 TControl을 상속한 거지요...
이렇게 조상을 거슬러 올라가면 CM_MouseLeave와 같은 메시지가 정의 되어있으니
이를 써먹자는 취지에서 컴포넌트의 메소드로 추가하여 정의 하는식의 팁이 아래와 같이 올라와 있습니다만...
요놈의 것이 타이머를 이용하는것 보다 정확하지 못하다는 흉문이 돌기에...
그 아래에 좋은 방법을 퍼 왔으니 참고 하세요...
procedure CMMouseEnter(var Message: TMessage); message CM_MouseEnter;
procedure CMMouseLeave(var Message: TMessage); message CM_MouseLeave;
procedure TMyComponent.CMMouseEnter(var Message: TMessage);
begin
// 컴포넌트 영역에 들어왔을때
end;
procedure TMyComponent.CMMouseLeave(var Message: TMessage);
begin
// 컴포넌트 영역에서 나갔을때
end;
-----------------------------------------------------------
델코의 민성기님이 올리신 메시지 후킹 강좌중 일부를 빼내서 아주 쬐끔 수정해서 올려 드립니다. 하하
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Image1: TImage;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
ImageOrgWndProc : TWndMethod;
procedure ImageWndProc( var Msg : TMessage );
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.ImageWndProc( var Msg : TMessage );
begin
case Msg.Msg of
CM_MOUSELEAVE:
begin
image1.Picture.LoadFromFile('C:아이콘1.ICO');
end;
CM_MOUSEENTER:
begin
image1.Picture.LoadFromFile('C:아이콘2.ICO');
end;
end;
ImageOrgWndProc(Msg);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ImageOrgWndProc := Image1.WindowProc;
Image1.WindowProc := ImageWndProc;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Image1.WindowProc := ImageOrgWndProc;
end;
end.
그럼...