现有4条数据要用不同的颜色在屏幕上显示出来(每条数据有4个字段组成),而这4条数据的
值是不断变化的,颜色要由数据的其中一个字段的值来决定,用什么方法牙,ListBox没有办法改变
其中某一行的颜色,而StringGrid也很难实现呀,敬请各位高手帮忙

解决方案 »

  1.   

    要用grid 的话就在OnDrawDataCell 事件写代码
      

  2.   

    OnDrawDataCell中修改一下cell的color属性即可
      

  3.   

    说明 数据没有固定的数据源,如下:
      温度计名称    地点      温度值  时间
        A            AA          10
        B            BB          40
        C            CC          60
        D            DD          80例如 如果A的值>15则将第一行用红色显示,反之用蓝色显示,温度值是随时从硬件读取得,不写数据库
    望各位高手能多指点,最好能给个范例
      

  4.   

    if Field.AsString='' then
      DBGrid1.Canvas.Brush.Color=0;
    .......
      

  5.   

    如果是用 ListView 显示的话在 OnCustomDraw 事件里写:  if Item.SubItems[3] = '1'then  //你的条件,这是第4列为1
      begin
        Sender.Canvas.Brush.Color := clSilver;  //底色
        Sender.Canvas.Font.Color := clBlue;  //字体颜色
      end
      else
      begin
        Sender.Canvas.Brush.Color := clWindow;
        Sender.Canvas.Font.Color := clBlack;  
      end
      

  6.   

    ListView怎么用呢,我应该怎么建SubItems和 Items呢,怎样赋值呢,还没有用过ListView
      

  7.   

    ListView 的用法 Delphi 的帮助里有很详细的ViewStyle设为vsReport;关键是这几句:var
      ListItem: TListItem;
      ListView: TListView;begin
       with ListView do
       begin    ...    ListItem := Items.Add;
        ListItem.Caption := 'aaa';
        ListItem.SubItems.Add('bbb');    ...
       end;
    end;
      

  8.   

    TO:tjianliang(乡关何处)  不行呀,ListView没有效果,什么也没有填加呀
      

  9.   

    ListItem := Items.Add;
        ListItem.Caption := 'aaa';
        ListItem.SubItems.Add('bbb');Subitem的颜色可以改变,但Caption的颜色改变不了
    bbb的颜色变了,aaa的颜色如何改变呀
      

  10.   

    procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    var s:string;
       c:integer;
    begin
       WITH Sender AS TStringGrid, Canvas DO
       begin
          s:=Cells[ACol, ARow];
          c:=strtointdef(Cells[1, ARow],0);
          Font.Color:=c;
          FillRect(Rect);
          TextRect(Rect, Rect.Left, Rect.Top, s);
       end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var i,j:integer;
    begin
       Randomize;
       for i:=1 to 4 do
          for j:=1 to 4 do
              StringGrid1.Cells[i,j]:=inttostr(Random(65000));
    end;
      

  11.   

    procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; 
    Field: TField; State: TGridDrawState); 
    begin 
    DBGrid1.Canvas.Font.Color:=clred; 
    DBGrid1.Canvas.Brush.Color:=clgray; {//改变某个单元格的颜色 
    if (Field.FullName='SIZE')and (Field.AsInteger=2) then 
    begin 
    DBGrid1.Canvas.TextRect(rect,rect.Left,rect.Top,Field.AsString); 
    end;} //改变某行的颜色,该行的NAME字段值=aaa 
    if Field.DataSet.FieldByName('NAME').asString='aaa' then 
    DBGrid1.Canvas.TextRect(Rect,rect.Left,rect.Top,Field.AsString); 
    end; procedure TForm1.Button2Click(Sender: TObject); 
    begin 
    //改变某个列的颜色 
    DBGrid1.Columns[1].Color:=clgreen; 
    DBGrid1.Columns[1].Font.color:=clred; 
    end; 
      

  12.   

    用 ListView 实现时 Caption 的颜色也可以改变啊?
    简单搞了个例子:
    新建一个项目,在主窗体上放一个 ListView ,一个 Button
    ListView 作如下设置:
    ListView1.ViewStyle := vsReport;
    处理 OnCustomDrawItem 事件procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
      Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
    begin
      if StrToInt(Item.SubItems[0]) mod 2 = 1 then  //你的条件,这里表示第2列为奇数
      begin
        Sender.Canvas.Brush.Color := clSilver;  //底色
        Sender.Canvas.Font.Color := clBlue;  //字体颜色
      end
      else
      begin
        Sender.Canvas.Brush.Color := clWindow;
        Sender.Canvas.Font.Color := clBlack;
      end
    end;Button 的 OnClick 里添加procedure TForm1.Button1Click(Sender: TObject);
    var
      ListItem: TListItem;
    begin
      Randomize;
      ListItem := ListView1.Items.Add;
      ListItem.Caption := IntToStr(Random(1000));
      ListItem.SubItems.Add(IntToStr(Random(1000)));
      ListItem.SubItems.Add(IntToStr(Random(1000)));
    end;