gpt4 book ai didi

delphi - 如何处理复合组件中子组件的双击?

转载 作者:行者123 更新时间:2023-12-03 14:59:53 25 4
gpt4 key购买 nike

我创建了一个基于 TCustomPanel 的新复合组件。在它上面我有两个标签和一张图像,覆盖了所有表面,请参阅此布局(下部不太重要):

Layout of the control

我的问题是如何导出这些控件的双击功能?是否可以使用新控件的双击(事件)来管理其上的子控件?

最佳答案

我认为你应该使用以下方法来做到这一点:

  1. 向复合组件添加 OnDblClick 事件。
  2. 向复合组件添加一个名为 FOnInternalDblClick 的方法(名称并不重要),该方法与 TNotifyEvent 兼容。
  3. FOnInternalDblClick内,执行复合组件的OnDblClick
  4. 在复合组件的构造函数中,将 FOnInternalDblClick 分配给您要管理事件的每个组件的 OnDblClick 事件。

示例代码:

TMyCompoundComponent = class(TCustomPanel)
protected
FOnDblClick : TNotifyEvent;
procedure FOnInternalDblClick(ASender : TObject);
public
constructor Create(AOwner : TComponent); override;
published
property OnDblClick : TNotifyEvent read FOnDblClick write FOnDblClick;
end;

constructor TMyCompoundComponent.Create(AOwner : TComponent);
begin
inherited;
//Lab1.OnDblClick := FOnInternalDblClick;
//Lab2.OnDblClick := FOnInternalDblClick;
//...
end;

procedure TMyCompoundComponent.FOnInternalDblClick(ASender : TObject);
begin
if(Assigned(FOnDblClick))
then FOnDblClick(ASender);
end;

注意:

在复合组件的 OnDblClick 事件处理程序中,ASender 参数将是内部组件(Lab1Lab2) >,Lab3...)。如果您希望将复合组件本身作为 ASender 参数接收,则可以通过传递 Self 而不是 ASender< 来更改 FOnInternalDblClick 方法。/:

procedure TMyCompoundComponent.FOnInternalDblClick(ASender : TObject);
begin
if(Assigned(FOnDblClick))
then FOnDblClick(Self);
end;

关于delphi - 如何处理复合组件中子组件的双击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40674306/

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