首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在TDBGrid中恢复水平滚动位置

在TDBGrid中恢复水平滚动位置
EN

Stack Overflow用户
提问于 2009-11-28 19:23:58
回答 2查看 4.9K关注 0票数 3

我在TDBGrid中编写了一个简单的列排序方法。如果Option.RowSelect设置为False,则一切正常,但如果RowSelect设置为True,则在排序列后水平位置滚动不会恢复。所以我尝试了GetScrollPos和SetScrollPos来恢复水平滚动的位置,ScrollBar转到了正确的位置,但是TDBGrid没有滚动,下面是方法:

代码语言:javascript
复制
procedure TDBGrid.TitleClick(Column: TColumn);
var
  CurrenctPosition: TBookmark;
  PosScroll: Integer;
begin
  inherited TitleClick(Column);
  if FAllowTitleClick and (Assigned(DataSource))
  and (Assigned(DataSource.DataSet))
  and (DataSource.DataSet.Active)
  and (Assigned(Column.Field))
  and (Column.Field.FieldKind <> fkLookup) then
  begin
    //Get position scroll
    PosScroll := GetScrollPos(Handle, SB_HORZ);
    CurrenctPosition := DataSource.DataSet.GetBookmark;
    FPaintInfo.ColPressed := False;
    FPaintInfo.ColPressedIdx := -1;
    if ValidCell(FCell) then
      InvalidateCell(FCell.X, FCell.Y);
    SortColumn(Column);
    DataSource.DataSet.GotoBookmark(CurrenctPosition);
    //Set position scroll
    SetScrollPos(Handle, SB_HORZ, PosScroll, True);//<- need to be refreshed
  end;
end;

这可能可以在循环中使用Perform(WM_HSCROLL,SB_LINERIGHT,0)来修复,但这不是一个好主意。谁有更好的解决方案?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-11-29 02:49:26

下面是一种控制最左边列的方法:

代码语言:javascript
复制
type
  TGridFriend=class(TDBGrid);


procedure TForm1.Button2Click(Sender: TObject);
begin
  // scroll to right by one column
  TGridFriend(DBGrid1).leftCol:=TGridFriend(DBGrid1).leftCol + 1;
end;
票数 3
EN

Stack Overflow用户

发布于 2009-11-29 02:41:02

你可能会在这里找到答案:

http://www.species.net/Aves/Cassowary/delphi.htm

在正文中查找"SetScrollPos“。

也许ModifyScrollBar(代码、SB_THUMBPOSITION、值)包含了解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1812294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档