delphi - 绝地督察没有触发事件?

标签 delphi delphi-xe jedi

我注意到 TJvInspector 有一个 OnItemDoubleClicked 事件,我认为这正是我所需要的,因为我需要检测鼠标是否双击了 Color Item 属性(我想显示我自己的颜色表单允许选择自定义颜色等)。

但我什至根本无法触发事件,例如:

procedure TfrmInspector.JvInspector1ItemDoubleClicked(Sender: TObject;
  Item: TJvCustomInspectorItem);
begin
  if Item is TJvInspectorColorItem then
    ShowMessage('you double clicked on a color property')
  else
    ShowMessage('not a color property');
end;

如果我将光标设置在该事件中的任何位置并使用 F4 运行,或者甚至在那里设置断点,那么在运行时显然不会触发消息框,也不会弹出。

这是 Jedi Inspector 组件的错误或已知问题吗?

我通常不会使用它们,而且似乎总是遇到麻烦。

最佳答案

通过查看 JvInspector 代码,当没有项目编辑器(只读?)并且该项目是对象属性时,会触发 OnItemDoubleClicked。所以这绝对是一个错误的事件(而且它的名称具有误导性)。

问题是双击事件不是针对 JvInspector 控件,而是针对当前编辑器控件(TEdit、TComboBox,...)。所以 JvInspector 看不到双击。要解决此问题,您需要 Hook 编辑器的 OnDblClick 事件。为此,JvInspector 有 OnBeforeEdit 事件。

procedure TForm1.JvInspector1BeforeEdit(Sender: TObject; Item: TJvCustomInspectorItem;
  Edit: TCustomEdit);
begin
  TEdit(Edit).OnDblClick := ItemDblClick;
end;

procedure TForm1.ItemDblClick(Sender: TObject);
begin
  ShowMessage(JvInspector1.Selected.Name);
  Abort; // don't change the value by the default double click handler
end;

这不适用于“设置”属性或没有编辑器控件的其他属性。

关于delphi - 绝地督察没有触发事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14182460/

相关文章:

Delphi:需要时提示 UAC 提升

delphi - Delphi 窗体在显示时总是会触发 OnResize 吗?

delphi - 编码 "UTF-8"的字符 0xc286 在 "WIN1252"中没有等效项 ....在使用 iconv postgres 转换时恢复崩溃

delphi - TJvCsvDataSet 和过滤器

delphi - 低级键盘 Hook 问题: Keyboard state losed when application is not focused (Delphi)

multithreading - 在线程之间同步/发送数据

delphi - 如何使 TFrame(及其上的所有内容)部分透明?

Delphi Graphics32 在图层上绘制透明椭圆

Delphi - 应用程序的 .bpl 插件 - 加载 > 1 个插件时出现问题

python - Emacs Jedi 自动完成无法在 init 上工作