TJSONObject または TJSONValue のデバッガ ビジュアライザを作成しようとしています。ほとんどのビジュアライザーがうまく機能しています。私が抱えている問題は、TJSONObject への参照、または少なくとも TJSONObject の tostring() 値への参照を取得することです。
私が見たサンプルとhttp://edn.embarcadero.com/article/40268の Jeremy North による素敵な投稿によると、IOTADebuggerVisualizerExternalViewer 実装の Show メソッドから必要なものを取得する必要があります。具体的には、Expression、TypeName、および EvalResult 文字列パラメーターから。
私が理解していることから、Expression は検査 (視覚化) される変数の名前、TypeName は変数のクラス名、EvalResult は変数のデフォルトの文字列表現です。
簡単なテストのために、TFrame の子孫に TMemo を配置しました。IOTADebuggerVisualizerExternalViewer.Show メソッドから、TFrame の ShowJSONObject メソッドを呼び出します。このメソッドに、Expression、TypeName、および EvalResult を渡します。関連するコードは次のとおりです。
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 が TJSONObject の tostring 表現を返すことを期待していましたが、ローカル変数ウィンドウにデフォルトで表示されるのと同じものである、有益でない () しか返されませんでした。
ビジュアライザーが呼び出された TJSONObject の tostring 表現または実際のオブジェクトへのハンドルを取得して、その値を分解して表示するにはどうすればよいですか?