7

VirtualTreeViewに基づいた単純な2列のグリッド「プロパティエディタ」を構築しようとしています。

(DelphiのIDEオブジェクトインスペクターで見られる外観とユーザーエクスペリエンスを模倣したい)


コンポーネントはほぼ機​​能しており、複数のエディターを処理できますが 、厄介なバグに直面しています。

新しいノード(新しい行)をクリックすると、クリックした列に関係なく、ノードが選択され、エディターが表示されます。期待通りでOKです。

次に、同じ行の最初の列をクリックすると、エディターのコンテンツが検証され、エディターがフォーカスを維持していることを期待します(delphiのオブジェクトインスペクターのように)。

ただし、エディターのコンテンツは検証されてから消え、ノード全体(行)が選択されます。別のノードを選択して前に選択したノードをクリックするまで、エディターは(2番目の列をクリックしても)戻りません。

編集:私のコードに関するイラストと精度を追加しました。

問題のイラスト

コードについて: 高度なデモ(プロパティページ)にあるコードとまったく同じコードを(開始点として)使用したため、ここにコードを挿入していません


私が試し、見つけたもの:

ここにある2003年のコンパイル済みの高度なデモ(プロパティツリーページ)、コンポーネント(および仮想ツリービュー)から期待するものと同じように機能するようです。

しかし、これと同じデモをコンパイルすると(delphi 2007と2009の両方で、Googleコードの現在のトランクからバージョン4.5.2、4.8.7、さらには5.0.0で試しました)、バグが再発します!

2003年と最近のバージョンの間に文書化された重大な変更があったと最初に思いますが、何も見つかりません。また、これを解決するために利用可能なすべてのオプションを試してみましたが、成功しませんでした。

この問題が新しいdelphiRTLによるものなのか、virtualtreeviewの重大な変更(バグ?)によるものなのかはまだわかりません。

だから私の質問:

  • Advancedデモをコンパイルするときに同じ問題がありますか?
  • 私の問題を解決するためのコードのヒントや回避策はありますか?

ちなみに、今日の午後はvirtualtreeviewをあきらめかけ、別のコンポーネントで解決策を試したかったのですが...この興味深い質問を見つけて、bergのコンポーネントを試すことにしましたが、彼らのホームページ(関連する質問についての私のコメントを参照してください)

4

1 に答える 1

3

VST onChangeは、ノードの選択を変更することによって呼び出されます。ノードがすでに選択されている場合、状態はこれ以上変更されません。したがって、たとえばVSTのEditNode()-OnClick-Callbackのメソッドを呼び出すなどして、ObjectInspectorと同様の動作を独自に実装する必要があります。

procedure TMainForm.VSTClick(Sender: TObject);
var node: PVirtualNode;
begin
  node:= VST.GetFirstSelected();
  if(node <> nil) then
    VST.EditNode(node, EDITABLE_COLUMN_INDEX);
end;
于 2012-09-17T11:27:15.593 に答える