集思广义,关于TStringGrid/TDrawGrid的滚动条问题。

xzhifei 2009-08-19 09:53:37
加精
TStringGrid控件非常好用,俺一直用它的父类TDrawGrid,完成许多TListView无法完成的功能。
除了滚动条的问题,其它基本上算得上完美。俺看了源码,发现它处理滚动条的机制很山寨,还需要自己写代码完善。
滚动条的BUG有如下几个:
1.不能根据数据的多少改变滚动条块的大小。
这个问题虽然可以用SetScrollInf设置,但是有一点,Grid的Row是可以自由设置高度的,代码还需要改进:
var
info: TScrollInfo;
begin
fillchar(info, sizeof(info), 0);
with info do
begin
cbsize := sizeof(info);
fmask := SIF_ALL;
GetScrollInfo( TheGrid.handle, SB_VERT, info );
fmask := fmask or SIF_PAGE;
nPage := 5 * (nmax-nmin) div TheGrid.RowCount;
//whatever number of cells you consider a 'page'
end;
setscrollinfo(TheGrid.handle, SB_VERT, info, TRUE);
end;



2.将Grid.Option中的goRowSelect选中,会出现另外的BUG,如Col过多时,浏览时,将水平滚动条移到最末,然后再往下滚动时,水平滚动条会自动移到最前面,这个问题很烦人。

不知道大家有没有好的办法解决
...全文
799 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
cmf41013 2011-08-14
  • 打赏
  • 举报
回复
http://blog.csdn.net/laocui172/article/details/6684245
cmf41013 2011-08-14
  • 打赏
  • 举报
回复
【【【【【【【【
「已注销」 2009-10-27
  • 打赏
  • 举报
回复
你的农历控件要不要注册呢
bavt0502 2009-10-08
  • 打赏
  • 举报
回复
学习抢分了
xinxinshou2009 2009-08-23
  • 打赏
  • 举报
回复
这种费脑子的活就留给有献身精神的人来干,俺们这些靠程序混饭吃的,除了义务顶帖,就是来抢分了
wizard1888 2009-08-23
  • 打赏
  • 举报
回复
good
yangang 2009-08-23
  • 打赏
  • 举报
回复
占地学习
bluesky396 2009-08-23
  • 打赏
  • 举报
回复
帮顶。。。
砝码 2009-08-22
  • 打赏
  • 举报
回复
顶,再顶一下
lyhoo163 2009-08-22
  • 打赏
  • 举报
回复
读之。任之。
wuyujie1219 2009-08-22
  • 打赏
  • 举报
回复
回答问题,据说可以得分
vaiosp 2009-08-21
  • 打赏
  • 举报
回复
Grid的Row是可以自由设置高度的,比如第1行高度我设置为10,第2行高度我设置为100,咋办,呵呵


对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP
linyc1009 2009-08-20
  • 打赏
  • 举报
回复
http://www.schsky.com/bbs/?fromuser=jackal_lin
linyc1009 2009-08-20
  • 打赏
  • 举报
回复
http://www.schsky.com/bbs/?fromuid=2735
reverzeng 2009-08-20
  • 打赏
  • 举报
回复
路过学习,谢谢
donil 2009-08-20
  • 打赏
  • 举报
回复
看看
xzhifei 2009-08-19
  • 打赏
  • 举报
回复
嗯,楼上的不错,几乎就解决问题了,但出现明显的闪烁。。。
不过提供思路很不错,照着改一下,应该可以解决问题
SuperTitan001 2009-08-19
  • 打赏
  • 举报
回复
第二个问题,好像解决了,试试

procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);
begin
sel:=true;
end;

procedure TForm1.StringGrid1TopLeftChanged(Sender: TObject);
begin
if sel then
begin
sel:=false;
stringgrid1.LeftCol:=LeftColumn;
exit;
end;
if stringgrid1.Row=previous_Row then
LeftColumn:=stringgrid1.LeftCol
else
previous_Row:=stringgrid1.Row;

end;
kampan 2009-08-19
  • 打赏
  • 举报
回复
对饭桶善于深入事物本质的精神表示钦佩!学习!
hongqi162 2009-08-19
  • 打赏
  • 举报
回复
推荐看一下businessskinform里面的drawgrid,或许有帮助
加载更多回复(14)

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧