C++BuilderでTJvInspectorを使ってみた

C++BuilderでJVCLのTJvInspectorを使ってみました。

TJvInspectorはDelphi/C++Builderのオブジェクトインスペクタのように、オブジェクトのプロパティを表示するコンポーネントです。

※TJvInspectorはJVCLのコンポーネントです。JVCLをインストールすると使用できるようになります。

■コンポーネントのプロパティを表示する

TJvInspectorにコンポーネントを登録するには、AddComponentメソッドを使用します。

AddComponentの第1引数にはコンポーネント、第2引数には表示名、第3引数はカテゴリーの状態(trueならノードを展開して表示)です。

JvInspector1->Clear();
JvInspector1->AddComponent(Edit1, "Edit1のプロパティ", true);

TJvInspectorでプロパティの値を編集すると、即座にコンポーネントの状態が更新されます。


Widthプロパティを編集すると、Edit1のWidthが変更された。

複数のコンポーネントを登録することもできます。

JvInspector1->Clear();
JvInspector1->AddComponent(Edit1, "Edit1のプロパティ", false);
JvInspector1->AddComponent(Panel1, "Panel1のプロパティ", false);

また、TJvInspectorCustomCategoryItemとTJvInspectorPropDataを使って、表示するコンポーネントを登録することもできます。

TJvInspectorCustomCategoryItem* InspCat = new TJvInspectorCustomCategoryItem(JvInspector1->Root, NULL);
InspCat->DisplayName = "Edit1のプロパティ";
TJvInspectorPropData::New(InspCat, Edit1);
InspCat->Expanded = true; //ノードを開く

■表示するプロパティを指定する

TJvInspectorPropData::Newメソッドの第3引数で表示するプロパティを指定することができます。

TJvInspectorCustomCategoryItem* InspCat = new TJvInspectorCustomCategoryItem(JvInspector1->Root, NULL);
InspCat->DisplayName = "Edit1のプロパティ";
TJvInspectorPropData::New(InspCat, Edit1, "Text"); //Textプロパティを表示する

TJvInspectorPropData::NewByNamesを使うと、表示するプロパティを配列で指定できます。
第3引数がプロパティ名の配列、第4引数が配列の要素数になります。

TJvInspectorCustomCategoryItem* InspCat = new TJvInspectorCustomCategoryItem(JvInspector1->Root, NULL);
InspCat->DisplayName = "Edit1のプロパティ";
UnicodeString names[] = { "Height", "Text", "Width" };
TJvInspectorPropData::NewByNames(InspCat, Edit1, names, 3);

実行時型情報(RTTI)を使って、プロパティを指定することもできます。

Typinfo::PPropInfoを引数にする例

TJvInspectorCustomCategoryItem* InspCat = new TJvInspectorCustomCategoryItem(JvInspector1->Root, NULL);
InspCat->DisplayName = "Edit1のプロパティ";
TJvInspectorPropData::New(InspCat, Edit1, GetPropInfo(__delphirtti(TEdit), "Text"));

Typinfo::PPropListを引数にする例

TJvInspectorCustomCategoryItem* InspCat = new TJvInspectorCustomCategoryItem(JvInspector1->Root, NULL);
Typinfo::PPropList PropInfos;
int PropCount = GetPropList(__delphirtti(TEdit), PropInfos);
TJvInspectorPropData::New(InspCat, Edit1, PropInfos, PropCount);

■単純なデータ型を表示する

TJvInspectorに単純なデータ型を表示するには、TJvInspectorVarDataのNewメソッドを使用します。

UnicodeString MyString;
…

TJvInspectorCustomCategoryItem* InspCat = new TJvInspectorCustomCategoryItem(JvInspector1->Root, NULL);
InspCat->DisplayName = "MyStringのプロパティ";
TJvInspectorVarData::New(InspCat, L"My String", __delphirtti(UnicodeString), &MyString);


もちろんTJvInspectorで値を編集すると、MyStringの値に反映されます。

わずかなコード量でこれだけのことができました。
強力なコンポーネントです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください