var List:TListView; begin List:=listview.items.add(); while not Table.Eof do begin List.Item.AddString(Table.FieldValues['字段名1']), List.Item.AddString(Table.FieldValues['字段名2']), Table.Next end end很久没有写程序,也不知道对不对,就当时抛砖引玉的作用吧。
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls;type TLine = array[0..4] of string;type TForm1 = class(TForm) ListView1: TListView; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private 宣言 } public procedure Add_Columns(ColName: String; ColWidth: integer); procedure Write_ListItem(LineArray: TLine); procedure Init_ListView; { Public 宣言 } end;var Form1: TForm1;implementation{$R *.dfm} procedure TForm1.Init_ListView; //初始Header var i: integer; begin ListView1.Columns.BeginUpdate; ListView1.Columns.Clear; for i:=0 to 4 do begin Add_Columns('column'+IntToStr(i), 50); end; ListView1.Columns.EndUpdate; end;procedure TForm1.Add_Columns(ColName: String; ColWidth: integer);//Add a column var ListCol: TListColumn; begin ListCol := ListView1.Columns.Add; ListCol.Caption := ColName; ListCol.Width := ColWidth; end;procedure TForm1.Write_ListItem(LineArray:TLine); //Insert a row var ListItem: TListItem; j: integer; begin ListItem := ListView1.Items.Add; ListItem.Caption := LineArray[0]; for j := 1 to 4 do begin ListItem.SubItems.Add(LineArray[j]); end; end;procedure TForm1.Button1Click(Sender: TObject); const line: TLine = ('1','2','3','4','5'); begin ListView1.ViewStyle := vsReport; ListView1.RowSelect := true; Init_ListView; //Header ListView1.Items.BeginUpdate; Write_ListItem(line); //(注:此処只是一行、自己将数据库的查询记录循環) ListView1.Items.EndUpdate; end;end.
在Windoes编程中列表视图(ListView)是一个通用控件,当将其样式设为Report时,系统将自动为它加上一个表头控件(以下简称表头),但通常我们不能直接对这个表头控件进行操作。同样Delphi的TListView组件也没有为我们提供可以直接对该表头进行控制的方法,这篇文章介绍一种通过自定义组件的方法,对Delphi的TListView组件进行功能增强,做一个通用的列表视图但是它增加了以下功能:1) 增加一个可以从外部调用的排序方法,当视图的显示样式为Report时,点击各列的表头按钮可按其列值进行排序;2) 点击各列的表头按钮进行排序的同时在视图的表头上按排序方向绘制一个箭头,其效果类似Outlook Express;3) 增加视图表头的字体属性;4) 增加一个背景图属性。通过代码编写增强了Delphi通用列表视图的功能,但它仍是一个通用的列表视图控件,效果如下图。 自定义组件的基本步骤请参见有关文章,但是在此我们选择的基类是TListView,下面我们直接从Delphi自动生成的组件单元文件的数据类型定义部份开始(本文代码在Delphi 4.0下完成)。一、将Delphi自动生成的单元文件的数据类型定义部份修改为: typeTListView1 = class(TListView)private FaToz :Boolean; FoldCol :Integer; FPicture :TPicture; FHeaderFont:TFont; procedure SetHeaderFont(Value:TFont); procedure SetHeaderStyle(phd:PHDNotify); procedure DrawHeaderItem(pDS:PDrawItemStruct); procedure SetPicture(Value: TPicture); procedure PictureChanged(Sender: TObject); procedure LVCustomDraw(Sender:TCustomListView;const ARect:TRect;var DefaultDraw:Boolean); procedure DrawBack;protected procedure WndProc(var Message : TMessage); override;public constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure SortColumn(Column: TListColumn);published property BackPicture: TPicture read FPicture write SetPicture; property HeaderFont: TFont read FHeaderFont write SetHeaderFont;end;
List:TListView;
begin
List:=listview.items.add();
while not Table.Eof do
begin
List.Item.AddString(Table.FieldValues['字段名1']),
List.Item.AddString(Table.FieldValues['字段名2']),
Table.Next
end
end很久没有写程序,也不知道对不对,就当时抛砖引玉的作用吧。
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;type TLine = array[0..4] of string;type
TForm1 = class(TForm)
ListView1: TListView;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private 宣言 }
public
procedure Add_Columns(ColName: String; ColWidth: integer);
procedure Write_ListItem(LineArray: TLine);
procedure Init_ListView;
{ Public 宣言 }
end;var
Form1: TForm1;implementation{$R *.dfm}
procedure TForm1.Init_ListView; //初始Header
var i: integer;
begin
ListView1.Columns.BeginUpdate;
ListView1.Columns.Clear;
for i:=0 to 4 do begin
Add_Columns('column'+IntToStr(i), 50);
end;
ListView1.Columns.EndUpdate;
end;procedure TForm1.Add_Columns(ColName: String; ColWidth: integer);//Add a column
var
ListCol: TListColumn;
begin
ListCol := ListView1.Columns.Add;
ListCol.Caption := ColName;
ListCol.Width := ColWidth;
end;procedure TForm1.Write_ListItem(LineArray:TLine); //Insert a row
var
ListItem: TListItem;
j: integer;
begin
ListItem := ListView1.Items.Add;
ListItem.Caption := LineArray[0];
for j := 1 to 4 do begin
ListItem.SubItems.Add(LineArray[j]);
end;
end;procedure TForm1.Button1Click(Sender: TObject);
const line: TLine = ('1','2','3','4','5');
begin
ListView1.ViewStyle := vsReport;
ListView1.RowSelect := true;
Init_ListView; //Header ListView1.Items.BeginUpdate;
Write_ListItem(line); //(注:此処只是一行、自己将数据库的查询记录循環)
ListView1.Items.EndUpdate;
end;end.