- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我总体上对 TEditCut
、TEditCopy
、TEditPaste
和 TEditSelectAll
的功能感到满意,但它们不适用于任何非标准的控件。
例如,它们可能在 TEdit
或 TMemo
控件上正常工作,但在 TMembeddedWB
上则不然 — 使用它,标准操作始终被禁用无论是否选择文本,即使 TEmbeddedWB
具有 CopyToClipboard
和 SelectAll
等方法。
如何使标准操作与 TMembeddedWB
配合使用?标准操作如何确定是否应启用或禁用它们(以及在什么情况下执行此操作 - 是否在 OnUpdate
事件中)?我可以扩展标准操作来添加对无法识别的组件的支持,还是需要编写它们的替代品?
最佳答案
默认的编辑操作在 TEmbeddedWB
控件上不起作用,因为该组件不是从 TCustomEdit
派生的。 TEditSelectAll
的后代 TEditAction
只知道如何处理 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;
关于delphi - 如何使标准操作(如 TEditCopy)识别附加控件(如 TEmbeddedWB)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19210596/
我总体上对 TEditCut、TEditCopy、TEditPaste 和 TEditSelectAll 的功能感到满意,但它们不适用于任何非标准的控件。 例如,它们可能在 TEdit 或 TMemo
我是一名优秀的程序员,十分优秀!