我有这个应用程序,该应用程序在许多地方都可以重用一种习惯用法。有一个TPanel,上面有一些标签和按钮。目的是允许用户选择日期范围。
“&Dates”标题是一个标签,“ All Dates”部分是第二个标签。当用户单击“选择”按钮时,将弹出一个表单,为用户提供一对日期/时间控件和“确定/取消”按钮。如果用户在选择某些日期后单击“确定”,则第二个标签将更改为“从mm / dd / yyyy到mm / dd / yyyy”。
创建一个打包这些控件的组件是否合理?我一直在寻找面向组件编写者的各种资源,他们似乎并没有指出我正在考虑的问题,例如处理按钮的onclick事件。如果尝试这样做是合理的,我也将感谢您提供有关如何进行这种“复合控件”的描述的指针。
是的,是的。
要创建这样的组件,只需从例如TCustomPanel派生一个新类,然后将子组件添加为类中的字段。
像这样:
TMyDatePicker = class(TCustomPanel)
protected
FChooseButton: TButton;
FClearButton: TButton;
public
constructor Create(Owner: TComponent); override;
end;
constructor TMyDatePicker.Create(Owner: TComponent)
begin
// Inherited
Inherited;
// Create Choose Button
FChooseButton := TButton.Create(Self);
FChooseButton.Parent := Self;
FChooseButton.Align := alRight;
FChooseButton.Caption := 'Choose';
// Create Clear Button
FClearButton := TButton.Create(Self);
FClearButton.Parent := Self;
FClearButton.Align := alRight;
FClearButton.Caption := 'Clear';
end;
Run Code Online (Sandbox Code Playgroud)
要添加事件处理程序,只需将新的受保护过程添加到您的类中。
例如:
procedure TMyDatePicker.HandleChooseButtonClick(Sender: TObject)
begin
// Do whatever you want to do when the choose button is clicked
end;
Run Code Online (Sandbox Code Playgroud)
然后将事件处理程序连接到选择按钮的OnClick事件(这应该在该类的Create方法中完成):
FChooseButton.OnClick := HandleChooseButtonClick;
Run Code Online (Sandbox Code Playgroud)
当然,还有其他功能,例如微调按钮的对齐方式和添加图标。另外,您还需要创建自己的事件,例如OnDateSelected或OnDateModified。
但是,除此之外,我认为上面的示例至少可以帮助您前进。:)
是的,构建这样的组件绝对是明智的,因为它节省了大量的编码。
以下是半可视化创建它们的指南:How to Build Aggregate/Composite Components in Delphi
本质上,本文档中概述的流程是:
我认为文档错误的地方是,例如,示例组件是从 TPanel 派生的,而对我来说,使用 TCustomPanel 并仅公开您想要的方法更有意义。
但它也解释了如何添加 OnClick 处理程序等。
这种方法的优点是您可以直观地完成面板内组件的布局。
| 归档时间: |
|
| 查看次数: |
1445 次 |
| 最近记录: |