目前,多个窗体里都是用到了一个Panle,该Panle里放置了按钮,输入框等等。
为了代码的可重用性,想把这个panel封装成一个自定义组件。
请问应该怎么做?
本人属于Delphi新手,没定制过可视化组件,请重点将一下步骤。谢谢。
为了代码的可重用性,想把这个panel封装成一个自定义组件。
请问应该怎么做?
本人属于Delphi新手,没定制过可视化组件,请重点将一下步骤。谢谢。
解决方案 »
- WindowMediaPlayer在分線程里無法播放
- 一简单问题,在线等答案
- 请问这是什么 报表 控件 做的(图) ??????
- 请问在richedit 中如何 用 代码 添加 有 颜色的文字 ??????????????
- SQL Server 的查询分析器用上面的SQL语句,可以实现,但在delphi上面的语句就报错
- 急,如何得到在image中看到数据库中的图象
- 你们的delphi都这样吗?!?!?!?!
- 如何编写activexform时候实现类似ado.recordset这样的属性
- 窗口处理
- 在默认的情况下,不要查询时的SQL沙漏光标应如何设置?
- 公司封了网络,路由设置白名单,有公用上网机,如何自己也能上?
- 请帮忙设计一个算法,谢谢!!!!!!!!!
然后在你的工程中,需要这个模块的地方动态生成
4楼的方法,我用不了。因为项目已经进行了一半,那样移植起来很麻烦。
正在试验用Frame的方法。
有一个窗体,放置了一个这种Frame类的控件,此时该控件的OnClick需要调用到窗体的某个函数search。
问题是:该窗体如何往被调用的Frame类的控件里传入search函数。
初写delphi,不知道有没有函数指针的概念。
以前用Python定制控件时非常爽,可以直接将函数当参数往控件里传。
然后实现ThisOnClick:
procedure ThisOnClick(Sender: TObject);
begin
Search();
end;
有个窗体Form1使用了我定制的Frame类型控件FramePageNum,里面有很多个按钮。当然那些按钮的触发函数都是在该FramePageNum类里实现的,尽管它们的实现各种各样,但它们有一个共同点,都需要调用窗体的一个函数Form1.search。
不能用楼上说的重载方式,比如按钮“GO”的触发函数:
procedure TFramePageNum.btnQueryGoClick(Sender: TObject);
begin
......
//Search();
......
end;
search前后还有大量的代码,是用来控制FramePageNum里各个控件的行为的(如改变按钮上的页码),因为search的位置在中间,没办法重载。
所以,我希望是把Form1.Search过程传入FramePageNum中。
譬如说:TSearchEvent = procedure (keyWord:String) of TObject;
TYourFrame=...
...
procedure Button1Click(Sender: TObject); //Frame的按钮点击处理函数
public
OnSearch: TSearchEvent;
...
end;
...
TYourFrame.Button1Click(Sender: TObject);
begin
//前期处理的代码
if Assigned(OnSearch) then
begin
OnSearch(XXX);
end;
//后续处理代码
end ;
而在主Form中则需要设置Frame中的事件句柄。TYourForm=class...
...
yourFrame: TYourFrame;
...
procedure search(keyWord: String);
end;
...
//这个是主窗体的方法
TYourForm.search(keyWord: String);
begin
...
end ;TYourForm.onCreate(sender: TObject);
begin
yourFrame.onSearch:=self.Search; //将此方法绑定到frame中。
end ;
自从2楼那里得到用Frame做的提示后,我就想用函数指针的方法来做,可惜知识浅薄,在声明函数指针是缺少了“of TObject”,导致编译不过去。昨天下班后,根据编译信息,google了一下,加上了"of TObject",成功实现了当初的目的。
今天早上本来想结贴的,一直忙着移植了。看到你热心的回复,我很高兴。
结贴散分。