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

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

  • 相关阅读:
    poj 2773 利用欧拉函数求互质数
    poj3358:欧拉定理
    poj:2992 因子数量
    poj3696:同余方程,欧拉定理
    USACO5.4-Character Recognition
    hdu5017:补题系列之西安网络赛1011
    hdu5014:number sequence对称思想
    欧拉函数,欧拉定理例题整理
    POJ 3463 Sightseeing (次短路)
    POJ
  • 原文地址:https://www.cnblogs.com/chulia20002001/p/1914236.html
Copyright © 2011-2022 走看看