第一个问题:
在一个窗体单元中,自定义一个函数,如何使函数中可以在控件的属性编辑器的事件栏可以控测到。
如:我自定义一个函数,用来处理窗体上所有的TEdit的键盘事件,定义完后,我想选中窗体中所有的TEdit类控件,在属性编辑器中选择指定自定义的函数。
请问这种类型的函数该如何定义,遵循什么规则,最好能说明原理。
第二个问题:
关于as操作符,与强制类型转换,请给一个比较详细的说明,各自的用途用法。
谢谢。
在一个窗体单元中,自定义一个函数,如何使函数中可以在控件的属性编辑器的事件栏可以控测到。
如:我自定义一个函数,用来处理窗体上所有的TEdit的键盘事件,定义完后,我想选中窗体中所有的TEdit类控件,在属性编辑器中选择指定自定义的函数。
请问这种类型的函数该如何定义,遵循什么规则,最好能说明原理。
第二个问题:
关于as操作符,与强制类型转换,请给一个比较详细的说明,各自的用途用法。
谢谢。
解决方案 »
- 求cxgrid中职员信息的demo
- 多线程中查询数据的问题
- 六位数的QQ免费申请
- 注册的MSCOMM32.OCX在有的计算机上提示“设计时期不可用”????
- 用DELPHI怎么样编写程序可以将繁体变为简体?
- 数据备份问题-急!!!!!!!
- 怎样关掉Form窗体标题栏上的按钮?
- 请问哪里有数据库的教程
- 请问那有好的源码下载站点?
- 用TTable控件连接数据库时,为什么总要出现DatabaseLogin对话框?要求输入用用户名和密码,在程序运行时也是这样,怎么样才能不出现这个对话框呢?因为我的数据库不用用户名和密码,谢谢!!
- 公路段一般都有什么软件?继续灌水~继续灌水~继续灌水~继续灌水~继续灌水~继续灌水~继续灌水~继续灌水~继续灌水~继续灌水~继续
- 多用户版软件都可能遇到的问题
例如:tedit的事件,可以这样
在private前面定义这样的过程,有个条件,必须放在private的前面,也就是说必须是发布属性的。
这种过程都必须和原有的参数一样
问题2、用途一样,只是语法不同,一个是var as type,一个是type(var),影响中好像(type)var也可以得。
很多书都说没有区别,总感觉不可能,原来vcl类里面要想在ide界面里面使用,就必须放在发布属性里面。
不过放在public里面(公共属性)在程序中动态赋值也可以使用,只是不能再ide界面里面选择。
delphi驱动各个事件是靠参数来判断的,如果参数一样,就都可以作为一个使用。
首先每一类事件都具备每一类事件的各种参数,这个是windows决定的,然后当确认需要某一个事件的时候,你只要把相同参数的事件写好,动态或者在设计同时静态选择就可以了。
关于as操作符,与强制类型转换,请给一个比较详细的说明,各自的用途用法。
------------------------------------------------------------------------
As转换必须是兼容的类,比如从父类和子类之间的转换,一般在函数参数时用得较
下面是一个例子:看一下解释大概就能明白了:
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;type
TForm1 = class(TForm)
BitBtn1: TBitBtn;
Button1: TButton;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure BtnClick(Sender: TObject);//这个是自定义的事件处理函数
end;var
Form1: TForm1;implementation{$R *.dfm}
procedure TForm1.BtnClick(Sender: TObject);//则开始Sender为TOBject类
begin
if Sender is TButton then//如果Sender是TButton类,
//用As强制转换为TButton,并将该按钮设为不可用
(Sender as TButton).Enabled:=False else
//否则用As强制转换为TBitBtn,并将该按钮设为不可用
(Sender as TBitBtn).Enabled:=False
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
//窗体创建事件中,指Button1和BitBtn的Onclick事件指针指向BtnClick过程。
Button1.OnClick:=BtnClick;
BitBtn1.OnClick:=BtnClick;
end;end.
程序运行后,点BitBtn,则BitBtn不可用
点Button,则Button不可用。
大概明白了吧。
关于as操作符,与强制类型转换,请给一个比较详细的说明,各自的用途用法。
------------------------------------------------------------------------
As转换必须是兼容的类,比如从父类和子类之间的转换,一般在函数参数时用得较
下面是一个例子:看一下解释大概就能明白了:
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;type
TForm1 = class(TForm)
BitBtn1: TBitBtn;
Button1: TButton;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure BtnClick(Sender: TObject);//这个是自定义的事件处理函数
end;var
Form1: TForm1;implementation{$R *.dfm}
procedure TForm1.BtnClick(Sender: TObject);//则开始Sender为TOBject类
begin
if Sender is TButton then//如果Sender是TButton类,
//用As强制转换为TButton,并将该按钮设为不可用
(Sender as TButton).Enabled:=False else
//否则用As强制转换为TBitBtn,并将该按钮设为不可用
(Sender as TBitBtn).Enabled:=False
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
//窗体创建事件中,指Button1和BitBtn的Onclick事件指针指向BtnClick过程。
Button1.OnClick:=BtnClick;
BitBtn1.OnClick:=BtnClick;
end;end.
程序运行后,点BitBtn,则BitBtn不可用
点Button,则Button不可用。
大概明白了吧。
as是将一个对象转换为它的父类的类型。例如:
Sender: TObject;
...
(Sender as TButton).Enabled := False;但如果Sender对象的类不是TButton或者不是从TButton继承的,则上面的语句
将引发Exception。
也就是说as会动态检查对象的类型是否匹配。所以如果你不希望弄出异常来,最好这样写:if Sender is TButton then
TButton(Sender).Enabled := False;注意第二行没用as,这是因为第一行已经用is测试过Sender是否为一个TButton。
强制转换是不需代价的,但as是有代价的。不知说清楚了没有?