就是随着鼠标点击时,随着排序出现上下两个箭头

解决方案 »

  1.   

    //画一个三角形(dbgrid也行)用Ehlib的DBGridEh控件,它里面有内置箭头(如果要在DBGrid实现,可以参照其实现源码)。设计时指定,设置如
    DBGridEh1.Columns[0].title.SortMarker:= smDownEh 或 smUpEh用代码实现,在DBGridEh1.OnTitle事件中:
    procedure TFQueryForm.DBGridEh1TitleClick(Column: TColumnEh);
    var
       sortstr: string;
    begin
      if not (DataSource.DataSet.Eof and DataSource.DataSet.Bof) then
      begin
          SortStr:='';
          case Column.Title.SortMarker of
            smNoneEh: Column.Title.SortMarker:=smDownEh;
            smDownEh: Column.Title.SortMarker:=smUpEh;
            smUpEh:Column.Title.SortMarker:=smDownEh ;
          end;      if Column.Title.SortMarker = smDownEh then
             SortStr:=Column.Field.FieldName+' DESC'
          else
             SortStr:=Column.Field.FieldName+' ASC';      with DataSource.DataSet as TADODataSet do
             Sort:= SortStr;
      end;
    end;
      

  2.   


    ListView1.StateImages:=ImageList1;
    ListView1.Column[0].ImageIndex:=0;
      

  3.   

    首先感谢两位的热情帮助,
     to fancier(OP&&(C/C++)) 
       你的意思是要借助于第三方控件
     to  qwertyasd(昊)
        你的意思是放一个图象上去
       不知道不借助第三方控件是否可以实现?
      

  4.   

    ListView1.StateImages:=ImageList1;
    procedure TForm1.ListView1ColumnClick(Sender: TObject;
      Column: TListColumn);
    begin
    if Column.Index=0 then
    begin
    if Column[0].ImageIndex:=0 
    begin
     Column[0].ImageIndex:=1; 
     ......
    ......
    end else
     Column[0].ImageIndex:=0 ;
     .....
    ......
    end;
    end;
    end;
      

  5.   

    //让Icon显示在右边ListView.StateImages:=ImageList1;
    ListView.Column[0].ImageIndex:=0;
    ShowHeaderIcon();//------------------------
    procedure ShowHeaderIcon();
    var
        h:THandle;
        i:Integer;
        hi:THDItem;
    begin
        h := GetDlgItem(ListView.Handle, 0); //get Header Handle
        for i := 0 to ListView.Columns.Count - 1 do
        begin
            hi.mask := HDI_FORMAT;
            Header_GetItem(h,i, hi);
            hi.mask := HDI_FORMAT;
            hi.fmt := hi.fmt or HDF_BITMAP_ON_RIGHT;
            Header_SetItem(h,i, hi);
        end;
    end;//不过,单击了列标题或者改变了列宽度后图象会跑到左边,需要拦截WM_PAIN消息,在该消息中再调用SetHeaderIcon()。