如何获取在运行时输入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错误,所以我可能完全错了,我从未做过任何事尝试似乎工作:(
答案 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;
虽然可能不是我认为我会发布它的最好方式。