绝地检查员没有开火活动?

时间:2013-01-06 13:07:54

标签: delphi delphi-xe jedi

我注意到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组件的错误或已知问题吗?

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

1 个答案:

答案 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”属性或其他没有编辑器控件的属性。