Delphi:如何使单元格文本在TStringGrid中心对齐? [英] Delphi: How to make cells' texts in TStringGrid center aligned?

查看:206
本文介绍了Delphi:如何使单元格文本在TStringGrid中心对齐?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

看起来好像很明显。我想要的文本是在单元格的中心,但由于某些原因,我找不到它的属性。如何做到这一点?

It seems something obvious to have. I want the texts to be in the center of the cells, but for some reason I can't find it in properties. How can I do this?

推荐答案

在TStringGrid中没有任何文本中心的属性,但是您可以在DrawCell事件中做到这一点:

There's no property to center the text in TStringGrid, but you can do that at DrawCell event as:

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;

我从这里

更新:

在单元格中写入文本时,将此代码添加到 GetEditText 事件:

to center text while writing in the cell, add this code to GetEditText Event:

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;

这篇关于Delphi:如何使单元格文本在TStringGrid中心对齐?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆