使用TStringGrid的DrawCell事件,如下GrdLocation为TStringGrid实例名:
procedure TFrm_Q_Stk_StoreMap.GrdLocationDrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
var iState, str: string;   //iState 1:可用  2:待处理  3:不可用
begin
  inherited;
  if (ACol > 0) and (ARow > 0) then
  begin
    GrdLocation.Canvas.FillRect(Rect);
    str := GrdLocation.Cells[ACol,ARow];
    iState := Copy(str,1,1);
    str := Copy(str,2,Length(str)-1);
    if (gdSelected in State) then
      GrdLocation.Canvas.Brush.Color :=clBlue
    else if iState = '1' then
      GrdLocation.Canvas.Brush.Color :=clWhite
    else if iState = '2' then
      GrdLocation.Canvas.Brush.Color :=$00FFB9B9
    else
      GrdLocation.Canvas.Brush.Color:=$00D0DEDF;    GrdLocation.Canvas.FillRect(Rect);
    DrawText(GrdLocation.Canvas.Handle,PChar(str),Length(str),Rect,DT_CENTER or DT_VCENTER or DT_WORDBREAK);
  end;
end;要在StringGrid的Cell中换行显示,可以用 #13#10,如:
      sCellValue := "ABCD" + #13#10 + CustomerKey + PartCode + ':(' + Store_Qty + ')' + #13#10 + PartName;
      GrdLocation.Cells[X,Y] := sCellValue;

解决方案 »

  1.   

    使用TStringGrid的DrawCell事件,这是在每个格子自画事件时触发,不用For循环。你试下我上面示例的改改看看效果
    procedure TFrm_Q_Stk_StoreMap.GrdLocationDrawCell(Sender: TObject; ACol,
      ARow: Integer; Rect: TRect; State: TGridDrawState);
    var str: string; 
    begin
      if (ACol > 0) and (ARow > 0) then
      begin
        GrdLocation.Canvas.FillRect(Rect);
        str := GrdLocation.Cells[ACol,ARow] + #13#10 + '测试字串';    if (gdSelected in State) then
          GrdLocation.Canvas.Brush.Color :=clBlue
        else
          GrdLocation.Canvas.Brush.Color:=$00D0DEDF;    GrdLocation.Canvas.FillRect(Rect);
        DrawText(GrdLocation.Canvas.Handle,PChar(str),Length(str),Rect,DT_CENTER or DT_VCENTER or DT_WORDBREAK);
      end;
    end;
      

  2.   

    主要是你代码放错了,procedure Tfrmzfmain.canvasgrid; 这个过程在界面改变后,不像DrawCell事件会自动触发重画
      

  3.   

    现在画是可以了,我用了个二维动态记录数组,装载了数据然后在drawcell传入的arow,acol自动取值,现在的问题是,我设置的行和列后,数据填充没有问题了,但是有部分单元格没有数据,我想让其不能点击,等于说是让其失去焦点,怎么搞啊