Cod*_*345 4 delphi action c++builder webbrowser-control twebbrowser
我一般用的功能在线北京 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;
Run Code Online (Sandbox Code Playgroud)
或者使用ActionList(或OnActionUpdate和OnActionExecuteApplicationEvents组件)的相同事件来集中此自定义行为:
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;
Run Code Online (Sandbox Code Playgroud)