проблема с кодом для строковой сетки (выравнивание по центру) - PullRequest
0 голосов
/ 13 июля 2011

Delphi: Как выровнять тексты ячеек в центре TStringGrid по центру?

Когда я использую верхний код (часть OnDraw), он не удаляет первый текст и пишет новый текст на старом тексте, и один элемент дублируется.

1 Ответ

2 голосов
/ 13 июля 2011

Вам необходимо добавить вызов к TCanvas.FillRect перед записью нового текста:

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  S: String;
begin
  S := StringGrid1.Cells[ACol, ARow];
  StringGrid1.Canvas.FillRect(Rect);
  SetTextAlign(StringGrid1.Canvas.Handle, TA_CENTER);
  StringGrid1.Canvas.TextRect(Rect,
    Rect.Left + (Rect.Right - Rect.Left) div 2, Rect.Top + 2, S);
end;

Обратите внимание, что вам также нужно убедиться, что для TStringGrid.DefaultDrawing установлено значение False вчтобы это работало.

...