有没有什么办法可以把TTreeView以文本形式输出,关键是我要有ASCII吗的线或是制表符的线
就像dos的tree命令(tree和tree/a)输出到txt文件中有现成的函数吗?

解决方案 »

  1.   

    TreeView1.SaveToFile(filename:String); //没有线
      

  2.   

    不是savetofile
    这个谁都知道
      

  3.   

    自绘TreeView的Item代码,给你参考
    // draw lines(Item左边的线条)
      TreeV.Canvas.Pen.Color := $A0A0A0;//clGray;
      if pnode <> nil then
      begin
        TreeV.Canvas.PenPos := Point(rect.Left-65, rect.Top-1);
        TreeV.Canvas.LineTo(rect.Left-65, mid);
        if Node.getNextSibling() <> nil then
        begin
          TreeV.Canvas.PenPos := Point(rect.Left-65, mid);
          TreeV.Canvas.LineTo(rect.Left-65, rect.Bottom);
        end;
      end;
      TreeV.Canvas.PenPos := Point(rect.Left-65, mid);
      TreeV.Canvas.LineTo(rect.Left-42, mid);// draw vertical lines(再左边的线条)
      while pnode <> nil do
      begin
        Rect.Left := Rect.Left - TreeV.Indent;
        if pnode.getNextSibling() <> nil then
        begin
          TreeV.Canvas.PenPos := Point(rect.Left-65, rect.Top);
          TreeV.Canvas.LineTo(rect.Left-65, rect.Bottom);
        end;
        pnode := pnode.Parent;
      end;
      

  4.   

    我要保存成文本文件的啊
    用Canvas画了线又有什么用呢?
      

  5.   

    把Delphi的代码拷出来,定义成自己的过程,将其中的TAB码值改为‘—’的码值试试,
    很好做吧?
      

  6.   

    改一下:
    把Delphi的SaveToFile和LoadFromFile的代码拷出来,定义成自己的过程,将其中的TAB码值改为‘—’的码值试试,
    很好做吧?
      

  7.   

    lixif() 的思路真的很好
    procedure TTreeStrings.SaveTreeToStream(Stream: TStream);
    const
      TabChar = #9;
      EndOfLine = #13#10;
    var
      i: Integer;
      ANode: TTreeNode;
      NodeStr: string;
    begin
      if Count > 0 then
      begin
        ANode := Owner[0];
        while ANode <> nil do
        begin
          NodeStr := '';
          for i := 0 to ANode.Level - 1 do NodeStr := NodeStr + TabChar;
          NodeStr := NodeStr + ANode.Text + EndOfLine;
          Stream.Write(Pointer(NodeStr)^, Length(NodeStr));
          ANode := ANode.GetNext;
        end;
      end;
    end;comctrl中的代码是这样的,但是很多啊,好多的关联,是不是要重新写一个comctrl啊,我觉得如果可以,直接把tabchar那一改,存成另外的一个什么东东,不就行了,没有试通,代码不给整体拷贝和粘贴,奇怪,能解释一下么?等待楼主说出最好实现方式。
      

  8.   

    to: lixif() 我试过了,可以的!
    实际上我以前就是这样的
    但是有的是 — 有的是竖线 还有折线 ? 怎么办?
      

  9.   

    用不的的ASIC码,则可,你查一下ASIC码表不行吗?
      

  10.   

    多谢 lixif() 我也学到一点东西
      

  11.   

    to lixif():
    详细点,怎样判断应该竖线 还是折线(各个方向的)
      

  12.   

    这么多天了,还在讨论这个问题?
    你不用将整个comctrl的代码都拷过来,只需你要用的哪二个过程则可了。
    至于是横线还是竖线,你只需对其ASC码进行设定则可,比如:码值179的字符是竖线,191是下转弯,等等。
    您只想别人给出完整的代码直接使用吗?