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;
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;
用 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;
温度计名称 地点 温度值 时间
A AA 10
B BB 40
C CC 60
D DD 80例如 如果A的值>15则将第一行用红色显示,反之用蓝色显示,温度值是随时从硬件读取得,不写数据库
望各位高手能多指点,最好能给个范例
DBGrid1.Canvas.Brush.Color=0;
.......
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
ListItem: TListItem;
ListView: TListView;begin
with ListView do
begin ... ListItem := Items.Add;
ListItem.Caption := 'aaa';
ListItem.SubItems.Add('bbb'); ...
end;
end;
ListItem.Caption := 'aaa';
ListItem.SubItems.Add('bbb');Subitem的颜色可以改变,但Caption的颜色改变不了
bbb的颜色变了,aaa的颜色如何改变呀
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;
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;
简单搞了个例子:
新建一个项目,在主窗体上放一个 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;