New account

manuelles Scrollen von TStringGrid  Bottom

  • 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
  • 0 users

This list is based on users active over the last 30 minutes.