anchor.diff:      PageSize := ClientRowCount;
   end;
   
  +procedure TCustomVisualGrid.FetchDataThreadProgress(Sender: TObject);
  +{$J+}
  +const
  +  PROGRESS: Integer = 0;
  +{$J-}
  +  PROGRESS_CHARS: array[0..3] of string = ('   ', '.  ', '.. ', '...');
  +begin
  +  FClientPanel.Caption := 'LOADING DATA ' + PROGRESS_CHARS[PROGRESS];
  +  Inc(PROGRESS);
  +  if PROGRESS > High(PROGRESS_CHARS) then
  +    PROGRESS := 0;
  +end;
  +
   procedure TCustomVisualGrid.PageIndexEditChange(Sender: TObject);
   var
     LPageIndex: Integer;
  
positive.code:     property PageIndex: Integer read FPageIndex write SetPageIndex default -1;
      property AutoPageSize: boolean read FAutoPageSize write SetAutoPageSize default false;
      property ShowAllData: boolean read FShowAllData write SetShowAllData default false;
  
      property CanPage: boolean read FCanPage write SetCanPage default true;
      property CanSearch: boolean read FCanSearch write SetCanSearch default true;
  
negative.code:   Include(FGUIUpdates, updPageSize);
    FPageSizeEdit.Text := AStr;
    Exclude(FGUIUpdates, updPageSize);
  end;
  
  procedure TCustomVisualGrid.BeforeFetchPage;
  begin
    if Assigned(FDataSource) then
      if FPageIndex >= FPageCount then
        FPageIndex := FPageCount - 1;
  end;
  
  procedure TCustomVisualGrid.FetchPage(out AResult: TPageFetchResult);
  begin
    if Assigned(FDataSource) then
      AResult := FDataSource.FetchPage(
        TPageFetchParams.Create(FPageIndex, FPageSize, nil), FDataTable)
    else
      FillChar(AResult, SizeOf(AResult), #0);
  end;
  
  procedure TCustomVisualGrid.AfterFetchPage(ARefreshColumns: boolean; constref
    APageFetchResult: TPageFetchResult);
  begin
    if Assigned(FDataSource) then
    begin
      FPageCount:=APageFetchResult.PageCount;
  
      if APageFetchResult.TotalDataCount >= 0 then
        FTotalDataCount := APageFetchResult.TotalDataCount
      else
        FTotalDataCount := -1;
  
      FAllRecordsCountLabel.Visible := FTotalDataCount<>-1;
      FAllRecordsCountLabel.Caption:=Format('Total: %d', [FTotalDataCount]);
  
      FPageIndex := APageFetchResult.PageIndex;
  
      if ARefreshColumns then
        ReloadColumns;
      FDrawGrid.RowCount := Length(FDataTable.Rows) + 1;
    end;
    RefreshPageIndexAndGridInterface;
  end;
  
  procedure TCustomVisualGrid.SetPageSize(Value: Integer);
  