如何使Tstringgrid中的数字都靠右
编号:QA004076
建立日期: 2001年4月5日 最后修改日期:2001年4月5日
所属类别:
lsnomx:
操作系统: win98
编程工具: delphi 5
问题: 如何使Tstringgrid中的数字都靠右,并且以货币格式显示?
水平: 刚入门
回答:
StringGrid没有这样的属性设置,但利用自绘功能可以很容易地实现。如果Grid的DefaultDrawing属性设置为True(默认值),Delphi会绘制单元格,包括背景色、边框、焦点框、固定单元格的三维效果。如果用户处理了OnDrawCell事件,Delphi会接着调用用户的DrawCell过程。如果DefaultDrawing属性设置为False,Delphi只调用用户的DrawCell过程。我们在自行绘制单元格时一般应设置DefaultDrawing属性为True,这样我们只需要绘制我们需要改变的单元,而其它单元交给Delphi去做好了。下面是一个简单的例子:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
// 只有标题列的字体为粗体
if (ARow = 0 ) then
StringGrid1.Canvas.Font.Style := [fsBold];
if ( ARow = 0 ) or // 标题列
( ACol = 3 ) then // 第3列右对齐
begin
// FillRect将清楚掉Delphi绘制的文字
StringGrid1.Canvas.FillRect(Rect);
DrawText(StringGrid1.Canvas.Handle,
pChar(StringGrid1.Cells[ACol,ARow]),
Length(StringGrid1.Cells[ACol,ARow]),
Rect, // 包含文字的矩形
DT_CENTER or // 水平居中
DT_SINGLELINE or // 不折行
DT_VCENTER) // 垂直居中
end
else if (ACol = 2) then // 第2列右对齐
begin
StringGrid1.Canvas.FillRect(Rect);
DrawText(StringGrid1.Canvas.Handle,
pChar(StringGrid1.Cells[ACol,ARow]),
Length(StringGrid1.Cells[ACol,ARow]),
Rect,
DT_RIGHT or // 水平右对齐
DT_SINGLELINE or
DT_VCENTER)
end
end;
在这里,我们调用Win32 API的DrawText绘制字体,而DrawText可以进行左或右对齐。在绘制过程中,你可以改变文字的字体。我们没有处理背景色、边框、固定单元格的三维效果等,因为Delphi会替我们完成的。也可以进一步添加其他效果,如货币格式。
此问题由李海回答。
| |
|
|
| |
|
|