用SncCurrencyEdit控件,这个控件能实现这个功能。

解决方案 »

  1.   

    DBGrid有自已的Canvas,可以自己画上去,如果只是要画线也比较简单。
      

  2.   

    johnsonrao(johnson) ,自己画容易嘛?接着说呀!
      

  3.   

    DrawColumnCell里对DBGrid.Canvas画就可以了。
      

  4.   

    好了改变底色只要在Column属性框改Color属性procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    var R: TRect;
        i,j: Integer;
    begin
         if Column.Index=0 then // 你要画的列
         begin
              i:=Column.Font.Size; // 每个字符的间隔
              R:=Rect;
              R.Left:=R.Left;
              R.Top:=R.Top;
              R.Right:=R.Right;
              R.Bottom:=R.Bottom;
              For j:=1 to (R.Right-R.Left) div i do
              begin
                   DBGrid1.Canvas.Pen.Color:=clBlue; // 兰色线条
                   DBGrid1.Canvas.MoveTo(R.Right-j*i,R.Bottom-1);
                   DBGrid1.Canvas.LineTo(R.Right-j*i,R.Top-1);
              end;
         end;
    end;你试试吧。
      

  5.   

    还是用控件吧。这个简单。你到http://delphi.mychangshu.com/downfile.asp?ID=450&location=kjbl.rar
    这个上面下个会计软件的源码,上面就有这个控件
      

  6.   

    改一改,要选标准字体(每个数字都一样大小)procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    var R: TRect;
        i,j: Integer;
    begin
         if Column.Index=0 then // 你要画的列
         begin
              i:=Column.Font.Size; // 每个字符的间隔
              R:=Rect;
              For j:=1 to (R.Right-R.Left) div i do
              begin
                   DBGrid1.Canvas.Pen.Color:=clBlue; // 兰色线条
                   DBGrid1.Canvas.MoveTo(R.Right-j*i,R.Bottom-1);
                   DBGrid1.Canvas.LineTo(R.Right-j*i,R.Top-1);
              end;
         end;
    end;
      

  7.   

    改一改,要选标准字体(每个数字都一样大小)procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    var R: TRect;
        i,j: Integer;
    begin
         if Column.Index=0 then // 你要画的列
         begin
              i:=Column.Font.Size; // 每个字符的间隔
              R:=Rect;
              For j:=1 to (R.Right-R.Left) div i do
              begin
                   DBGrid1.Canvas.Pen.Color:=clBlue; // 兰色线条
                   DBGrid1.Canvas.MoveTo(R.Right-j*i,R.Bottom-1);
                   DBGrid1.Canvas.LineTo(R.Right-j*i,R.Top-1);
              end;
         end;
    end;如果显示不对就调整 i:=Column.Font.Size 的大小
    和R.Right-j*i的起始位置。
      

  8.   

    我是在学习,用其它控件的就不要再来了!johnsonrao(johnson) ,效果是有了可是位置还是不对,有没有办法让数字都对上位置的,我可能会用英文字体,每个数字大小不一样。不过至少我现在知道怎样画了,多谢!大家继续讨论吧。
      

  9.   

    这个绝对漂亮,哈哈,自己收住先用!procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    var R: TRect;
        i,j: Integer;
        S: String;
    begin
         if Column.Index=0 then
         begin
              i:=Column.Font.Size;
              S:=DBGrid1.DataSource.DataSet.FieldByName(Column.FieldName).asString;
              R:=Rect;
              DBGrid1.Canvas.Brush.Color:=clInfoBk;
              DBGrid1.Canvas.FillRect(R);
              DBGrid1.Canvas.Pen.Color:=clBlack;
              DBGrid1.Canvas.MoveTo(R.Left-1,R.Bottom);
              DBGrid1.Canvas.LineTo(R.Left-1,R.Top-1);
              DBGrid1.Canvas.LineTo(R.Right,R.Top-1);
              DBGrid1.Canvas.LineTo(R.Right,R.Bottom);
              DBGrid1.Canvas.LineTo(R.Left-1,R.Bottom);
              For j:=1 to (R.Right-R.Left) div i do
              begin
                   DBGrid1.Canvas.Pen.Color:=clBlue;
                   DBGrid1.Canvas.MoveTo(R.Right-j*i,R.Bottom-1);
                   DBGrid1.Canvas.LineTo(R.Right-j*i,R.Top-1);
                   if j<=Length(S) then DBGrid1.Canvas.TextOut(R.Right-j*i+2,R.Top+2,S[Length(S)-j+1]);
              end;
         end;
    end;
      

  10.   

    再改一句:          S:=Format('$%*.*n',[3,2,DBGrid1.DataSource.DataSet.FieldByName(Column.FieldName).asFloat]);
      

  11.   

    今天CSDN人太少,算了不等了。