精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● Delphi>>控件开发和使用>>LisView & TreeView>>ListView 的字段值

主题:ListView 的字段值
发信人: windfire()
整理人: windfire(2000-12-05 19:09:57), 站内信件
【 在 zhoubaochen (与狼共舞) 的大作中提到: 】
: 我想在 ListView 的 vsReports 方式下显示一些特定的数据,其效果就象
: Windows 的资源管理器中显示文件的 名称、大小、类型...,但问题出来
: 了,ListView 的第一列的数据可以用
: for i := 0 to 10 do
:    .......
给你一个sample是装载CSV文件到ListView:)
列是动态加入,列宽自动设定
包括简单点击column排序的例子

Var
  SortDirect:Boolean=True;
  SortIndex:Integer;
  InSepChar:Char;
  OutSepChar:Char;

Procedure LoadCSV(fName:String);
Var
  fText:TextFile;
  sTemp,sTmp,Buffer,tBuf:String;
  ListItem: TListItem;
//  ColItem:TListColumns;
  iPos,iPos1,iPos2,iCount:Integer;
Begin
  try
    iCount:=0;
    ListItem:=nil;
    AssignFile(fText,fName);
    ReSet(fText);
    MainForm.LVPreview.Items.BeginUpdate;
    While Not EOf(fText) Do Begin
      ReadLn(fText,Buffer);

      tBuf:=Copy(Buffer,1,Length(Buffer));
      With MainForm.LVPreview Do Begin
        iPos:=AnsiPos(InSepChar,tBuf);
        sTemp:=Copy(tBuf,1,iPos-1);
        Delete(tBuf,1,iPos);
        If iCount=0 Then Begin
          Columns.Add;
          Columns.Items[Columns.Count-1].Caption:=sTemp;
        End
        Else Begin
          ListItem:=Items.Add;
          ListItem.Caption:=sTemp;
        End;
        Repeat
          iPos:=AnsiPos(InSepChar,tBuf);
          If iPos=0 Then
            sTemp:=tBuf
          Else
            sTemp:=Copy(tBuf,1,iPos-1);
          Delete(tBuf,1,iPos);
          If icount=0 Then Begin
            Columns.Add;
            Columns.Items[Columns.Count-1].Caption:=sTemp;
          End
          Else Begin
            iPos1:=AnsiPos('SMTP:',sTemp);
            If iPos10 Then Begin
              sTmp:=Copy(sTemp,iPos1,Length(sTemp)-iPos1);
              iPos2:=AnsiPos('%',sTmp);
              sTemp:=Copy(sTmp,6,iPos2-6);
              ListItem.SubItems.Add(sTemp);
            End
            Else Begin
              ListItem.SubItems.Add(sTemp);
            End;
          End;
        Until iPos=0
      End;
      Inc(iCount);
    End;
    With MainForm.LVPreview Do Begin
      For iCount:=0 To Columns.Count-1 Do Begin
        SendMessage(Handle,LVM_SETCOLUMNWIDTH,iCount,LVSCW_AUTOSIZE_US

EHEADER);
      End;
    End;
    MainForm.PanelStatus.Caption:=fName;
  finally
    MainForm.LVPreview.Items.EndUpdate;
    CloseFile(fText);
  end;
//
End;


procedure TMainForm.LVPreviewColumnClick(Sender: TObject;
  Column: TListColumn);
begin
  If SortIndex=Column.Index Then
    SortDirect:=Not SortDirect
  Else
    SortDirect:=SortDirect;
    
  SortIndex:=Column.Index;
  LVPreview.CustomSort(@pSort, 0);
end;

function pSort(Item1, Item2: TListItem; ParamSort: integer): integer; 

stdcall;
Var
  Str1,Str2:String;
  I,lStr1,lStr2,iSort:Integer;
begin
  If SortIndex=0 Then Begin
    Str1:=UpperCase(TListItem(Item1).Caption);
    Str1:=UpperCase(TListItem(Item1).Caption);
  End
  Else Begin
    Str1:=UpperCase(TListItem(Item1).SubItems[SortIndex-1]);
    Str2:=UpperCase(TListItem(Item2).SubItems[SortIndex-1]);
  End;
      
  lStr1:=Length(Str1);
  lStr2:=Length(Str2);

  If lStr1


                
          
      
    
  








--
    读万卷书  行万里路  乘万里风 破万里浪
-============================================-
          博览群书:)
个人主页:http://done.163.net
镜像站点:http://www.netease.com/~top

※ 修改:.windfire 于 May 26 17:35:00 修改本文.[FROM: 202.96.151.158]
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 203.127.206.132]

[关闭][返回]