当前位置:主页>销售管理软件> 列表

139分!调试通过,立即给分!谁能给TImage增加OnM

财务软件版1楼: TImage没有OnMouseEnter和OnMouseLeave事件,我现在亟需在Extctrls.pas里面增加这两个事件,能给出完整代码者,调试通过,立即加 139 分!!
要求:直接在Extctrls.pas里面增加这两个事件。
不好意思,只有 139 分了,全部奉上,谢谢各位!!

2楼: 还需要把改过的Extctrls.pas编译一下才管用吧 如记账软件哪个好

3楼: 我是新手,请问是不是Extctrls.pas改了并且保存以后,点击运行时就自动编译呀?

4楼: 也太容易拿了吧,这分?

5楼: 改了pas,单独编译成.dcu(打开工程时,只打开这个pas文件,编译一下),覆盖到有Extctrls.duc的目录

6楼: 不过还是不建议直接在 Delphi 的原有单元上修改,最好还是自己新建一个单元,然后继承 TImage 就行了。如果要加,请在 TImage 类声明中添加
Private段
FOnMouseEnterEvent: TNotifyEvent;
FOnMouseLeaveEvent: TNotifyEvent;
protected段
procedure CM_MouseEnter(var Msg: TMessage); message CM_MOUSEENTER;
procedure CM_MouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;
published段


property OnMouseEnterEvent: TNotifyEvent read FOnMouseEnterEvent write
FOnMouseEnterEvent;
property OnMouseLeaveEvent: TNotifyEvent read FOnMouseLeaveEvent write
FOnMouseLeaveEvent;
property UnCheckPicture: TPicture read FUnCheckPicture write
SetUnCheckPicture;

实现代码段:
procedure TImage.CM_MouseEnter(var Msg: TMessage);
begin
inherited;
if not (csDesigning in ComponentState) then
begin
if Assigned(FEnterPicture) then Picture.Assign(FEnterPicture);
if Assigned(FOnMouseEnterEvent) then FOnMouseEnterEvent(Self);
end;
end;

procedure TImage.CM_MouseLeave(var Msg: TMessage);
begin
inherited;
if not (csDesigning in ComponentState) then
begin
if FChecked then
Picture.Assign(FCheckPicture)
else
Picture.Assign(FUnCheckPicture);
if Assigned(FOnMouseLeaveEvent) then FOnMouseLeaveEvent(Self);
end;
end;

财务软件版7楼: 参考:
http://www.delphibbs.com/delphibbs/dispq.asp?LID=3215497

8楼: Sorry,那代码中的
property UnCheckPicture: TPicture read FUnCheckPicture write
SetUnCheckPicture;
不要,对你没有用处,我从我自己编写的组件中剪切下的代码,这个属性对你没有用处。

9楼: 请教各位,“自己新建一个单元,然后继承 TImage”,这样做的话,新建一个Image是不是必须写代码由新建的类Create,而不是直接拖放Image控件就行?

10楼: 可以在单元中加入注册组件的代码,这样就可以从控件面板上拖进来了。
interface节
procedure Register;

implementation节
procedure Register;
begin
RegisterComponents(''控件面板页名'', [你自己的组件名]);
//例如:
RegisterComponents(''MyComponent'', [TnrImage]);
end;

11楼: 再次Sorry,实现代码段再去掉一点代码,多余的,你会编译不通过的。应该如下:
实现代码段:
procedure TImage.CM_MouseEnter(var Msg: TMessage);
begin
inherited;
if not (csDesigning in ComponentState) then
if Assigned(FOnMouseEnterEvent) then FOnMouseEnterEvent(Self);
end;

procedure TImage.CM_MouseLeave(var Msg: TMessage);
begin
inherited;


if not (csDesigning in ComponentState) then
if Assigned(FOnMouseLeaveEvent) then FOnMouseLeaveEvent(Self);
end;

12楼: 我现在的单元如下,运行可以通过,但是控件面板上找不到TXXImage(控件名),怎么回事?这种自定义的控件在面板上用什么图标?
还有,ymjy说的单独编译.pas成.dcu我弄不明白,“打开工程时,只打开这个pas文件”,怎么打开?请再具体指点一下,谢谢!

// TXImage.pas
unit TXImage;
interface
uses
Windows, Messages, SysUtils, Classes, Controls, StdCtrls, Forms, Dialogs,
Buttons, ComCtrls, Graphics, ExtCtrls;
type
TXXImage = class(TImage)
private
FOnMouseEnterEvent: TNotifyEvent;
FOnMouseLeaveEvent: TNotifyEvent;
protected
procedure CM_MouseEnter(var Msg: TMessage); message CM_MOUSEENTER;
procedure CM_MouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;
public
published
property OnMouseEnterEvent: TNotifyEvent read FOnMouseEnterEvent write
FOnMouseEnterEvent;
property OnMouseLeaveEvent: TNotifyEvent read FOnMouseLeaveEvent write


FOnMouseLeaveEvent;
end;
procedure Register;

implementation
procedure Register;
begin
RegisterComponents(''Standard'', [TXXImage]);
end;
procedure TXXImage.CM_MouseEnter(var Msg: TMessage);
begin
inherited;
if not (csDesigning in ComponentState) then
if Assigned(FOnMouseEnterEvent) then FOnMouseEnterEvent(Self);
end;
procedure TXXImage.CM_MouseLeave(var Msg: TMessage);
begin
inherited;
if not (csDesigning in ComponentState) then
if Assigned(FOnMouseLeaveEvent) then FOnMouseLeaveEvent(Self);
end;
end. 如管理软件开发

13楼: 点击菜单:file-->open project,文件类型为*.pas,选择文件打开,然后编译

财务软件版14楼: 成功啦!谢谢各位!!兑现!!
再次求教,怎样把自己画的图标加上去,哪里有自己开发控件的资料介绍??