delphi中DBGrid里的数据满足条件的以显示红色

如何让delphi中DBGrid里的数据满足条件的以显示红色,(DBGrid里的字段包含:用户名,用户类型,电话)条件是用户类型为“免费”的数据列都以红色显示,请给出具体... 如何让delphi中DBGrid里的数据满足条件的以显示红色,(DBGrid里的字段包含:用户名,用户类型,电话)条件是用户类型为“免费”的数据列都以红色显示,请给出具体示范源码。 展开
 我来答
百度网友bc2d03b71
推荐于2018-04-30 · 超过19用户采纳过TA的回答
知道答主
回答量:62
采纳率:100%
帮助的人:48.2万
展开全部

在DBGrid DrawDataCell事件下写:

procedure TForm2.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;

  Field: TField; State: TGridDrawState);

begin

  if Field.Index = 1 then {这里检测第几列 范围0..max}

    if Field.AsString = '免费' then {检测是否免费(你要是用其他类型表示用户类型你可以改)}

    begin

     {这里你随便画反正有Rect}

      TDBGrid(Sender).Canvas.Brush.Style:=bsClear;

      TDBGrid(Sender).Canvas.Pen.Color:=clRed; {颜色}

      TDBGrid(Sender).Canvas.Rectangle(Rect);

      {DBGrid1}

    end;

end;

//下面是既支持列高亮又支持行高亮

type

  TThiefDBGrid = class(TDBGrid)

     property DataLink;

  end;

                    {DBGrid1的DrawDataCell事件}

procedure TFormMain.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;

  Field: TField; State: TGridDrawState);

begin

  if RadioButton1.Checked then

  begin

    if Not (TThiefDBGrid(TDBGrid(Sender)).DataLink.Fields[1{这里是用户类型列号}].AsString = ComboBox1.Text{是否等于'免费用户'}) then

      Exit;

  end

  else

  begin

    if Not ((Field.Index = 1{这里是用户类型列号})and(Field.AsString = ComboBox1.Text)) then

      Exit;

  end;

  with TDBGrid(Sender) do

  begin

    if not CheckBox2.Checked{这里决定字高亮还是背景高亮} then

    begin

      Canvas.Font.Color:= not ColorBox1.Selected;

      Canvas.Brush.Color:=ColorBox1.Selected;{颜色}

    end

    else

    begin

      Canvas.Font.Color:=ColorBox1.Selected;{颜色}

    end;

    DefaultDrawDataCell(Rect,Field,State);

  end;

end;

给你写了个例子演示(如图)

要源码的话留邮箱

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式