如何将表格控件(如tsgrid,stringgrid)中某个单元格中的部分字符高量显示?如单元格的内容为“今天深圳天气晴朗,北京天气阴天”,将其中的“深圳”二字用红色显示,其他字符颜色不变。

解决方案 »

  1.   

    写OnDrawCell事件自己画,改变StringGrid.Canvas.Font.color,用DrawText、TextRect或TextOut函数输出
      

  2.   

    我觉得只有用DrawText、TextRect或TextOut函数输出
      

  3.   

    procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    var DRect: TRect;
        Mode,Len: Integer;
        CellStr: WideString;
        S1,S2: String;
    begin
      StringGrid1.Canvas.FillRect(Rect);  DRect.Top := Rect.Top+3;
      DRect.Left := Rect.Left+2;
      DRect.Right := Rect.Right;
      DRect.Bottom := Rect.Bottom ;  if ARow=0 then
        Mode := DT_CENTER
      else
        Mode := DT_LEFT;  CellStr := '今天深?天气晴朗';
      Len := Length(CellStr);
      S2 := copy(CellStr,Len,1);  if (ARow=0) then begin
        S1 := copy(CellStr,1,Len-1);
        DrawText(StringGrid1.Canvas.Handle,PChar(S1),Length(S1),DRect,Mode);    StringGrid1.Canvas.Font.Color := clRed;
        DRect.Left := Rect.Left + StringGrid1.Canvas.TextWidth(CellStr) + 2;
        DrawText(StringGrid1.Canvas.Handle,PChar(S2),Length(S2),DRect,Mode);
      end
      else begin
        S1 := CellStr;
        DrawText(StringGrid1.Canvas.Handle,PChar(S1),Length(S1),DRect,Mode);
      end;
    end;