이미지로 마우스가 이미지 위에 올라갔을때
그림이 변하게 하고
그 영역을 벗어났을때 다시 원래 그림으로 만들려고 하는데.
onMounseMove이벤트로 영역에 들어오는것을 잡고 나서
벗어났을때의 처리를 어떻게 해야 할지 모르겠더라고요..
실행했을때 좌측예는
소속된 페널에다가도 move이벤트를 주어
원래 이미지로 변환하는걸로 하면 되기는 되는데
마우스를 빠르게 움직이면 이벤트를 인식하지 못합니다.
완전한 방법이 아닌것 같아서요..
우측 예는
이미지를 클릭했을때
위치가 변했다가 1정도 후에 이미지를 원래 위치에 되돌리려 하는데
타이머를 사용한다는건 좀 우스운것 같고
(그리고 타이머가 시스템 시간으로 작동하기 때문에 1초라는 시간이 정확치 않더라고요 어떨땐 1초마다 어떨땐 0.1초로 동작합니다.. ㅡㅡ;;)
sleep가 어떻게 동작하는 건지 잘 몰라거 그런건지..
이미지가 눈에 보이지 않는 순간같이 빨리 변화되어 버리더군요..
예제한번 봐주셨으면하고 부탁드립니다..
감사합니다.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
Button1: TButton;
Button2: TButton;
Image1: TImage;
Image2: TImage;
Image3: TImage;
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Image3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Image1.Visible := false;
Image2.Visible := true;
end;
procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Image1.Visible := true;
Image2.Visible := false;
end;
procedure TForm1.Image3Click(Sender: TObject);
begin
Image3.Left := Image3.Left + 5;
Image3.Top := Image3.Top + 5;
sleep(1000);
Image3.Left := Image3.Left - 5;
Image3.Top := Image3.Top - 5;
end;
end.
if ((mouse.CursorPos.X > left) And (mouse.CursorPos.X < (labcaption.Width + left)) And
(mouse.CursorPos.Y > Top) And (mouse.CursorPos.Y <(labcaption.Height + Top))) then
begin
if labcaption.Color = clSilver then
begin
labcaption.Color := clActiveCaption;
labcaption.Font.Color := clRed;
end;
end
else
begin
if labcaption.Color = clActiveCaption then
begin
labcaption.Color := clSilver;
labcaption.Font.Color := clBlack;
end;
end;
위에 소스는 스레드 안에 있는거에요..
더 좋은방법이 있으면 답변좀 저도 궁금하네요..
일단은 잘 작동 되네요.