热情软件屋

 

如何使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会替我们完成的。也可以进一步添加其他效果,如货币格式。

此问题由李海回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio