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