谢谢!
解决方案 »
- 如何重载ClientDataSet的BeforePost事件????
- Delphi 和VB.net何去何从?
- 超级难题在Dbgrid 中选择多行记录?
- 我可以ping通SQLServer数据库服务器,客户端ODBC别名却无法连接上,大概是什么原因?
- 高分征求QQ号码
- 初学者提问 怎样设置透明窗体
- Delphi菜鸟的简单问题:Delphi是不是能生成 单一运行程序。
- c-s两层数据库程序向三层转换???
- 条型码在Delphi中怎么实现????
- delphi中ftp通过http get代理下载如何实现
- 100分求李维的DELPHI 5.X ADO_MTS_COM+高级程序
- 2000和98的access数据库日期格式兼容问题。急。
好像是这样的俺回头看看
用一个变量进行记录,
var i:integer;
i:=1;
在事件onAfterScroll()
begin
改变的值:=StringGrid.col-i;
i:=StringGrid.col;
end;
int nBar // scroll bar flags
);
两次取得的位置比较一下就可以了!
P1,P2:integer;
begin
P1:=GetScrollPos(StringGrid1.Handle, SB_VERT);//取垂直滚动条的位置
//..........发生滚动事件..............
P2:=GetScrollPos(StringGrid1.Handle, SB_VERT);
ShowMessage(IntToStr(P2-P1));//这个就是滚动的位置
end;
但是我怎么能够获取滚动对应的Stringgrid的列呢?
即水平滑块向左或向右移动后,上面的列有多少同时向左或向右消失掉了呢?
var
Form1: TForm1;
OldRow,NewRow,HasScrolled:integer;
implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
var
i,j:integer;
begin
for i:=0 to 1000 do
begin
if StringGrid1.ColCount<i then
StringGrid1.ColCount:=StringGrid1.ColCount+1;
for j:=0 to 4 do
StringGrid1.Cells[i,j]:=IntToStr(Random(100));
end;
end;procedure TForm1.BitBtn1Click(Sender: TObject);
begin //取出滚动之前的列位置
HasScrolled:=0;
OldRow:=GetScrollPos(StringGrid1.Handle,SB_HORZ);
end;procedure TForm1.StringGrid1TopLeftChanged(Sender: TObject);
begin
NewRow:=GetScrollPos(StringGrid1.Handle,SB_HORZ);
If NewRow<>OldRow then
begin //如果是列滚动的话
if NewRow>OldRow then
Inc(HasScrolled)
else
Dec(HasScrolled);
OldRow:=NewRow;
end;
end;procedure TForm1.BitBtn2Click(Sender: TObject);
begin//显示出滚动了的位置
ShowMessage('The column has scrolled:'+IntToStr(HasScrolled));
end;
感谢帮助,
但是有点问题,我点滚动条右边的箭头,明明向左移了一列,但是却捕获不到,
默认StringGrid的滚动条的最大值为127,最小值为0(这个如果你不信可以用一
个API GetScrollRange设断点跟踪来看一看)。这样,你就应该知道问题
所在了,我们的StringGrid的列数是从0到1000。也就是说ScrollBar的一个位
置就对应不了StringGrid的每一列,所以你点击StringGrid滚动条发生滚动后
再用API GetScrollPos就不能每次都可以取到不同的Position值了。听到这你
可能点失望了吧,不过没有关系,当你的StringGrid的列数小于或邻近127时我
给你的那段代码都是有效的。至于远大于127的情况,那我也只有帮你关注一
下了,希望对SDK有极高造化的大侠能帮一帮你了。祝好运!:)
另外告诉你一个好消息,有一个SDK函数为SetScrollRange可以改变滚动条的最
大和最小值,不过我还没有搞懂。你可以去研究一下吧
感谢大家的帮忙!
特别是blazingfire(烈焰) ,thank you!