私はStringGridのテキストを中央に取得しようとしています。いくつかの研究の後、DefaultDraw:Falseで使用すると他の誰かがこの関数を投稿しました。OnDrawCell Center 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です。
これは、セルの中央に表示されるテキストを実行した後に必要です。声明
if ACol = 1 then begin
は、その行は、それが唯一の列のコードを実行することを意味している場合も同様の問題のコードのこの部分での重要な課題の一つで苦しむ人々のためにUPDATE
です1例StringGridは0ベースのため、2番目の列です。 if文を安全に削除すると、デフォルトの描画を無効にすることなく実行され、動作します。
私はちょうどあなたのコードを試してみた中で動作し、それが正常に動作します。 (Delphi 5 and 10 @ Win7) – SimaWB
コードの問題は、プロシージャがStringGrid2用だが、コードではStringGrid1としてリストされているということでした。私はデルファイオートコンプリートを嫌っている別の理由。私はドリンDuminicaの方法はとにかく効率的だと思う。 – jskrwyk