我想要给TScrollBar增加MouseUp事件,通过同名控件派生来实现。但不知为啥没有起作用,请各位大牛给看看哪错了。编译环境:D6, OS:XP SP3代码如下:unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, ExtCtrls;type
TScrollBar = class(StdCtrls.TScrollBar)
private
FOnMouseUp: TMouseEvent;
protected
// 重载一个方法
procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer); override;
public
// 新定义一个事件
property On_MouseUp: TMouseEvent read FOnMouseUp write FOnMouseUp;
end; TForm1 = class(TForm)
sb: TScrollBar;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure OnSBMouseUp(Sender: TObject;Button: TMouseButton; Shift: TShiftState;
X, Y: Integer);
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}{ TScrollBar }
procedure TScrollBar.MouseUp(Button: TMouseButton; Shift: TShiftState; X,
Y: Integer);
begin
inherited;
if Assigned(FOnMouseUp) then
FOnMouseUp(Self, Button, Shift, X, Y);
end;{ TForm1 }
procedure TForm1.OnSBMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ShowMessage('2');//没执行到
end;procedure TForm1.FormCreate(Sender: TObject);
begin
// 新增加的事件在运行期动态关联
sb.On_MouseUp := OnSBMouseUp;
end;end.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, ExtCtrls;type
TScrollBar = class(StdCtrls.TScrollBar)
private
FOnMouseUp: TMouseEvent;
protected
// 重载一个方法
procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer); override;
public
// 新定义一个事件
property On_MouseUp: TMouseEvent read FOnMouseUp write FOnMouseUp;
end; TForm1 = class(TForm)
sb: TScrollBar;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure OnSBMouseUp(Sender: TObject;Button: TMouseButton; Shift: TShiftState;
X, Y: Integer);
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}{ TScrollBar }
procedure TScrollBar.MouseUp(Button: TMouseButton; Shift: TShiftState; X,
Y: Integer);
begin
inherited;
if Assigned(FOnMouseUp) then
FOnMouseUp(Self, Button, Shift, X, Y);
end;{ TForm1 }
procedure TForm1.OnSBMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ShowMessage('2');//没执行到
end;procedure TForm1.FormCreate(Sender: TObject);
begin
// 新增加的事件在运行期动态关联
sb.On_MouseUp := OnSBMouseUp;
end;end.
解决方案 »
- 无聊啊。看看这有什么区别??
- image如何加载自身ICON?
- 在线等待 插入Datetime类型
- fastreport中列宽固定,根据字段内容多少自动调整行高?
- string如何转成single并且输出值正确
- 请教个Delphi检验码问题
- delphi两台打印机切换打印的问题,十万火急!!!!!!!!!!
- 求个delphi 提取网页数据和发送数据到网页 的demo
- 有个软件要求用sql server2000做,不过我打算用access做,不过要求数据库要加密,就是不能直接用access2000打开,最好能加密成二进制或是其他
- dbgrideh数据导出的问题
- 分解一个字符串,头疼了,怎么都不对
- dll封装的窗体里不能用TApplicationEvents?
这个只能捕获右键弹起,左键弹起的加procedure WMLButtonUp(var Message: TWMLButtonUp); message WM_LBUTTONUP;消息
TScrollBar = class(StdCtrls.TScrollBar)
TForm1 = class(TForm)
sb: TScrollBar;form里的控件,是ide加的,是有dfm和pas对应的,pas里知道有一个更近的同名类替换标准的类,但是dfm还不知道此控件的属性其实已经不是标准控件的属性了吧
sb: TScrollBar;完全代码创建会不会好一点?我想给Ttreenode增加一个DataString:String;的属性,现在是通过修改标准unit实现的
这个是可行的. 只是楼主的控件是否响应这个代码的问题.因为有个例子是PAGECONTROL加双击的事件,是跟这代码差不多,只是多了一个构造函数,重写的构造函数里增了了双击的style. 即 controlstyle. 楼主可以试试从这方面着手.
begin
inherited;
ControlStyle := [csClickEvents,csDoubleClicks];
end;另外TForm1.FormCreate的构造函数也做了修改procedure TForm1.FormCreate(Sender: TObject);
begin
// 新增加的事件在运行期动态关联
ScrollBar1 := TScrollBar.Create(Self);
ScrollBar1.On_MouseUp := OnSBMouseUp;
end;不是非得注册组件才行吧,本质上还是函数指针啊。感觉应该还是代码的问题,实在不会了,高手看看吧。