delphi – 如何使标准操作(如TEditCopy)识别其他控件(如TEmbedde
发布时间:2020-12-15 09:26:02 所属栏目:大数据 来源:网络整理
导读:我普遍对TEditCut,TEditCopy,TEditPaste和TEditSelectAll的功能感到满意,除了它们不适用于任何非标准的控件. 例如,它们可以在TEdit或TMemo控件上正常工作,但不能在TEmbeddedWB上工作 – 使用它,无论是否选择了文本,标准操作总是被禁用,即使TEmbeddedWB具有Co
我普遍对TEditCut,TEditCopy,TEditPaste和TEditSelectAll的功能感到满意,除了它们不适用于任何非标准的控件.
例如,它们可以在TEdit或TMemo控件上正常工作,但不能在TEmbeddedWB上工作 – 使用它,无论是否选择了文本,标准操作总是被禁用,即使TEmbeddedWB具有CopyToClipboard和SelectAll等方法. 如何使标准操作与TEmbeddedWB一起使用?标准操作如何确定是应该启用还是禁用它们(以及它们在什么情况下执行它 – 是否在OnUpdate事件中)?我是否可以扩展标准操作以添加对无法识别的组件的支持,还是需要编写替换组件? 解决方法
默认的Edit操作不适用于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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |