Zitat:
Remarks
The SetScrollInfo function performs range checking on the values specified by the nPage and nPos members of the SCROLLINFO structure. The nPage member must specify a value from 0 to nMax - nMin +1. The nPos member must specify a value between nMin and nMax - max( nPage– 1, 0). If either value is beyond its range, the function sets it to a value that is just within the range.
Das klingt für mich so, als müsstest Du beim GetScrollInfo-Aufruf die fMask ausweiten auf SIF_PAGE or SIF_POS or SIF_RANGE.
[edit] So müsste es gehen (mit einem Memo getestet):
Delphi-Quellcode:
var TempScrollInfo: SCROLLINFO;
begin
// Position der horizontalen Scrollbar
TempScrollInfo.cbSize := SizeOf(SCROLLINFO);
TempScrollInfo.fMask := SIF_POS;
GetScrollInfo(grdData.Handle, SB_HORZ, TempScrollInfo );
//Daten neu laden...
//..
//Die horizontale Scrollposition wiederherstellen
SetScrollInfo(grdData.Handle, SB_HORZ, TempScrollInfo, true);
grdData.Perform(WM_HSCROLL, Info.nPos shl 16 or SB_THUMBPOSITION, 0);
[/edit]
[edit2] Das SetScrollInfo kann sogar entfallen, schadet aber auch nicht. [/edit2]