Я пытаюсь получить текст в моем StringGrid до центра. После некоторого исследования я придумал эту функцию, размещенную кем-то еще здесь, когда при использовании в DefaultDraw: False должен работать.Центр OnDrawCell Text StringGrid - Delphi
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 просто появляется glitchey.
Линии функции, которые заполняют 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 ACol = 1 then begin
Эта линия означает, что она будет работать только код для столбца 1 например второй столбец, так как StringGrid равен 0. Вы можете безопасно удалить оператор if, и он будет выполняться и работать БЕЗ необходимости отключать чертеж по умолчанию.
Я только попробовал ваш код и он работает отлично. (Delphi 5 и 10 @ Win7) – SimaWB
Проблема с кодом заключалась в том, что процедура для StringGrid2, однако, в коде, указанном как StringGrid1. Еще одна причина, по которой я ненавижу delphi auto-complete. Однако я ДУМАЮ, что метод Дорина Думицы более эффективен. – jskrwyk