这个是我写的装入ListView的语句
ListView1.Clear;
while not ADOQuery4.Eof do
begin
temp := ListView1.Items.Add;
temp.Caption := ADOQuery4.Fields[0].AsString ;
For i := 1 to 7 do
begin
temp.SubItems.Add(ADOQuery4.Fields[i].AsString);
end;
ADOQuery4.Next;
end;
如何在装入ListView的同时设定行的颜色?
ListView1.Clear;
while not ADOQuery4.Eof do
begin
temp := ListView1.Items.Add;
temp.Caption := ADOQuery4.Fields[0].AsString ;
For i := 1 to 7 do
begin
temp.SubItems.Add(ADOQuery4.Fields[i].AsString);
end;
ADOQuery4.Next;
end;
如何在装入ListView的同时设定行的颜色?
var
I: Integer;
begin
ListView1.Clear;
while not ADOQuery4.Eof do
begin
with ListView1.Items.Add do
begin
Caption := ADOQuery4.Fields[0].AsString;
for J := 1 to 7 do SubItems.Add(ADOQuery4.Fields[i].AsString);
Data := Pointer(Random($10000000)); //000000-FFFFFF//颜色赋值
ADOQuery4.Next;
end;
end;
end;procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
Sender.Canvas.Brush.Color := TColor(Item) xor $FFFFFF;
Sender.Canvas.Font.Color := TColor(Item);
end;
这个语句我改为Data:= Pointer(clRed);后每次装载ListView后颜色都有变化,如何固定一种颜色?
这个语句注释掉也改变颜色?好晕啊,我的设想是在装载ListView的同时根据条件将某一行的颜色改为红色。
Data := Pointer(clRed)
else Data := Pointer(clBlack);
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
Sender.Canvas.Brush.Color := TColor(Item) xor $FFFFFF;
Sender.Canvas.Font.Color := TColor(Item);
end;
中的。我这样写为什么不行?
if Now-StrToDate(Item.SubItems.Strings[1])>3 then
begin
Sender.Canvas.Brush.Color := clRed;
Sender.Canvas.Font.Color := clYellow;
end;
begin
ADOQuery1.ConnectionString:=dm.Con_Str;
ADOQuery2.ConnectionString:=dm.Con_Str;
ADOQuery3.ConnectionString:=dm.Con_Str;
ADOQuery4.ConnectionString:=dm.Con_Str;
//ADOQuery5.ConnectionString:=dm.Con_Str;
with ADOQuery3 do
begin
close;sql.clear;
sql.Add('select sysdate from dual');
open;
DateTimePicker1.DateTime:=fieldbyname('sysdate').asdatetime;
end;
case RadioGroup1.ItemIndex of
0: s_g_1:=' order by a.kdsj ';
1: s_g_1:=' order by a.ddsj ';
3: s_g_1:=' order by a.ysmdd ';
end;
case RadioGroup2.ItemIndex of
0: s_g_2:=' asc ';
1: s_g_2:=' desc ';
end;
S_PX:= s_g_1+s_g_2;
AddAdoQuery4(S_PX);
end;procedure TF_YSGL_DU.AddAdoQuery4(O_px:String);
var
i: Integer;
s_lsh:String;
temp: TListItem;
begin
s_lsh:='select a.lsh,a.kdsj,a.ddsj,a.ysmdd,';
s_lsh:=s_lsh+'(select xm from a_ry where lsh=a.sqrlsh) sqrlsh,';
s_lsh:=s_lsh+'(select xm from a_ry where lsh=a.tbrlsh) tbrlsh,';
s_lsh:=s_lsh+'(select mc from a_zywzb where lsh=a.wzlsh) mc,a.wzsl';
s_lsh:=s_lsh+' from a_ysd a,a_zywzb b where a.wzlsh=b.lsh and DJZT = 0'+O_px;
with ADOQuery4 do
begin
close;sql.Clear;
sql.Add(s_lsh);
open;
end;
//AddListView(Sender);
ListView1.Clear;
while not ADOQuery4.Eof do
begin
temp := ListView1.Items.Add;
temp.Caption := ADOQuery4.Fields[0].AsString ;
For i := 1 to 7 do
begin
temp.SubItems.Add(ADOQuery4.Fields[i].AsString);
//temp.Data:= Pointer(Random($10000000)); //000000-FFFFFF//颜色赋值
//temp.Data:= Pointer(clRed);//没有这两句也改变颜色
end;
ADOQuery4.Next;
end;
ADOQuery4.First;
end;procedure TF_YSGL_DU.ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
if Now-StrToDate(Item.SubItems.Strings[1])>3 then
begin
Sender.Canvas.Brush.Color := clRed;
Sender.Canvas.Font.Color := clYellow;
end;
{Sender.Canvas.Brush.Color := TColor(Item) xor $FFFFFF;
Sender.Canvas.Font.Color := TColor(Item); }
end;
procedure TF_YSDCX.SpeedButton4Click(Sender: TObject);
begin
Load_js(DateToStr(DateTimePicker4.DateTime),ComboBox1.Text);
end;procedure TF_YSDCX.Load_js(dusj:String; djzt:String);
var
i: Integer;
s_lsh:String;
temp: TListItem;
begin
s_lsh:='select a.lsh,a.kdsj,a.ddsj,a.ysmdd,';
s_lsh:=s_lsh+'(select xm from a_ry where lsh=a.sqrlsh) sqrlsh,';
s_lsh:=s_lsh+'DECODE(DJZT,0,''未开单'',1,''未指派'',2,''在途'',3,''已结算'') djzt';
s_lsh:=s_lsh+' from a_ysd a where to_char(a.dusj,''yyyy-MM-dd'') ='''+dusj+''' ';
if djzt = '未结算' then
s_lsh:=s_lsh+ ' and a.djzt=''2'' '
else if djzt = '已结算' then
s_lsh:=s_lsh+ ' and a.djzt=''3'' ';
with ADOQ_js do
begin
close;sql.Clear;
sql.Add(s_lsh);
open;
end;
ListView2.Items.Clear;
while not ADOQ_js.Eof do
begin
temp := ListView2.Items.Add;
temp.Caption := ADOQ_js.Fields[0].AsString ;
For i := 1 to 5 do
begin
temp.SubItems.Add(ADOQ_js.Fields[i].AsString);
end;
if now-ADOQ_js.FieldByName('kdsj').AsDateTime>3 then
ListView2.Canvas.Brush.Color:=clBlue;
ADOQ_js.Next;
end;
end;procedure TF_YSDCX.ListView2CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
if Odd(Item.Index) then
begin
Sender.Canvas.Brush.Color := clSkyBlue;
Sender.Canvas.Font.Color := clGray;
end;
if Now-StrToDate(Item.SubItems.Strings[1])>3 then
begin
Sender.Canvas.Brush.Color := clRed;
Sender.Canvas.Font.Color := clYellow;
end;
end;
可以将Item.SubItems.Strings[1]输出来看看是不是你预想的结果
既然你有一个窗体已经成功,你就找找它们的区别
这类问题就只有自己调试了,别人也没有你的数据环境可以调试procedure TF_YSGL_DU.ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
if Odd(Item.Index) then // 如果变色表示已经触发
begin
Sender.Canvas.Brush.Color := clSkyBlue;
Sender.Canvas.Font.Color := clGray;
end; if Now-StrToDate(Item.SubItems.Strings[1])>3 then // 关键是这个条件是否成立
begin
Sender.Canvas.Brush.Color := clRed;
Sender.Canvas.Font.Color := clYellow;
end;
{Sender.Canvas.Brush.Color := TColor(Item) xor $FFFFFF;
Sender.Canvas.Font.Color := TColor(Item); }
end;