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

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

    好的代码像粥一样,都是用时间熬出来的
  • 相关阅读:
    ruby
    Ajax的基本请求/响应模型
    面向GC的Java编程(转)
    linux中fork()函数详解(转)
    详细解析Java中抽象类和接口的区别(转)
    MQ队列堆积太长,消费不过来怎么办(转)
    消息队列软件产品大比拼(转)
    mac地址和ip地址要同时存在么?
    DP刷题记录(持续更新)
    ZR979B. 【十联测 Day 9】唯一睿酱
  • 原文地址:https://www.cnblogs.com/jijm123/p/13412722.html
Copyright © 2011-2022 走看看