怎样判断treeview当前节点为treeview显示出来的第一个节点和最后一个节点?

http://www.photoshopsky.net/it/view-42454-1.html

 

楼主d_fang()

问题点数:20、回复次数:18


1 楼OopsWare(Oops!)回复于 2000-12-31 02:10:00 得分 0

TTreeView.Selected为当前选中节点。  
  TTreeView.Items[0]为第一个节点  
  TTreeView.Items[TTreeView.Items.Count-1]为最后一个节点  
   
 


2 楼d_fang()回复于 2000-12-31 12:54:00 得分 0

我说的是能够看见的节点,如果treeview滚动了,itmes[0]就不是能够看见的节点的第一个了


3 楼OopsWare(Oops!)回复于 2001-01-01 13:00:00 得分 0

TTreeView.GetNodeAt(x,   y);  
  按坐标位置获得节点!


4 楼Kingron(单身走我路……)回复于 2001-01-14 18:14:00 得分 0

treeview.TopItem.........


5 楼d_fang()回复于 2001-01-14 21:15:00 得分 0

我说的是可视的节点!


6 楼Kingron(单身走我路……)回复于 2001-01-14 21:24:00 得分 0

当然是的了,topitem是指在TreeView中显示出来的最上面的那个节点,符合你的要求,至于最下面的那个节点,可以计算出来的,我想不用我来写代码了吧?请看Delphi对TopItem的帮助:  
  Specifies   the   topmost   node   that   appears   in   the   tree   view.    
   
  property   TopItem:   TTreeNode;  
   
  Description  
   
  When   TopItem   is   changed,   the   tree   view   scrolls   vertically   so   that   the   specified   node   is   topmost   in   the   list   view.


7 楼d_fang()回复于 2001-01-14 21:48:00 得分 0

我说的是可视,就是看得见   的不是存在的!!!


8 楼Kingron(单身走我路……)回复于 2001-01-15 08:24:00 得分 0

你建立一个测试程序看看,在上面放一个treeview,并建立一个目录树,然后放一个button,输入一下代码,在运行看看!  
  procedure   TForm1.button1Click(sender:tobject);  
  begin  
    caption:=treeview1.TopItem.Text;  
  end;  


9 楼aceplus(飞狼0723)回复于 2001-01-15 09:13:00 得分 0

同意   OopsWare(Oops!):  
            items是TTreeNode型数组,不管是否可视! 


10 楼d_fang()回复于 2001-02-03 02:58:00 得分 0

可视的第一个节点就是topitem,kingron,sorry,随后给分!!  
  怎样判断可视的最后一个节点?


11 楼d_fang()回复于 2001-02-03 10:41:00 得分 0

可视的第一个节点就是topitem,kingron,sorry,随后给分!!  
  怎样判断可视的最后一个节点?  


12 楼d_fang()回复于 2001-02-08 21:31:00 得分 0

可视的第一个节点就是topitem,kingron,sorry,随后给分!!  
  怎样判断可视的最后一个节点?  


13 楼Java_SCU(Java)回复于 2001-02-08 23:10:00 得分 0

我看了看TTreeView的源代码,暂时这样解决吧(已调试通过):  
   
  function   GetNode(ItemId:   HTreeItem):   TTreeNode;  
  var  
      Item:   TTVItem;  
  begin  
      with   Item   do  
      begin  
          hItem   :=   ItemId;  
          mask   :=   TVIF_PARAM;  
      end;  
      if   TreeView_GetItem(Form1.TreeView1.Handle,   Item)   then   Result   :=   TTreeNode(Item.lParam)  
      else   Result   :=   nil;  
  end;  
   
  function   GetLastVisible():   TTreeNode;  
  var  
      hItem,   t:   HTreeItem;  
  begin  
      t:=   Form1.TreeView1.TopItem.ItemId;  
      while   t   <>   nil   do  
      begin  
          hItem:=   t;  
          t:=   HTreeItem(   SendMessage(Form1.TreeView1.Handle,   TVM_GETNEXTITEM,  
          TVGN_NEXTVISIBLE   ,   Longint(t))   );  
      end;  
          Result:=   GetNode(hItem)  
  end;  
   
  procedure   TForm1.Button2Click(Sender:   TObject);  
  var  
      Item:   TTreeNode;  
  begin  
      Item:=   GetLastVisible();  
      Label1.Caption:=   Item.Text;  
  end;


14 楼Java_SCU(Java)回复于 2001-02-08 23:20:00 得分 0

不好意思,我看错了,上面的代码还是有点问题,我改改就好,wait!


15 楼OopsWare(Oops!)回复于 2001-02-08 23:33:00 得分 0

未免小题大做了吧!


16 楼Java_SCU(Java)回复于 2001-02-08 23:48:00 得分 0

to   OopsWare(Oops!):  
   
      我也不想这么复杂呀,可是小弟我才疏学浅,希望OopsWare兄给我一条明路,让我脱离苦海,谢谢先!


17 楼Java_SCU(Java)回复于 2001-02-09 00:50:00 得分 20

这下差不多了:  
  uses   commctrl;  
   
  function   GetNode(ItemId:   HTreeItem):   TTreeNode;  
  var  
      Item:   TTVItem;  
  begin  
      with   Item   do  
      begin  
          hItem   :=   ItemId;  
          mask   :=   TVIF_PARAM;  
      end;  
      if   TreeView_GetItem(Form1.TreeView1.Handle,   Item)   then   Result   :=   TTreeNode(Item.lParam)  
      else   Result   :=   nil;  
  end;  
   
  function   GetLastVisible():   TTreeNode;  
  var  
      hItem,   t:   HTreeItem;  
      prc:   TRect;  
  begin  
      hItem:=   nil;  
      t:=   Form1.TreeView1.TopItem.ItemId;  
      while   true   do  
      begin  
          hItem:=   t;  
          t:=   TreeView_GetNextVisible(Form1.TreeView1.Handle,   t);  
          if   not   Bool(TreeView_GetItemRect(Form1.TreeView1.Handle,   t,   prc,   true))   then  
                break;  
          if   prc.Top   >   Form1.TreeView1.ClientRect.Bottom   then  
              break;  
      end;  
      if   hItem   <>   nil   then  
          Result:=   GetNode(hItem)  
      else  
          Result:=   nil;  
  end;  
   
  procedure   TForm1.Button2Click(Sender:   TObject);  
  var  
      Item:   TTreeNode;  
  begin  
      Item:=   GetLastVisible();  
      Label1.Caption:=   Item.Text;  
  end;  


18 楼Kingron(单身走我路……)回复于 2001-02-16 18:02:00 得分 0

爱,呵呵,几天没来,给人抢了分数了。

 

 

 

posted on 2010-12-22 22:43  chulia  阅读(743)  评论(0编辑  收藏  举报

导航