我现在用的是4.2.12,昨天发现一个严重错误,但是一时又找不到错误的源头,所以想看看4.2.20是不是已经改了这个错误,不料今早上他们的新闻组竟也上不去,无奈,只好回咱们Delphi大家庭来求助了有的兄弟能否发给我一份,感谢了

解决方案 »

  1.   

    说说什么错误?我这里有4.2.3 ,2004-07-19的VirtualTrees.pas ,
    从新闻组下载的(后来也进不去了)。
      

  2.   

    4.2.3我也有,可能也只有先退回去那个版本了,先看看有没有兄弟有的吧错误是这样的,
    我调用
    TreeView.DeleteNode(aNode, True);触发TreeView一系列调用,最后问题出在这个函数:function TBaseVirtualTree.GetDisplayRect(Node: PVirtualNode; Column: TColumnIndex; TextOnly: Boolean;
      Unclipped: Boolean = False): TRect;
    var
      Temp: PVirtualNode;
      Offset: Cardinal;
      Indent,
      TextWidth: Integer;
      MainColumnHit,
      Ghosted: Boolean;
      CurrentBidiMode: TBidiMode;
      CurrentAlignment: TAlignment;begin
      Assert(Assigned(Node), 'Node must not be nil.');
      Assert(Node <> FRoot, 'Node must not be the hidden root node.');  MainColumnHit := (Column + 1) in [0, FHeader.MainColumn + 1];
      if not (vsInitialized in Node.States) then
        InitNode(Node);  Result := Rect(0, 0, 0, 0);
      
      // Check whether the node is visible (determine indentation level btw.).
      Temp := Node;
      Indent := 0;
      while Temp <> FRoot do
      begin
        //在取Temp.Parent.States值的时候发生异常,因为有时候Temp.Parent = nil,
        //我就弄不明白,Temp <> FRoot,但是Temp.Parent = nil
        //我添加子节点一直都是用它的AddChild方法添加的    
        if not (vsVisible in Temp.States) or not (vsExpanded in Temp.Parent.States) then
          Exit;
        Temp := Temp.Parent;
        if MainColumnHit and (Temp <> FRoot) then
          Inc(Indent, FIndent);
      end;
      ...
    end;这个问题应该很多用家都碰到的,新版本很可能修改了这个问题
      

  3.   

    奇怪了,我也调DeleteNode,怎么没出错呢?难道是在特定的情况下才出错?我添加子节点也都是用AddChild,这样添加节点应该都是初试化过的。