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 です。
その後、セルの中央に表示されるテキストを実行する必要があります。
アップデート
同様の問題に苦しんでいる人にとって、このコードの重要な問題の 1 つは、if ステートメントが
if ACol = 1 then begin
この行は、StringGrid が 0 ベースであるため、列 1、たとえば 2 番目の列のコードのみを実行することを意味します。if ステートメントは安全に削除でき、デフォルトの描画を無効にすることなく実行および機能します。