请问怎样做图片翻转 就是在image控件里开始显示一幅图,鼠标放上显示另一张图当鼠标离开这个控件后又恢复原来的图image控件只有onmousemove事件,没有当鼠标离开的事件我该怎么做? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 //这是利用时间器来完成的代码~~//也可以重载控件利用CM_MOUSEENTER和CM_MOUSELEAVE消息~~//.... private { Private declarations } FMouseMove: Boolean;//....implementation//....procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);begin if FMouseMove then Exit; FMouseMove := True; Timer1.Interval := 200; Timer1.Enabled := True; Image1.Picture := Image2.Picture;end;procedure TForm1.Timer1Timer(Sender: TObject);begin if PtInRect(Image1.BoundsRect, ScreenToClient(Mouse.CursorPos)) then Exit; Image1.Picture := Image3.Picture; TTimer(Sender).Enabled := False; FMouseMove := False;end;//.... image周围有什么控件?鼠标离开后肯定要移到它的周围控件上去!不可能说跳着走而不经过周围控件,所以你可以在其它控件的OnMouseMove事件中写代码,这不就是Image的OnMouseLeave事件吗?呵呵 type TImageEx =class(TImage) private FOnMouseEnter: TNotifyEvent; FOnMouseLeave: TNotifyEvent; procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER; procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE; published property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter; property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave; end;procedure TImageEx.CMMouseEnter(var Message: TMessage);begin inherited; if Assigned(FOnMouseEnter) then FOnMouseEnter(Self);end;procedure TImageEx.CMMouseLeave(var Message: TMessage);begin inherited; if Assigned(FOnMouseLeave) then FOnMouseLeave(Self);end; 我比较同意楼上wooden954的看法,既简单又使用,函数重栽,太麻烦了,而且程序的运行效率也成问题。 非常谢谢 zswang(伴水清清)可以实现了ehom(?!) 你的代码是什么意思,能解释下吗?我看不大明白我会另外给你分的,谢谢 "函数重栽,太麻烦了,而且程序的运行效率也成问题。"???晕~~~如果你在VCL中看看这两个自定义消息处理的实质也许就不会有效率低的结论,反而是利用OnMouseMove这种方法在实际开发中问题多多,难道在周围所有控件的OnMouseMove中写代码?不光是周围,还有万一鼠标移的太快的话怎么办,看来是所有控件的OnMouseMove中都要写代码,就完全没有问题了吗?自己试试~~~没别的意思,就是从TImgae派生一个新类,也就是自己写个VCL控件~~~看不明白,找些Delphi的基础书籍补充些基础知识都21世纪了,大家不都是面向对象开发吗?派生一个新类也麻烦吗?是不是要回到面向过程开发的年代~~~ 紧急求教,在线等待 数据库字段numeric(9,2),如果为0的话,我用Delphi的DBGridEh显示该字段,却为空 求游戏编程的资料 delphi能编写B/S的系统吗? adotable+dbgrid,怎么让它按某字段排序显示? 如何解决鼠标滚动问题? 如何将Dbcheckbox植入Dbgrid中? 如何建立多进程呢?请教,在线等! dbgrideh问题 如何在delphi程序里调用vc写的exe执行文件。 如何判断dbgrid中某个字段的值是否为空? !!!兄弟们帮帮忙啊,我想做一个像Delphi一样的窗体设计器,能在运行时设计窗体。一定送分送钱 ^_^(在线等待)。!!!
//也可以重载控件利用CM_MOUSEENTER和CM_MOUSELEAVE消息~~//....
private
{ Private declarations }
FMouseMove: Boolean;
//....implementation//....procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if FMouseMove then Exit;
FMouseMove := True;
Timer1.Interval := 200;
Timer1.Enabled := True;
Image1.Picture := Image2.Picture;
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
if PtInRect(Image1.BoundsRect, ScreenToClient(Mouse.CursorPos)) then Exit;
Image1.Picture := Image3.Picture;
TTimer(Sender).Enabled := False;
FMouseMove := False;
end;//....
TImageEx =class(TImage)
private
FOnMouseEnter: TNotifyEvent;
FOnMouseLeave: TNotifyEvent;
procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
published
property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
end;procedure TImageEx.CMMouseEnter(var Message: TMessage);
begin
inherited;
if Assigned(FOnMouseEnter) then
FOnMouseEnter(Self);
end;procedure TImageEx.CMMouseLeave(var Message: TMessage);
begin
inherited;
if Assigned(FOnMouseLeave) then
FOnMouseLeave(Self);
end;
可以实现了
ehom(?!)
你的代码是什么意思,能解释下吗?我看不大明白
我会另外给你分的,谢谢