我必须在StringGrid(它的单元格)中居中对齐文本,并且我正在使用您在此处看到的代码。我在这里找到了另一个答案,我编辑了一些东西。
procedure TForm1.StringGrid1DrawCell(Sender: TObject; aCol, aRow: Integer;
aRect: TRect; aState: TGridDrawState);
var
LStrCell: string;
LRect: TRect;
qrt:double;
begin
LStrCell := StringGrid1.Cells[ACol, ARow];
StringGrid1.Canvas.FillRect(aRect);
LRect := aRect;
DrawText(StringGrid1.Canvas.Handle, PChar(LStrCell), Length(LStrCell), LRect, TA_CENTER);
//other code
end;
我正在使用Lazarus
并且它给了我一个错误,因为它无法识别TA_CENTER
。任何解决方案?
答案 0 :(得分:5)
由于您使用的是Lazarus,我不会依赖于特定于平台的Windows API函数,而是使用内置的canvas TextRect
方法。在(未经测试的)代码中可能是:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; aCol, aRow: Integer;
aRect: TRect; aState: TGridDrawState);
var
CellText: string;
TextStyle: TTextStyle;
begin
CellText := StringGrid1.Cells[ACol, ARow];
StringGrid1.Canvas.FillRect(ARect);
TextStyle := StringGrid1.Canvas.TextStyle;
TextStyle.Alignment := taCenter;
StringGrid1.Canvas.TextRect(ARect, 0, 0, CellText, TextStyle);
...
end;
无论如何,您使用了TA_CENTER
常量,由SetTextAlign
函数使用不同的Windows API函数。您应该使用DrawText
函数使用的DT_
个。