排序的图标问题?

lsz_615 2003-01-07 10:37:56
当用ListView排序时,点击列标头时(Column),如何实现指示升序和降序的三角图标?象Windows中的我的电脑、FoxMail等中的ListView排序!尽量有源代码呈现。
...全文
41 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
_i_ 2003-02-14
  • 打赏
  • 举报
回复
**********抢分行动***********
碰到问题查不到,花了半天时间作了一个,不敢独享。
ADO类的数据集有Sort,但是TClientDataSet没有,故作。

procedure SortCDS(Column:TColumn);
function FindColumn(Grid:TDbGrid;Name:string):TColumn;
var
i:integer;
begin
Result:=nil;
for i:=0 to Grid.Columns.Count-1 do
if Grid.Columns.Items[i].FieldName=Name then
Result:=Grid.Columns.Items[i];
end;
var
DataSet:TClientDataSet;
ASC:boolean;
Clm:TColumn;
begin
DataSet:=TClientDataSet(Column.Field.DataSet);
if Assigned(DataSet) and (not DataSet.IsEmpty) then
begin
if DataSet.IndexName=Column.Fieldname then
ASC:=StrPos(PChar(Column.Title.Caption),'▼')<>nil;
Clm:=FindColumn(TDbGrid(Column.Grid),DataSet.IndexName);
if Assigned(Clm) then
begin
DataSet.DeleteIndex(DataSet.IndexName);
Clm.Title.Caption:=Copy(Clm.Title.Caption,1,Length(Clm.Title.Caption)-2);
end;
if Asc then
begin
DataSet.AddIndex(Column.Fieldname,Column.FieldName,
[ixCaseInsensitive,ixDescending]);
Column.Title.Caption:=Column.Title.Caption+'▲';
end
else begin
DataSet.AddIndex(Column.Fieldname,Column.FieldName,[ixCaseInsensitive]);
Column.Title.Caption:=Column.Title.Caption+'▼';
end;
DataSet.IndexName:=Column.Fieldname;
end;
end;
jackystar 2003-01-17
  • 打赏
  • 举报
回复
up
Billy_Chen28 2003-01-08
  • 打赏
  • 举报
回复
1、用ImageList1找几个图标就可以了
2、定义列的大小
Billy_Chen28 2003-01-07
  • 打赏
  • 举报
回复
排序用ListViewColumnClick和ListViewCompare,看一下delphi自带的帮助!
图标用imaglist

参考下面:
procedure TMainForm.ListViewColumnClick(Sender: TObject;
Column: TListColumn);
begin
if nSortCol= Column.Index then
AscSort:= not AscSort
else
AscSort:= True;
nSortCol := Column.Index;
ListView.AlphaSort;
end;



procedure TMainForm.ListViewCompare(Sender: TObject; Item1,
Item2: TListItem; Data: Integer; var Compare: Integer);
CONST
(* ListView1 Column Headers *)
COLUMN_FILENAME = 0;
COLUMN_SIZE = 4;
COLUMN_ATTR = 3;
COLUMN_MODIFYDATE = 5;
var
size1,size2:integer;
Result: INTEGER;
begin
ListView.HeaderSortColumn:=nSortCol;
case nSortCol of
COLUMN_FILENAME:
Result := CompareText(Item1.Caption,Item2.Caption);
COLUMN_SIZE:
begin
size1 := StrToInt( Item1.SubItems.Strings [ nSortCol - 1 ] );
size2 := StrToInt( Item2.SubItems.Strings [ nSortCol - 1 ] );
Result := ( size1 - size2 );
end;
else
Result := CompareText(Item1.SubItems[nSortCol - 1],Item2.SubItems[nSortCol - 1]);
end;

IF AscSort THEN

Compare :=Result;

else

Compare := -Result;

end;

图标只有你自己找了:)
lsz_615 2003-01-07
  • 打赏
  • 举报
回复
排序我已经实现了,基本和你的代码相同。
图标必须自己画上去吗?有没有更方便的方法?代码case中COLUMN_SIZE=4中那部分有什么用?

5,930

社区成员

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

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