字符串网格代码的问题(居中对齐)

发布于 2024-11-19 21:15:07 字数 241 浏览 3 评论 0原文

Delphi:如何制作单元格的文本在 TStringGrid 中心对齐?

当我使用顶部代码(OnDraw 部分)时,它不会删除第一个文本并在旧文本上写入新文本,一个 sel 将重复。

Delphi: How to make cells' texts in TStringGrid center aligned?

When I use the top code (OnDraw part), it doesn't delete the first text and write the new text on the old text and one sel will duplicate .

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

执手闯天涯 2024-11-26 21:15:07

在写出新文本之前,您需要添加对 TCanvas.FillRect 的调用:

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  S: String;
begin
  S := StringGrid1.Cells[ACol, ARow];
  StringGrid1.Canvas.FillRect(Rect);
  SetTextAlign(StringGrid1.Canvas.Handle, TA_CENTER);
  StringGrid1.Canvas.TextRect(Rect,
    Rect.Left + (Rect.Right - Rect.Left) div 2, Rect.Top + 2, S);
end;

请注意,您还必须确保将 TStringGrid.DefaultDrawing 设置为 False 才能使其正常工作。

You need to add a call to TCanvas.FillRect before writing out the new text:

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  S: String;
begin
  S := StringGrid1.Cells[ACol, ARow];
  StringGrid1.Canvas.FillRect(Rect);
  SetTextAlign(StringGrid1.Canvas.Handle, TA_CENTER);
  StringGrid1.Canvas.TextRect(Rect,
    Rect.Left + (Rect.Right - Rect.Left) div 2, Rect.Top + 2, S);
end;

Note you'll also have to make sure that the TStringGrid.DefaultDrawing is set to False in order for this to work.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文