以前用过的,不记得了急用......

解决方案 »

  1.   

    var
      FrmMain: TFrmMain;
      UpDown: array [0..3] of Boolean;
    function CustomSortProc(Item1, Item2: TListItem; ParamSort: integer):
      integer; stdcall;
    begin
      case ParamSort of
        0:
        begin
          if UpDown[0] = True then
            Result := CompareText(Item1.Caption,Item2.Caption)
          else
            Result := -CompareText(Item1.Caption,Item2.Caption);
        end;
        1:
        begin
          if UpDown[1] = True then
            Result := CompareText(Item1.SubItems[0],Item2.SubItems[0])
          else
            Result := -CompareText(Item1.SubItems[0],Item2.SubItems[0]);
        end;
        2:
        begin
          if UpDown[2] = True then
            Result := CompareText(Item1.SubItems[1],Item2.SubItems[1])
          else
            Result := -CompareText(Item1.SubItems[1],Item2.SubItems[1]);
        end;
        3:
        begin
          if UpDown[3] = True then
            Result := CompareText(Item1.SubItems[2],Item2.SubItems[2])
          else
            Result := -CompareText(Item1.SubItems[2],Item2.SubItems[2]);
        end;
      end;
    end;
    procedure TFrmMain.ListView1ColumnClick(Sender: TObject;
      Column: TListColumn);
    var
      I: Integer;
    begin
      for I := 0 to listview1.Columns.Count - 1 do
        listview1.Columns[I].ImageIndex := -1;
      listview1.CustomSort(@CustomSortProc,Column.Index);
      //升序
     { if UpDown[Column.Index] = True then
        Column.ImageIndex := 0
      else
      //降序
        Column.ImageIndex := 1; }
      UpDown[Column.Index] := not UpDown[Column.Index];
    end;
      

  2.   

    //参考如下代码~~
    procedure TForm1.ListView1ColumnClick(Sender: TObject;
      Column: TListColumn);
    var
      I: Integer;
    begin
      if Abs(TListView(Sender).Tag) = Column.Index + 1 then
        TListView(Sender).Tag := -TListView(Sender).Tag
      else TListView(Sender).Tag := Column.Index + 1;
      TListView(Sender).AlphaSort;  for I := 0 to TListView(Sender).Columns.Count - 1 do begin
        TListView(Sender).Columns[I].Caption :=
          StringReplace(TListView(Sender).Columns[I].Caption, '↑', '', [rfReplaceAll]);
        TListView(Sender).Columns[I].Caption :=
          StringReplace(TListView(Sender).Columns[I].Caption, '↓', '', [rfReplaceAll]);
      end;
      Column.Caption := Column.Caption + Copy(WideString('↓↑'),
        Ord(TListView(Sender).Tag > 0) + 1, 1);
    end;procedure TForm1.ListView1Compare(Sender: TObject; Item1,
      Item2: TListItem; Data: Integer; var Compare: Integer);
    var
      I: Integer;
      A, B: string;
      vDataA, vDataB: Extended;
    begin
      I := TListView(Sender).Tag;
      if I = 0 then Exit;
      if Abs(I) = 1 then begin
        A := Item1.Caption;
        B := Item2.Caption;
      end else begin
        A := Item1.SubItems[Abs(I) - 2];
        B := Item2.SubItems[Abs(I) - 2];
      end;
      if TryStrToFloat(A, vDataA) and TryStrToFloat(B, vDataB) then
        Compare := Trunc(I * vDataA - I * vDataB)
      else Compare := CompareText(A, B) * I;
    end;
      

  3.   

    to wolf2005:
    一列的实现了~~
    多列的你不会自己改改呀?~~第二个问题,只需要设置FullDrag属性为True即可~~
    object ListView1: TListView
      FullDrag = True
    end