manuelles Scrollen von TStringGrid
-
- Registered: Dec 24, 2008
- Last visit: Feb 05, 2010
- Posts: 15
Hallo zusammen,
ich habe zwei StringGrids direkt übereinander, bei der der eine als Master und der andere als Slave dienen soll. Der Master hat beide Scrollbars, der Slave keine. Die Zeilenzahl des Slave ist fix, deshalb muss dieses Grid nur horizontal mitscrollen, wenn der Master scrollt. Das zwangsweise Scrollen des Slave wollte ich durch Manipulation des Wertes LeftCol erreichen, also etwa so:
Code
grIst.leftCol := grSolll.leftCol
Das geht aber hoffnungslos schief und endet in einer Exception, weil die Prozedur SetLeftCol unbedingt auch den Scrollbar aktualisieren will, den es aber gar nicht gibt :-(
Selbst wenn man das repariert, passiert immer noch nichts, weil nicht die horzontale Position geƤndert werden soll, sondern die vertikale. Man muss folgende Korrekturen in Grids.pas vornehmen:
Code
Procedure TGrid.SetTopRow(NewValue:LongInt);
Var t,i:Longint;
Begin
If NewValue > RowCount-FixedRows-1 Then NewValue := RowCount-FixedRows;
If NewValue < 0 Then NewValue := 0;
T := 0;
For i := FixedRows To FixedRows+NewValue-1 Do
Begin
Inc(T,FRowHeights^[i]);
End;
IF FVertScrollBar <> NIL THEN //change En
FVertScrollBar.Position := T;
ScrollVertTrack(FVertScrollBar,T); //manual
Invalidate //change En
End;
Procedure TGrid.SetLeftCol(NewValue:LongInt);
Var t,i:Longint;
Begin
If NewValue > ColCount-FixedCols-1 Then NewValue := ColCount-FixedCols;
If NewValue < 0 Then NewValue := 0;
T := 0;
For i := FixedCols To FixedCols+NewValue-1 Do
Begin
Inc(T,FColWidths^[i]);
End;
if FHorzScrollBar <> NIL then // change En
FHorzScrollBar.Position := T;
ScrollHorzTrack(FHorzScrollBar,T); //manual; change En
Invalidate //change En
End;
MfG Peter
- Moderated by:
- Admins-Forum
Users on-line
- 0 users
This list is based on users active over the last 30 minutes.