TJSONObjectまたはTJSONValueのデバッガビジュアライザを作成しようとしています。私はビジュアライザーのほとんどがうまく働いています。私が抱えている問題は、TJSONObjectへの参照、または少なくともTJSONObjectのtostring()値への参照を取得することです。外部ビューアデバッガビジュアライザからオブジェクトまたはそのデータへの参照を取得するにはどうすればよいですか?
Jeremy Northの素晴らしい投稿、http://edn.embarcadero.com/article/40268によると、私はIOTADebuggerVisualizerExternalViewer実装のShowメソッドから必要なものを取得する必要があります。具体的には、Expression、TypeName、およびEvalResultの文字列パラメータから取得します。
私が理解しているところでは、Expressionは(視覚化された)検査される変数の名前であり、TypeNameは変数のクラス名であり、EvalResultは変数のデフォルトの文字列表現です。
私は簡単なテストのために、私はTFrameの子孫にTMemoを配置しました。 IOTADebuggerVisualizerExternalViewer.Showメソッドから、Expression、TypeName、およびEvalResultを渡す、私のTFrameのShowJSONObjectメソッドを呼び出します。関連するコードは、ここに表示されます:
function TDebuggerJSONVisualizer.Show(const Expression, TypeName, EvalResult: string;
SuggestedLeft, SuggestedTop: Integer):
IOTADebuggerVisualizerExternalViewerUpdater;
var
AForm: TCustomForm;
AFrame: TJSONViewerFrame;
VisDockForm: INTACustomDockableForm;
begin
VisDockForm := TJSONVisualizerForm.Create(Expression) as INTACustomDockableForm;
AForm := (BorlandIDEServices as INTAServices).CreateDockableForm(VisDockForm);
AForm.Left := SuggestedLeft;
AForm.Top := SuggestedTop;
(VisDockForm as IFrameFormHelper).SetForm(AForm);
AFrame := (VisDockForm as IFrameFormHelper).GetFrame as TJSONViewerFrame;
AFrame.ShowJSONObject(Expression, TypeName, EvalResult);
Result := AFrame as IOTADebuggerVisualizerExternalViewerUpdater;
end;
{ TStringListViewerFrame }
procedure TJSONViewerFrame.ShowJSONObject(const Expression, TypeName,
EvalResult: string);
begin
Memo1.Lines.Add(Expression);
Memo1.Lines.Add(TypeName);
Memo1.Lines.Add(EvalResult);
end;
あなたが見ることができるように、私はこの時点で私は私のShowJSONObject方法から、これらの3つのパラメータの値を表示しようとしています。ここで
は私がビジュアライザを使用して表示しようとしたシンプルなTJSONObjectです:
var
jo: TJSONObject;
begin
jo := TJSONObject.Create;
jo.AddPair('one', 'one');
jo.AddPair('two', TJSONNumber.Create(1)); //a breakpoint here
結果は次のようになります。
私はEvalResultはのtoString表現を返すだろうと期待していましたTJSONObjectの中で、uninformative()を返しただけです。これは、ローカル変数ウィンドウにデフォルトで表示されるものと同じものです。
ビジュアライザが呼び出されたTJSONObjectのトーストリング表現または実際のオブジェクトのハンドルを取得して、その値を分解して表示する方法を教えてください。