在tstringgrid中没有将文本居中的属性,但在drawcell事件中可以这样做:
procedure TForm1.StringGrid1DrawCell(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;
我发布的代码 here
更新:
若要在单元格中书写时使文本居中,请将此代码添加到 GetEditText 事件:
- procedure TForm1.StringGrid1GetEditText(Sender: TObject; ACol, ARow: Integer;
- var Value: string);
- var
- S : String;
- I: Integer;
- IE : TInplaceEdit ;
- begin
- for I := 0 to StringGrid1.ControlCount - 1 do
- if StringGrid1.Controls[i].ClassName = 'TInplaceEdit' then
- begin
- IE := TInplaceEdit(StringGrid1.Controls[i]);
- ie.Alignment := taCenter
- end;
- end;