1

実行時に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エラーが発生したため、おそらく完全に間違っています。これまでに行ったことや試したことは何も機能していないようです:(

4

2 に答える 2

2

プロパティは、タイプのItem.Dataオブジェクト参照ですTJvCustomInspectorData。それを型キャストしてTColorナンセンスを生成します。TColorは序数型なのでAsOrdinal、文字列コードが使用するのと同じようにメソッドを使用しますAsString

ShowMessage(ColorToString(TColor(Item.Data.AsOrdinal)));

SomeColorまたは、最初にアイテムを作成したときに渡したグローバル変数から読み取ることができるはずです。

于 2013-01-03T21:48:47.427 に答える
0

私はうまくいく1つの方法を見つけました:

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;

おそらく最善の方法ではありませんが、とにかく投稿すると思いました。

于 2013-01-03T20:11:30.603 に答える