我有一张表格。在formhow上,我将字段的值初始化为stringgrid单元格,但它在单元格的文本下显示阴影。 我使用波斯语字符来表示字段的价值 我对英语价值做了同样的事,但它运作正常 我很感激任何建议。
输出示例:
答案 0 :(得分:2)
使用enaabled DefaultDrawing
,如果您输入OnDrawCell
,则系统会显示该文字。
由于您使用DT_CALCRECT
DrawText
计算绘画中所需的行高,您必须计算Rect
,FillRect
将填充/清除UnionRect
。 />
您可以使用FillRect
来获取必须填充的最终Rect(示例中为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;
)。
{{1}}