Delphi 如何使标准操作(如TEditCopy)识别其他控件(如TEmbeddedWB)?
我通常对Delphi 如何使标准操作(如TEditCopy)识别其他控件(如TEmbeddedWB)?,delphi,webbrowser-control,action,c++builder,twebbrowser,Delphi,Webbrowser Control,Action,C++builder,Twebbrowser,我通常对TEditCut、TEditCopy、TEditPaste和TEditSelectAll的功能感到满意,但它们不适用于任何非标准控件 例如,它们可以在TEdit或TMemo控件上正常工作,但不能在TEmbeddedWB上正常工作-使用它,无论文本是否被选中,标准操作始终处于禁用状态,即使TEmbeddedWB具有CopyToClipboard和SelectAll等方法 如何使标准操作与TEmbeddedWB一起工作?标准操作如何确定应启用还是禁用它们(以及在什么情况下启用-是否在OnUp
TEditCut
、TEditCopy
、TEditPaste
和TEditSelectAll
的功能感到满意,但它们不适用于任何非标准控件
例如,它们可以在TEdit
或TMemo
控件上正常工作,但不能在TEmbeddedWB
上正常工作-使用它,无论文本是否被选中,标准操作始终处于禁用状态,即使TEmbeddedWB
具有CopyToClipboard
和SelectAll
等方法
如何使标准操作与
TEmbeddedWB
一起工作?标准操作如何确定应启用还是禁用它们(以及在什么情况下启用-是否在OnUpdate
事件中)?我是否可以扩展标准操作以添加对无法识别组件的支持,或者我是否需要编写它们的替换项?默认编辑操作在TEmbeddedWB
控件上不起作用,因为该组件不是从TCustomEdit
派生的TEditAction
,它是TEditSelectAll的后代,只知道如何处理TCustomEdits
使用操作的OnUpdate
和OnExecute
事件覆盖此行为。请注意,默认行为将被忽略,因此请手动实现。下面是一个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组件的OnActionUpdate
和OnActionExecute
)来集中此自定义行为:
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;
谢谢,这看起来正是我需要处理的。