【问题标题】:Restore horizontal scroll position in TDBGrid恢复 TDBGrid 中的水平滚动位置
【发布时间】:2009-11-28 11:23:58
【问题描述】:

我写了一个简单的方法来对 TD​​BGrid 中的列进行排序。 如果 Option.RowSelect 设置为 False 一切正常,但如果 R​​owSelect 为 True 则水平位置滚动不会在排序列后恢复。 所以我尝试 GetScrollPos 和 SetScrollPos 来恢复水平滚动位置,滚动条到正确的位置但 TDBGrid 没有滚动,这里是方法:

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) 修复,但这不是一个好主意。 谁有更好的解决方案?

【问题讨论】:

  • 为什么不直接使用 TSMDBGrid?
  • 可能是因为它不是免费的?这显然在 TDBGrid 中应该是可能的,所以恕我直言,没有理由放弃并使用另一个(商业)组件......
  • @eKek0 TSMDBGrid 不错的免费组件,但这个组件小巧、简单且速度更快,而且它完全可以胜任。 @Smasher ...可能意见 TSMDBGrid 是免费的,这是 TThemedDBGrid 的修改版本,你可以在这里(免费)获得它:andy.jgknet.de/blog/?page_id=206

标签: delphi tdbgrid


【解决方案1】:

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

type
  TGridFriend=class(TDBGrid);


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

【讨论】:

  • 感谢 X-Ray,简单而有效的想法。只需保存最后一个 LeftCol 并在排序后恢复它。
【解决方案2】:

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

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

在文本中查找“SetScrollPos”。

也许 ModifyScrollBar(Code, SB_THUMBPOSITION, Value) 拥有解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-25
    相关资源
    最近更新 更多