1

外出してすべてのコンピューターをスキャンし、ハードウェア、ソフトウェア、および更新/修正プログラムの情報を TreeView に入力するアプリケーションを作成しました。

ここに画像の説明を入力

私が抱えている問題は印刷に関するものです。ツリービューを自動的に展開し、選択したコンピューターの結果をプリンターに送信するにはどうすればよいですか? 私が現在使用している方法では、コンテンツをキャンバス (BMP) に送信してからプリンターに送信しますが、画面に表示されているものだけをツリービュー全体をキャプチャするわけではありません。何かアドバイス?どうもありがとう。

4

1 に答える 1

2

を印刷する際の問題TTreeViewは、表示されていない部分には何も描画されないことです。(Windows はコントロールの可視部分のみを描画するため、PrintToまたは APIPrintWindow関数を使用すると、印刷可能な可視ノードのみが表示されます。表示されていないコンテンツはまだ描画されていないため、印刷できません。)

表形式のレイアウト (線なし、インデントされたレベルのみ) が機能する場合、最も簡単な方法は、テキストを作成して hidden に配置し、出力TRichEditを に処理させることです。TRichEdit.Print次に例を示します。

// File->New->VCL Forms Application, then
// Drop a TTreeView and a TButton on the form.
// Add the following for the FormCreate (to create the treeview content)
// and button click handlers, and the following procedure to create
// the text content:

procedure TreeToText(const Tree: TTreeView; const RichEdit: TRichEdit);
var
  Node: TTreeNode;
  Indent: Integer;
  Padding: string;
const
  LevelIndent = 4;
begin
  RichEdit.Clear;
  Node := Tree.Items.GetFirstNode;
  while Node <> nil do
  begin
    Padding := StringOfChar(#32, Node.Level * LevelIndent);
    RichEdit.Lines.Add(Padding + Node.Text);
    Node := Node.GetNext;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  HideForm: TForm;
  HideEdit: TRichEdit;
begin
  HideForm := TForm.Create(nil);
  try
    HideEdit := TRichEdit.Create(HideForm);
    HideEdit.Parent := HideForm;
    TreeToText(TreeView1, HideEdit);
    HideEdit.Print('Printed TreeView Text');
  finally
    HideForm.Free;
  end;
end;

procedure TForm3.FormCreate(Sender: TObject);
var
  i, j: Integer;
  RootNode, ChildNode: TTreeNode;
begin
  RootNode := TreeView1.Items.AddChild(nil, 'Root');
  for i := 1 to 6 do
  begin
    ChildNode := TreeView1.Items.AddChild(RootNode, Format('Root node %d', [i]));
    for j := 1 to 4 do
      TreeView1.Items.AddChild(ChildNode, Format('Child node %d', [j]));
  end;
end;
于 2013-05-01T20:12:14.627 に答える