gpt4 book ai didi

delphi - 如何使标准操作(如 TEditCopy)识别附加控件(如 TEmbeddedWB)?

转载 作者:行者123 更新时间:2023-12-03 15:25:19 24 4
gpt4 key购买 nike

我总体上对 TEditCutTEditCopyTEditPasteTEditSelectAll 的功能感到满意,但它们不适用于任何非标准的控件。

例如,它们可能在 TEditTMemo 控件上正常工作,但在 TMembeddedWB 上则不然 — 使用它,标准操作始终被禁用无论是否选择文本,即使 TEmbeddedWB 具有 CopyToClipboardSelectAll 等方法。

如何使标准操作与 TMembeddedWB 配合使用?标准操作如何确定是否应启用或禁用它们(以及在什么情况下执行此操作 - 是否在 OnUpdate 事件中)?我可以扩展标准操作来添加对无法识别的组件的支持,还是需要编写它们的替代品?

最佳答案

默认的编辑操作在 TEmbeddedWB 控件上不起作用,因为该组件不是从 TCustomEdit 派生的。 TEditSelectAll 的后代 TEditAction 只知道如何处理 TCustomEdits

使用操作的 OnUpdateOnExecute 事件来覆盖此行为。请注意,默认行为将被忽略,因此请手动实现。下面是 TEditSelectAll 操作的示例。

procedure TForm1.EditSelectAll1Update(Sender: TObject);
begin
EditSelectAll1.Enabled := (Screen.ActiveControl is TEmbeddedWB) or
EditSelectAll1.HandlesTarget(ActiveControl)
end;

procedure TForm1.EditSelectAll1Execute(Sender: TObject);
begin
if ActiveControl is TEmbeddedWB then
TEmbeddedWB(Screen.ActiveControl).SelectAll
else
EditSelectAll1.ExecuteTarget(Screen.ActiveControl);
end;

或者使用 ActionList 的相同事件(或 ApplicationEvents 组件的 OnActionUpdateOnActionExecute)来集中此自定义行为:

procedure TForm1.ActionList1Update(Action: TBasicAction; var Handled: Boolean);
begin
if Action is TEditAction then
begin
TCustomAction(Action).Enabled := (Screen.ActiveControl is TEmbeddedWB) or
Action.HandlesTarget(Screen.ActiveControl);
Handled := True;
end;
end;

procedure TForm1.ActionList1Execute(Action: TBasicAction; var Handled: Boolean);
begin
if (Action is TEditSelectAll) and (Screen.ActiveControl is TEmbeddedWB) then
begin
TEmbeddedWB(Screen.ActiveControl).SelectAll;
Handled := True;
end;
end;

关于delphi - 如何使标准操作(如 TEditCopy)识别附加控件(如 TEmbeddedWB)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19210596/

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