如何对listview每一行字体颜色进行处理

zh1029 2003-04-29 02:58:35
listvies控件report模式,如何对每一行的字体颜色进行处理,比如第一行字体红色,第二行字体为绿色。
...全文
305 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Olamny 2003-06-07
  • 打赏
  • 举报
回复
从一个网站上拿来的,ListView 和 DBGrid:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, Grids, DBGrids,comctrls;

type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
ADOTable1: TADOTable;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
ListView1: TListView;
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
procedure FormCreate(Sender: TObject);
procedure ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);
begin
adotable1.Open;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
adotable1.Close;
end;

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if DBGrid1.DataSource.DataSet.RecNo mod 2 = 0 then //条件判断
begin
with DBGrid1 do
begin
Canvas.Font.Color:=clRed;
Canvas.Brush.Color:=clYellow;
end;
end;
DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);

end;

procedure TForm1.FormCreate(Sender: TObject);
const
Names: array[0..5, 0..1] of string = (
('Test1', 'Test1Detail'),
('Test2', 'Test2Detail'),
('Test3', 'Test3Detail'),
('Test4', 'Test4Detail'),
('Test5', 'Test5Detail'),
('Test6', 'Test6Detail')
);

var
I: Integer;
NewColumn: TListColumn;
ListItem: TListItem;


begin
with ListView1 do
begin

ViewStyle := vsReport;

NewColumn := Columns.Add;
NewColumn.Caption := 'Last';
NewColumn := Columns.Add;
NewColumn.Caption := 'First';

for I := Low(Names) to High(Names) do
begin
ListItem := Items.Add;
ListItem.Caption := Names[I][0];
ListItem.SubItems.Add(Names[I][1]);
end;
end;


end;

procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
if ListView1.ViewStyle = vsReport then
begin
if Odd(Item.Index) then
Listview1.Canvas.Brush.Color := $EEFFEE
else
ListView1.Canvas.Brush.Color:=$00E9FAFC;
end;

end;

end.
WorldCreater 2003-06-07
  • 打赏
  • 举报
回复
嗯总算有点明白了。
响应这个事件 OnwerDraw 属性不用设成 true
WorldCreater 2003-06-07
  • 打赏
  • 举报
回复
这样写代码,listveiw里item还是看不见,虽然存在---鼠标移到caption时能见着hine
点击一下能修改caption
WorldCreater 2003-06-07
  • 打赏
  • 举报
回复
to: kiboisme(还是铁棒.....针)

那显示item的部分呢?


光这些代码还不能显示item啊。。。。。。
怎么就没一个人回答问题写完整的
sherry3000 2003-04-29
  • 打赏
  • 举报
回复
用一个简单的判断嘛,比如你想上三种颜色,那么除以3的余数分别是0、1、2的就上不同的颜色,很简单的!
蓝色光芒 2003-04-29
  • 打赏
  • 举报
回复
在List的 AdvancedCustomDrawItem里写如下代码:
procedure TGuestConsumeForm.ListAdvancedCustomDrawItem(
Sender: TCustomListView; Item: TListItem; State: TCustomDrawState;
Stage: TCustomDrawStage; var DefaultDraw: Boolean);
begin
List.Canvas.Font.Color := clBlack;
case Item.Index of
1: List.Canvas.Font.Color := clBlue;
2: List.Canvas.Font.Color := clNavy;
3: List.Canvas.Font.Color := $00FF8080;
4: List.Canvas.Font.Color := clRed;
5: List.Canvas.Font.Color := clGreen;
6: List.Canvas.Font.Color := clRed;
.......
end;
end;
记住 一定要用Canvas.Font...
risingsoft 2003-04-29
  • 打赏
  • 举报
回复
吹毛求庇
zh1029 2003-04-29
  • 打赏
  • 举报
回复
没有人知道怎么处理吗?

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧