TJvInspector - 获取属性值?

时间:2013-01-03 19:04:16

标签: delphi jedi

如何获取在运行时输入JvInspector的值?

\..\jvcl\examples\JvInspector中的演示通过编写类似的内容(从演示中提取)来演示如何添加字符串:

var
  FirstName: string;

implementation

procedure TfrmInspector.AddVarious;
var
  InspCat: TJvInspectorCustomCategoryItem;
begin
  TJvInspectorVarData.New(InspCat, 'First', TypeInfo(string), @FirstName).DisplayName := 'Copy of first name';
end;

我想添加一个TColor属性,所以我这样做了:

var
  FirstName: string;
  SomeColor: TColor;

implementation

procedure TfrmInspector.AddVarious;
var
  InspCat: TJvInspectorCustomCategoryItem;
begin
  TJvInspectorVarData.New(InspCat, 'First', TypeInfo(string), @FirstName).DisplayName := 'Copy of first name';
  TJvInspectorVarData.New(InspCat, 'SomeColor', TypeInfo(TColor), @SomeColor;
end;

这显示正确,但在检查器的下拉列表中选择新颜色时,我似乎无法获得SomeColor的更改值。

我试过了:

procedure TfrmInspector.JvInspector1ItemValueChanged(Sender: TObject;
  Item: TJvCustomInspectorItem);
begin
  if (Item.Data <> nil) and (CompareText(Item.Data.Name, 'FirstName') = 0) then
    ShowMessage(Item.Data.AsString) //< works
  else if (Item.Data <> nil) and (CompareText(Item.Data.Name, 'SomeColor') = 0) then
    ShowMessage(ColorToString(TColor(Item.Data))); //< does not return correct value
end;

我通常不会使用Jedi组件,但我认为我会给他们另一次机会,但似乎没有什么文档,我在Wiki页面上查看OnItemValueChanged事件:http://wiki.delphi-jedi.org/wiki/JVCL_Help:TJvInspector.OnItemValueChanged但几乎没有任何信息或帮助。

我确信我没有尝试ColorToString(TColor(Item.Data))我需要使用Item.Data.AsVariant,但我可能错了,当我尝试时遇到AV错误,所以我可能完全错了,我从未做过任何事尝试似乎工作:(

1 个答案:

答案 0 :(得分:0)

我发现了一种有效的方法:

procedure TfrmInspector.JvInspector1ItemValueChanged(Sender: TObject;
  Item: TJvCustomInspectorItem);
var
  sVal: string;
begin
  if (Item.Data <> nil) then
  begin
    sVal := Item.DisplayValue;

    if (CompareText(Item.Data.Name, 'FirstName') = 0) then
      ShowMessage('FirstName Value: ' + sVal)
    else if (CompareText(Item.Data.Name, 'SomeColor') = 0) then
      ShowMessage('SomeColor Value: ' + sVal); //<can use StringToColor now
  end;
end;

虽然可能不是我认为我会发布它的最好方式。