有没有什么办法可以把TTreeView以文本形式输出,关键是我要有ASCII吗的线或是制表符的线
就像dos的tree命令(tree和tree/a)输出到txt文件中有现成的函数吗?
就像dos的tree命令(tree和tree/a)输出到txt文件中有现成的函数吗?
解决方案 »
- 16进制读取简单问题
- 帐套的实现以及系统结构
- dll问题,急??
- 怎样在WebBrowser1点击Frame中的链接
- 我要替换智能ABC的某个文件,但系统提示正在使用这个文件,需注销后才能替换,请问有什么方法能解决!
- ★★请大家参与讨论数据库数据库的两层,三层,b/s开发的优缺点★★
- 问一个小题,顺便动散分!急,解决了就散分·在线
- 求接口回调机制的例子,也就是中间层主动通知客户端.非诚勿扰
- 在Delphi中,查找某一字段值时,要实现“查找下一个”,有哪些方法,谢谢!
- delphi5.0如何连接NT上的SQL SERVER7.0?
- 菜鸟问题
- 有什么函数可以复制文件的吗?能帮我解决问题的!!100分
这个谁都知道
// 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;
用Canvas画了线又有什么用呢?
很好做吧?
把Delphi的SaveToFile和LoadFromFile的代码拷出来,定义成自己的过程,将其中的TAB码值改为‘—’的码值试试,
很好做吧?
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那一改,存成另外的一个什么东东,不就行了,没有试通,代码不给整体拷贝和粘贴,奇怪,能解释一下么?等待楼主说出最好实现方式。
实际上我以前就是这样的
但是有的是 — 有的是竖线 还有折线 ? 怎么办?
详细点,怎样判断应该竖线 还是折线(各个方向的)
你不用将整个comctrl的代码都拷过来,只需你要用的哪二个过程则可了。
至于是横线还是竖线,你只需对其ASC码进行设定则可,比如:码值179的字符是竖线,191是下转弯,等等。
您只想别人给出完整的代码直接使用吗?