gpt4 book ai didi

delphi - 创建复合控件是否明智?

转载 作者:行者123 更新时间:2023-12-03 15:39:21 26 4
gpt4 key购买 nike

我有这个应用程序,它在很多地方重用了某种惯用语。有一个TPanel,上面有一些标签和按钮。目的是允许用户选择日期范围。

Here's an example of one such panel at runtime

“&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;

要添加事件处理程序,只需向您的类添加新的 protected 过程即可。

例如:

procedure TMyDatePicker.HandleChooseButtonClick(Sender: TObject)
begin
// Do whatever you want to do when the choose button is clicked
end;

然后将事件处理程序连接到选择按钮的 OnClick 事件(这应该在类的 Create 方法中完成):

FChooseButton.OnClick := HandleChooseButtonClick;

当然,还有更多的内容,例如微调按钮的对齐方式和添加图标。此外,您还需要创建自己的事件,例如 OnDateSelected 或 OnDateModified。

但是,除此之外,我认为上面的例子至少应该能让你继续下去。 :)

关于delphi - 创建复合控件是否明智?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10902749/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com