一个BUtton按钮,当点击它时会在StringGrid中显示int型数据。
我想让单元格中的值<100的全部变成红色显示。

解决方案 »

  1.   

    用事件里的ongetcellcolor方法,里面有许多参数,控制字体的好像叫Afont,加上判断语句然后直接AFont:=clred;
      

  2.   

    在OnDrawCell事件处理.var
    r:TRect;
    S:String;
    begin
    if (ACol=2) And  (ARow=2) then
    with StringGrid1.Canvas do
    Begin
      Draw(Rect.Left, Rect.Top, Image1.Picture.Graphic);
      r:=Rect;
      Font.Color:=clRed;
      Font.Size:=20;
      Brush.Style := bsClear;
      //TextOut(Rect.Left+20, Rect.Top+20,'XXX');
      s:='XXXXX';
      DrawText(Handle,PChar(s),Length(s),r,DT_CENTER or DT_SINGLELINE or DT_VCENTER);end;
      

  3.   


    procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    var
      S: string;
      v: Double;
      ACanvas: TCanvas;
    begin
      S := StringGrid1.Cells[ACol, ARow];
      ACanvas := StringGrid1.Canvas;
      ACanvas.Font.Assign(StringGrid1.Font);
      if TryStrToFloat(S, v) and (v < 100) then
        ACanvas.Font.Color := clRed;
      ACanvas.FillRect(Rect);
      DrawText(ACanvas.Handle, PChar(s), -1, Rect, DT_CENTER or DT_SINGLELINE or DT_VCENTER);
    end;
      

  4.   


    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Grids, StdCtrls;type
      TForm1 = class(TForm)
        StringGrid1: TStringGrid;
        Button1: TButton;
        procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
          Rect: TRect; State: TGridDrawState);
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
        FButtonClick: Boolean;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    var
      S: string;
      v: Double;
      ACanvas: TCanvas;
    begin
      S := StringGrid1.Cells[ACol, ARow];
      ACanvas := StringGrid1.Canvas;
      ACanvas.Font.Assign(StringGrid1.Font);
      if FButtonClick and TryStrToFloat(S, v) and (v < 100) then
        ACanvas.Font.Color := clRed;
      ACanvas.FillRect(Rect);
      DrawText(ACanvas.Handle, PChar(s), -1, Rect, DT_CENTER or DT_SINGLELINE or DT_VCENTER);
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      FButtonClick := not FButtonClick;
      StringGrid1.Repaint;
    end;end.