如何将几个过程集成一个? 没分了,下次补上,大家来看看也行...比如,我在一个窗体的DBGrid中设定好了标题排序,TAB键左右移,隔行分色,鼠标中键激活等方法...如果想在别的窗体中应用这些方法,难道只有一个一个窗体的加吗?可不可以在公共文件(比如:pub.pas)文件中写成一个函数,然后调用? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以啊把DBGrid做为参数就行了 楼上,怎么搞,比如:一个是:procedure TMainForm.DBGrid1KeyPress(Sender: TObject; var Key: Char);begin .../省略end;一个又是:procedure TMainForm.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);begin ..../省略end 拿第一个为例在你的公共单元里实现procedure TMainForm.MyKeyPress(Sender: TObject; var Key: Char)beginend;然后procedure SetDBGridFunc(var g:TDBGrid){ g.KeyPress:=MyKeyPress;}就是类似这样的一些操作调用的时候SetDBGridFunc(DBGrid1);大概就是这个样子啦 使用chijingde(AD) 说的方法:DBGrid1KeyPress(Sender: TObject; var Key: Char) 这些都是通知函数,您可以在公共单元中定义一些公用的通知函数。接着在您的类实现中就可以加入如下初始化的代码:procedure MyClass.InitEventHandler;begin OnClick:=xxx.myClickEvent; ....end;但是要注意一下几点:1、事件函数赋值的时候,右值必须是“对象方法指针”,也就是说在定义我们自己的xxx.myClickEvent时,也要创建一个类并把对象方法(如myClickEvent)申明在类中。2、右值对象方法的参数必须与左值对象方法指针的参数一致,如TNotifyEvent事件只需要Sender,而TMouseEvent则需要更多,您可以先在OI中双击要覆盖的时间,看看需要哪些参数。我的实现方法是:1、定义一个TEventHandler类,这个类中声明并实现公用的对象方法/事件,如CommonOnClick、CommonOnCreate等等。2、将chijingde(AD)提到的SetDBGridFunc过程放在公共单元文件中(TEventHandler也可以实现在公共单元文件中),然后在SetDBGridFunc中实例化TEventHandler对象,再将eventHandler对象的对象方法(事件函数)赋值给您的DBGrid对象。3、在您的各个相似的DBGrid初始化代码中,加入SetDBGridFunc(Self)的调用,可以做到事件共享了。我是这样实现的,如果有不合理的地方请各位指教。^_^ 重写DBGrid,,让其响应WM_KeyPress等按键消息,并重载DefaultDrawColumnCell,然后当一个控件用就好了 delphi+ACCESS 问题 DBGrid显示ACCESS的单精度类型字段时产生随机小数 ActiveX控件的联机帮助在什么地方啊? 模模糊糊,各位高手救命啊!!!!(2天内必结贴) 怎么样才能在StatusBar上面作图 大家听一首乱搞笑的歌... 求救各位大侠,怎样打开浏览一个网页?急急急!! Delphi 本身单元文件的问题 两个form……………………………… 请问各位如何检验一个字符串是否是时间类型的? 微软的speech sdk5.1开发包,安装好后如何在DELPHI中添加SAPI.DLL控件。 急,急,如何在delphi里面运行.bat的文件
怎么搞,比如:一个是:
procedure TMainForm.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
.../省略
end;一个又是:
procedure TMainForm.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
..../省略
end
begin
end;
然后procedure SetDBGridFunc(var g:TDBGrid)
{
g.KeyPress:=MyKeyPress;
}
就是类似这样的一些操作调用的时候SetDBGridFunc(DBGrid1);
大概就是这个样子啦
DBGrid1KeyPress(Sender: TObject; var Key: Char) 这些都是通知函数,您可以在公共单元中定义一些公用的通知函数。接着在您的类实现中就可以加入如下初始化的代码:
procedure MyClass.InitEventHandler;
begin
OnClick:=xxx.myClickEvent;
....
end;但是要注意一下几点:
1、事件函数赋值的时候,右值必须是“对象方法指针”,也就是说在定义我们自己的xxx.myClickEvent时,也要创建一个类并把对象方法(如myClickEvent)申明在类中。
2、右值对象方法的参数必须与左值对象方法指针的参数一致,如TNotifyEvent事件只需要Sender,而TMouseEvent则需要更多,您可以先在OI中双击要覆盖的时间,看看需要哪些参数。我的实现方法是:
1、定义一个TEventHandler类,这个类中声明并实现公用的对象方法/事件,如CommonOnClick、CommonOnCreate等等。
2、将chijingde(AD)提到的SetDBGridFunc过程放在公共单元文件中(TEventHandler也可以实现在公共单元文件中),然后在SetDBGridFunc中实例化TEventHandler对象,再将eventHandler对象的对象方法(事件函数)赋值给您的DBGrid对象。
3、在您的各个相似的DBGrid初始化代码中,加入SetDBGridFunc(Self)的调用,可以做到事件共享了。我是这样实现的,如果有不合理的地方请各位指教。^_^