刚学delphi,写的一个四态按钮。大家帮忙看看问题

lwsxln 2011-10-01 10:35:30

unit ImageButton;

interface

uses
SysUtils, Classes, Controls, ExtCtrls, pngimage, Dialogs, Graphics, Messages;

type
TImageButton = class(TImage)
private
{ Private declarations }
FPictureHot: TPicture;
FPictureDown: TPicture;
FPictureDisable: TPicture;
FPictureNormal: TPicture;
Fisinbutton: Boolean;
procedure SetHotPicture(Value: TPicture);
procedure SetDownPicture(Value: TPicture);
procedure SetDisPicture(Value: TPicture);
procedure SetNormalPicture(Value: TPicture);

protected
{ Protected declarations }
procedure CMMouseEnter(var msg: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var msg: TMessage); message CM_MOUSELEAVE;
procedure CMLbuttonDown(var msg: TMessage); message WM_LBUTTONDOWN;
procedure CMLuttonUp(var msg: TMessage); message WM_LBUTTONUP;
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
{ Published declarations }
property PictureHot: TPicture read FPictureHot write SetHotPicture;
property PictureDown: TPicture read FPictureDown write SetDownPicture;
property PictureDisable: TPicture read FPictureDisable write SetDisPicture;
property PictureNormal: TPicture read FPictureNormal write SetNormalPicture;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Standard', [TImageButton]);
end;
destructor TImageButton.Destroy;
begin
FPictureNormal.Free;
FPictureHot.Free;
FPictureDown.Free;
PictureDisable.Free;
inherited;
end;

constructor TImageButton.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FPictureDown := TPicture.Create;
FPictureHot := TPicture.Create;
FPictureDisable := TPicture.Create;
FPictureNormal := TPicture.Create;
Invalidate;
end;

procedure TImageButton.CMMouseEnter(var msg: TMessage);
begin
if Fisinbutton = False then
begin
Picture.Assign(FPictureHot);
Fisinbutton:=True;
end;

end;

procedure TImageButton.CMMouseLeave(var msg: TMessage);
begin
Picture.Assign(FPictureNormal);
Fisinbutton:=False;
end;

procedure TImageButton.CMLbuttonDown(var msg: TMessage);
begin
Picture.Assign(FPictureDown);
end;

procedure TImageButton.CMLuttonUp(var msg: TMessage);
begin
Picture.Assign(FPictureNormal);
end;

procedure TImageButton.SetNormalPicture(Value: TPicture);
begin
Picture.Assign(Value);
FPictureNormal.Assign(Value);
end;

procedure TImageButton.SetHotPicture(Value: TPicture);
begin
FPictureHot.Assign(Value);
end;

procedure TImageButton.SetDownPicture(Value: TPicture);
begin
FPictureDown.Assign(Value);
end;

procedure TImageButton.SetDisPicture(Value: TPicture);
begin
FPictureDisable.Assign(Value);
end;

end.



刚刚学delphi,写了这个4态按钮。
有些问题。当快速在按钮上单击鼠标时,此时在窗口任意地方单击鼠标左键这个按钮都会有响应。这个怎么解决?
还有就是CM开头的消息,和WM开头的消息。有什么不同?
...全文
217 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
rainychan2009 2011-10-08
  • 打赏
  • 举报
回复
参考LS
liuyashao66 2011-10-08
  • 打赏
  • 举报
回复
处理消息时,一般是先inherited,然后再做自己的处理,所以应该

procedure TImageButton.CMMouseEnter(var msg: TMessage);
begin
inherited;
if Fisinbutton = False then
begin
Picture.Assign(FPictureHot);
Fisinbutton:=True;
end;

end;

procedure TImageButton.CMMouseLeave(var msg: TMessage);
begin
inherited;
Picture.Assign(FPictureNormal);
Fisinbutton:=False;
end;

procedure TImageButton.CMLbuttonDown(var msg: TMessage);
begin
inherited;
Picture.Assign(FPictureDown);
end;

procedure TImageButton.CMLuttonUp(var msg: TMessage);
begin
inherited;
Picture.Assign(FPictureNormal);
end;
lwsxln 2011-10-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 warrially 的回复:]
不要用消息了, 你本来就是从 TIMAGE 继承下来的,为什么不写到事件里面去。
[/Quote]

不懂事件如何写。能不能帮忙改一下?有一点例子代码就行。
爱蹄子的羊头 2011-10-07
  • 打赏
  • 举报
回复
不要用消息了, 你本来就是从 TIMAGE 继承下来的,为什么不写到事件里面去。
lwsxln 2011-10-06
  • 打赏
  • 举报
回复
来个人看看,顶
lwsxln 2011-10-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 s11ss 的回复:]
CM应当是Component Message吧?
WM应当是Window Message吧?

前者是Delphi的消息机制定义的,后者是Windows的消息。
[/Quote]

当快速在按钮上单击鼠标时,此时在窗口任意地方单击鼠标左键这个按钮都会有响应。这个怎么解决?
s11ss 2011-10-01
  • 打赏
  • 举报
回复
CM应当是Component Message吧?
WM应当是Window Message吧?

前者是Delphi的消息机制定义的,后者是Windows的消息。

5,928

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧