treeview的树很大
我用canvas来保存图片,但是只能保存可见部分,无法保存滚动条以下未显示的内容哪位大侠帮帮忙,如果将所有内容保存为图片。谢谢!

解决方案 »

  1.   

    你用图片是肯定不能保存所有数据的。
    你可以这样做TreeView.Savetofile('D;\Tree.txt');放到一个文本文件中。
      

  2.   

    那么至少你得知道如果全部显示,图片有多大,尽管显示器显示不完。例如会是4000*800。
    那么代码控制treeview大小 40000*800,然后canvas,然后大小再调回去。
    就想出了个这么个办法,希望对你有用。
      

  3.   

    canvas总是可见部分, kuki84()的方法行的
      

  4.   

    canvas总是可见部分,  kuki84()的方法是不可行。有没有哪位老大知道怎么办啊。
      

  5.   

    根据树信息,自己在canvas上画吧。最没办法的办法:)
      

  6.   

    楼主可能不了解kuki84()的意思.你在copyrect之前,先使treeview的长度为不显示出滚动条(具体要你自己去调试了),然后bitblt把listview的图拷下来,再把listview的长宽设为原来的就成了
      

  7.   

    //参考如下代码~~
    //也可以动态创建一个TTreeView来处理~~
    procedure TForm1.Button1Click(Sender: TObject);
    var
      vTreeNode: TTreeNode;
      vOldHeight: Integer;
    begin
      ///////Begin 全部展开
      vTreeNode := TreeView1.TopItem;
      while Assigned(vTreeNode) do
      begin
        vTreeNode.Expand(True);
        vTreeNode := vTreeNode.GetNextSibling
      end;
      ///////End 全部展开  ///////Begin 拍照
      vOldHeight := TreeView1.Height;
      TreeView1.Visible := False;
      TreeView1.ClientHeight := TreeView1.Items.Count * (TreeView1.Canvas.TextHeight('|') + 3);
      Image1.Width := TreeView1.ClientWidth;
      Image1.Height := TreeView1.ClientHeight;
      TreeView1.PaintTo(Image1.Canvas, - 2, - 2);
      TreeView1.Height := vOldHeight;
      TreeView1.Visible := True;
      ///////End 拍照
    end;