请帮忙做个算法(100分)

  • 主题发起人 主题发起人 Vinson
  • 开始时间 开始时间
V

Vinson

Unregistered / Unconfirmed
GUEST, unregistred user!
有三个上限L1,L2,L3(数值大小由用户确定),在Grid的单元格中,当单元格中的数据大于L1时,单元格的颜色变色红色,当大于L2时变为绿色,大于L3时变为黄色。
请问应该如何编程来确定Grid对应单元格的颜色?
 
这倒不难.只是L1=L2或其中有数字相等时怎么办?
你的系统设计有问题[:(!]
 
Supposed you have a table (salary), the following procedure will handle records
in DBGrid with different font color. Hope it's useful to you.

procedure TfrmSalary.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
var
sal,l1,l2,l3:integer;
color1:TColor;
begin
l1:=200;
l2:=500;
l3:=1000;
sal:=adoQuery1.FieldByName('salary').AsInteger;
if sal>l3 then
color1:=clBlue
else
if sal>l2 then
color1:=clGreen
else
if sal>l1 then
color1:=clRed;

dbGrid1.Canvas.Font.Color:=color1;
dbGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
 
Xiaojian:相等时随机选一个,用户的要求是这样,所以我就请大家给点建议。
Ourself:L1,L2,L3由用户决定,只能在设置文件中取得,如在Ini文件中取得。
 
to Vinson:
ourself 不是已经给出答案拉?
 
L1,L2,L3大小不是预先知道的,是用户按需要自己确定,即经常变动的。
 
分数不足可以再加
 
既然是算法,我用自然语言给你描述吧.
(1)有三个edit控件,用以接收用户的输入.
(什么?要读ini文件,那就去该文件里面读吧,这样的代码随便都找得到).
(2)对edit控件的输入进行数据转换
(3)对这三个数进行排序,比如说得到l1<l2<l3
(4)建议你用topgrid,它可以很方便的控制每一个cell的数据及颜色
(5)if tsDBGrid1.Cell[i,j]>l3 then tsDBGrid1.Cell[i,j].Color := clYellow;
else if
esle if同理
没问题的,给分吧.
 
to bswilson:
你这个思路有问题:
  1、L1,L2,L3与颜色对应问题,虽然把L1,L2,L3排序好了,但颜色与其怎么对应。
  2、当Grid中的某个单元格的数据比L1,L2,L3都大时,我取的是最大的哪个上限的颜色,比如L3最大我应该取黄色,但你的程序是取了L1的颜色红色,因为单元格的数值也大于L1。
还有其他思路吗?
 
不会吧,这个问题应该能解决的嘛,我刚才的 语句是有点问题,
if l1<cell[i,j]<l2 then cell[i,j].color:=clred;
if l2<cell[i.j]<l3 then
这种分段区间的if表达式你应该会吧.
 
多人接受答案了。
 
后退
顶部