zoukankan      html  css  js  c++  java
  • 怎样判断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

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

  • 相关阅读:
    第36课 经典问题解析三
    第35课 函数对象分析
    67. Add Binary
    66. Plus One
    58. Length of Last Word
    53. Maximum Subarray
    38. Count and Say
    35. Search Insert Position
    28. Implement strStr()
    27. Remove Element
  • 原文地址:https://www.cnblogs.com/chulia20002001/p/1914236.html
Copyright © 2011-2022 走看看