Я пытаюсь получить текст в моей StringGrid по центру. После некоторого исследования я придумал эту функцию, опубликованную кем-то здесь, что при использовании в DefaultDraw: False должно работать.
procedure TForm1.StringGrid2DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
S: string;
SavedAlign: word;
begin
if ACol = 1 then begin // ACol is zero based
S := StringGrid1.Cells[ACol, ARow]; // cell contents
SavedAlign := SetTextAlign(StringGrid1.Canvas.Handle, TA_CENTER);
StringGrid1.Canvas.TextRect(Rect,
Rect.Left + (Rect.Right - Rect.Left) div 2, Rect.Top + 2, S);
SetTextAlign(StringGrid1.Canvas.Handle, SavedAlign);
end;
end;
Однако, если я установлю DefaultDraw: False, StringGrid просто будет выглядеть глитчей.
Строки в функции, которые заполняют StringGrid текстом:
Sg.RowCount := Length(arrpos);
for I := 0 to (Length(arrpos) - 1) do
begin
sg.Cells[0,i] := arrpos[i];
sg.Cells[1,i] := arrby[i];
end;
arrpos и arrby являются массивами строк. sg это StringGrid.
Мне нужно после того, как после выполнения текста появиться в центре ячейки.
UPDATE
Для тех, кто страдает от подобных проблем, одна из ключевых проблем с этим фрагментом кода - это выражение if
if ACol = 1 then begin
Эта строка означает, что она будет запускать код только для столбца 1, например второй столбец, поскольку StringGrid равен 0. Вы можете безопасно удалить оператор if, и он будет выполняться и работать БЕЗ необходимости отключать рисование по умолчанию.