Восстановить горизонтальную позицию прокрутки в TDBGrid - PullRequest
3 голосов
/ 28 ноября 2009

Я написал простой метод сортировки столбцов в TDBGrid. Если для Option.RowSelect установлено значение False, все работает нормально, но если RowSelect получает значение 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) в цикле, но это не очень хорошая идея. У кого-нибудь есть лучшее решение?

Ответы [ 2 ]

3 голосов
/ 28 ноября 2009

вот способ управления тем, что является самым левым столбцом:

type
  TGridFriend=class(TDBGrid);


procedure TForm1.Button2Click(Sender: TObject);
begin
  // scroll to right by one column
  TGridFriend(DBGrid1).leftCol:=TGridFriend(DBGrid1).leftCol + 1;
end;
0 голосов
/ 28 ноября 2009

Вы можете найти ответ здесь:

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

Найдите «SetScrollPos» в тексте.

Возможно, ModifyScrollBar (Code, SB_THUMBPOSITION, Value) содержит решение.

...