导航
  • 主页
  • 语言基础/算法/系统设计
  • 数据库相关
  • 图形处理/多媒体
  • 网络通信/分布式开发
  • VCL组件开发及应用
  • Windows SDK/API
  • 问答

WM_MouseMove的问题.急,在线等

zykj_2000 2003-03-28 04:37:13
学与控件
我制做了一个button继承与TButton
我想实现在鼠标经过这个按钮时,按钮上的capton的颜色变为蓝色
我使用下面的办法
procedure TRButton.WMMouseMove(var Message: TWMMOUSEMOVE);
var
wh:TSize;
begin
FCanvas.Pen.Color:=clBlue;
FCanvas.Font:=Self.Font;
wh:=FCanvas.TextExtent(Caption);
FCanvas.TextOut((Width div 2)-(wh.cx div 2)-1,(height div 2)-(wh.cy div 2)-1,caption);
end;

但是运行出错,说Canvas does no allow drawing
why
...全文
74 点赞 收藏 6
写回复
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
FrameSniper 2003-03-29
GZ
回复
shao528 2003-03-29
直接控制Canvas要小心点,其实要实现这样的功能,是不能这样做的,你可以截取以下两个消息:
CM_MOUSEENTER :鼠标进入消息。
CM_MOUSELEAVE :鼠标退出消息。


下面是一个能接收鼠标进入和移出消息的SpeedButton,增加了两个事件:鼠标进入和移出事件。

例子:

TMouseEnterEvent=Procedure(Sender:TObject) of Object; //定义事件类型
TMouseExitEvent=procedure(Sender:TObject) of Object;
TMSpeedButton = class(TSpeedButton)
private
FMOuseEnter: TMouseEnterEvent;
FMouseExit: TMouseExitEvent;
protected
procedure MouseEnterMsg(Var Message:TMessage);message CM_MOUSEENTER;//消息驱动函数
procedure MouseExitMsg(Var Message:TMessage);message CM_MOUSELEAVE;
procedure Loaded;override;
public
{ Public declarations }
published
property OnMouseEnter: TMouseEnterEvent read FMouseEnter write FMouseEnter;
property OnMouseExit: TMouseExitEvent read FMouseExit write FMouseExit;
end;

procedure Register;

implementation
uses DpkRes;

procedure Register;
begin
RegisterComponents('simple', [TMSpeedButton]);
end;

procedure TMspeedButton.MouseEnterMsg(Var Message:TMessage);
begin
inherited;
if Assigned(FMouseEnter) then
FMouseEnter(self);
end;

procedure TMspeedButton.MOuseExitMsg(Var Message:TMessage);
begin
inherited;
if Assigned(FmouseExit) then //判断用户是否写入事件代码,如果有则执行
FMOuseExit(self);
end;

end;
回复
短歌如风 2003-03-29
应该用TControlCanvas:
FCanvas := TControlCanvas;
FCanvas.Control := self;
回复
citytramper 2003-03-29
TRButton.Create创建时
fcanvas.Handle:=getdc(self.Handle);
回复
zykj_2000 2003-03-28
在TRButton.Create时,创建的
回复
xzgyb 2003-03-28
一般的按钮直接改好像不会变色
问一句你的FCanvas是啥时候创建
回复
发动态
发帖子
Delphi
创建于2007-08-02

4809

社区成员

Delphi 开发及应用
申请成为版主
社区公告
暂无公告