为了能够设置对齐方式我用  TStringAlignGrid,网上下有源码。
为了能够作表格合并我用 TAdvStringGrid,网上下无源码。

解决方案 »

  1.   

    既然是自己画,不是可以得到Rect吗? 用canvas.lineto canvas.move 设置点画线固定列居中显示?可能要自己判断把它画在中间了。
      

  2.   

    我来给你回答,首先你去看下一个API函数:DrawText(...),要StringGrid1的第一列居中显示可以在OnDrawCell事件中写这样代码:
    procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    var
      value:String;
    begin
      if ACol=0 then
      begin
        StringGrid1.Canvas.Brush.Color:=clWhite;
        StringGrid1.Canvas.Pen.Color  :=clWhite;
        StringGrid1.Canvas.Rectangle(Rect);
        StringGrid1.Canvas.Font.Color:=clBlue;
        value:=StringGrid1.Cells[ACol,ARow];
        DrawText(StringGrid1.Canvas.Handle,
                 Pchar(value),
                 Length(value),
                 Rect,
                 DT_Center or DT_VCenter);//DT_Center为横着居中显示
                         //DT_VCenter为坚着居中显示
     
     end;
    end;
      

  3.   

    procedure TForm2.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    var
      Txt:String;
    begin
      Txt:=StringGrid1.Cells[ACol,ARow];
      StringGrid1.Canvas.Rectangle(Rect);
      DrawText(StringGrid1.Canvas.Handle,
               Pchar(Txt),
               Length(Txt),
               Rect,
               DT_CENTER or DT_VCENTER );
      //在StringGrid单元格画内画字符串
    end;