我注意到TJvInspector有一个OnItemDoubleClicked
事件,我认为这正是我需要的,因为我需要检测鼠标是否双击Color Item属性(我想显示我自己的Color Form到允许选择自定义颜色等。)
但我甚至无法举起事件,例如:
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组件的错误或已知问题吗?
我通常不会使用它们,而且似乎一直遇到麻烦。
答案 0 :(得分:3)
通过查看JvInspector代码,当没有项目编辑器(readonly?)并且该项目是对象属性时,会触发OnItemDoubleClicked。所以这绝对是错误的事件(它的名字有误导性)。
问题是双击事件不是针对JvInspector控件而是针对当前编辑器控件(TEdit,TComboBox,...)。所以JvInspector看不到双击。要解决此问题,您需要挂钩编辑器的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;
这不适用于“Set”属性或其他没有编辑器控件的属性。