anchor.diff:      procedure PaintHorizontalLines (aCanvas : TCanvas; const aDrawingRect : TRect);
       procedure SetTopRow(AValue: integer);
       procedure DoPaintTo(aCanvas: TCanvas; aRect: TRect);
  +    procedure DoForEveryRow(aCanvas: TCanvas; const aDrawingRect : TRect; aDrawingAction : TmGanttRowDrawingAction);
  +    procedure DrawRowBottomLine(aCanvas : TCanvas; const aDrawingRect : TRect);
     protected
       procedure Paint; override;
     public
  
positive.code:   mTimeruler, mGanttDataProvider, mGanttHead;
  
  type
  
    { TmGantt }
  
  
negative.code: 
      PaintVerticalLines(aCanvas, aRect);
      PaintHorizontalLines(aCanvas, aRect);
  
    finally
      aCanvas.Unlock;
    end;
  end;
  
  procedure TmGantt.DoForEveryRow(aCanvas: TCanvas; const aDrawingRect: TRect; aDrawingAction: TmGanttRowDrawingAction);
  var
    i, k, limit : integer;
    rowRect : TRect;
  begin
    limit := FHead.DataProvider.RowCount - FHead.TopRow;
  
    rowRect := aDrawingRect;
    rowRect.Bottom:= aDrawingRect.Top + FHead.RowHeight -1;
    k := 0;
    while (rowRect.Bottom < aDrawingRect.Bottom) and (k < limit) do
    begin
      aDrawingAction(aCanvas, rowRect);
  
      rowRect.Top := rowRect.Bottom + 1;
      rowRect.Bottom := rowRect.Bottom + FHead.RowHeight;
      inc(k);
    end;
  
  end;
  
  procedure TmGantt.DrawRowBottomLine(aCanvas: TCanvas; const aDrawingRect: TRect);
  begin
    aCanvas.MoveTo(aDrawingRect.Left, aDrawingRect.Bottom);
    aCanvas.LineTo(aDrawingRect.Right, aDrawingRect.Bottom);
  end;
  
  procedure TmGantt.Paint;
  