1

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

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

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 组件的错误还是已知问题?

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

4

1 回答 1

3

通过查看 JvInspector 代码,当没有项目编辑器(只读?)并且项目是对象属性时会触发 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;

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

于 2013-01-06T16:07:55.210 回答