http://www.photoshopsky.net/it/view-42454-1.html
问题点数: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
爱,呵呵,几天没来,给人抢了分数了。