我注意到 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/