0

我有一个表格。在 formshow 上,我将字段的值初始化为 stringgrid 单元格,但它在单元格的文本下显示了一个阴影。我使用波斯字符作为字段值。
我对英语值做了同样的事情,但效果很好。
我很感激任何建议。

输出示例:

在此处输入图像描述

4

1 回答 1

2

启用DefaultDrawing后,如果您输入,文本将已经呈现OnDrawCell

由于您正在计算绘画中所需的行高,因此DT_CALCRECTDrawText必须计算Rect应填充/清除的FillRect.
您可以使用UnionRect来获取必须填充的最终 Rect(FillRect在示例中)。

procedure TForm1.FormCreate(Sender: TObject);
begin
  StringGrid1.Cells[1,1] := 'Hallo'#13'World';
  StringGrid1.Cells[2,2] := 'اهای' +13# + 'جهان';
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  S:String;
  drawrect,Fillrect : TRect;
begin
  s := (Sender as TStringGrid).Cells[ACol, ARow];
  drawrect := Rect;
  DrawText((Sender as TStringGrid).Canvas.handle, Pchar(s), Length(s),
      drawrect, DT_CALCRECT or DT_WORDBREAK or DT_LEFT);
  if (drawrect.bottom - drawrect.Top) > (Sender as TStringGrid)
      .RowHeights[ARow] then (Sender as TStringGrid)
      .RowHeights[ARow] := (drawrect.bottom - drawrect.Top);
  UnionRect(FillRect,Rect,DrawRect);
  (Sender as TStringGrid).Canvas.FillRect(FillRect);
  DrawText((Sender as TStringGrid).Canvas.handle, Pchar(s), Length(s),
        drawrect, DT_WORDBREAK or DT_LEFT);
end;
于 2013-07-21T12:25:24.630 回答