起步软件技术论坛-X3

 找回密码
 立即注册
搜索
楼主: amnet

【结帖】datagrid滚动后最顶端一行的index如何取到**

[复制链接]
发表于 2008-5-26 18:07:44 | 显示全部楼层
楼主可以尝试一下
y := VisibleRowCount * RowHeight;
x := sum(Column.Width);
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-28 09:39:07 | 显示全部楼层

你理解错了吧

这得出的是所有行的行高吧,而不是当前行相对datagrid控件顶端,也就是可视范围内第一行的高度
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-28 09:46:10 | 显示全部楼层

如图所示

如图

datagrid.jpg

127.61 KB, 下载次数: 175

回复 支持 反对

使用道具 举报

发表于 2008-5-28 14:26:30 | 显示全部楼层
请楼主等待一下,我试试看。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-29 10:26:19 | 显示全部楼层

有结果了么

有结果了么
回复 支持 反对

使用道具 举报

发表于 2008-5-29 10:31:45 | 显示全部楼层
不好意思,还没有
回复 支持 反对

使用道具 举报

发表于 2008-5-29 15:19:45 | 显示全部楼层
楼主,我大概试了试
这个可以得到可见行的节点信息(第一列)
procedure TMainForm.Button1Click(Sender: TObject);
var
  lNode: TTreeListNode;
begin
  lNode := DataGrid.TopVisibleNode;
  jsDialogs.ShowMsg(lNode.Strings[0], 'lNode.Strings[0]');
  lNode := lNode.GetNextNode;
  jsDialogs.ShowMsg(lNode.Strings[0], 'lNode.Strings[0]');
end;

这个就可以让panel跟随某一行走。
procedure TMainForm.Button2Click(Sender: TObject);
var
  t0, h0, rh, lh: integer;
begin
  t0 := DataGrid.Top;
  h0 := DataGrid.HeaderRowHeight; //DataGrid.HeaderPanelHeight; //HeaderHeight; //
  rh := DataGrid.RowHeight;
  lh := 1;
  Panel1.Height := rh;
  Panel1.Top := t0 + h0+lh;
end;
回复 支持 反对

使用道具 举报

发表于 2008-5-29 15:20:06 | 显示全部楼层
更具体的请楼主再试试看,有问题再沟通。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-30 09:35:31 | 显示全部楼层

多谢,我先试试看

多谢,我先试试看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-30 10:01:36 | 显示全部楼层

一个新问题:

datagrid里的一列显示的是数据库中的图片,这列的值能否通过TTreeListNode对象取道后用image控件显示,而不是通过dataset去取,因为如果通过dataset取就要用到locate方法,这样会触发它的afterscoll事件,而这部分逻辑恰好是通过afterscroll事件触发的,所以就会形成死循环。如果可以通过遍历TTreeListNode对象取图片流来显示就能解决这个问题,谢谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-17 02:28 , Processed in 0.044149 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表