gpt4 book ai didi

delphi - 恢复 TDBGrid 中的水平滚动位置

转载 作者:行者123 更新时间:2023-12-03 15:55:37 26 4
gpt4 key购买 nike

我编写了一个简单的方法来对 TD​​BGrid 中的列进行排序。如果 Option.RowSelect 设置为 False,则一切正常,但如果 R​​owSelect 为 True,则水平位置滚动在排序列后不会恢复。所以我尝试GetScrollPos和SetScrollPos来恢复水平滚动位置,ScrollBar转到正确的位置但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) 来修复,但这不是一个好主意。大家有更好的解决办法吗?

最佳答案

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

type
TGridFriend=class(TDBGrid);


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

关于delphi - 恢复 TDBGrid 中的水平滚动位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1812294/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com