AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Sort Arrow in Listview

Ein Thema von cookie22 · begonnen am 21. Jun 2008 · letzter Beitrag vom 22. Jun 2008
Antwort Antwort
Benutzerbild von cookie22
cookie22

Registriert seit: 28. Jun 2006
Ort: Düsseldorf
936 Beiträge
 
Delphi XE2 Professional
 
#1

Sort Arrow in Listview

  Alt 21. Jun 2008, 15:52
hallo,

ich hab folgendes problem, ich habe noch ein altes delphi 5 project und möchte dem listview gerne sort arrows verpassen (in den column headern).

bisher hab ich das so gemacht:

Delphi-Quellcode:
procedure TfrmMain.SetColumnImage(List: TdfsExtListView; Column: Integer; Image: Integer; ShowImage: Boolean);
var
  Align,hHeader: integer;
  HD: HD_ITEM;
begin
  hHeader := SendMessage(List.Handle, LVM_GETHEADER, 0, 0);
  with HD do
  begin
      case List.Columns[Column].Alignment of
        taLeftJustify: Align := HDF_LEFT;
        taCenter: Align := HDF_CENTER;
        taRightJustify: Align := HDF_RIGHT;
      else
        Align := HDF_LEFT;
      end;


  //hd.hbm := imgUp.Picture.Bitmap.Handle;

      mask := HDI_IMAGE or HDI_FORMAT;

      pszText := PChar(List.Columns[Column].Caption);

      if ShowImage then
        fmt := HDF_STRING or Align or HDF_IMAGE or HDF_BITMAP_ON_RIGHT
      else
        fmt := HDF_STRING or Align;

      iImage := Image;
  end;

  SendMessage(hHeader, HDM_SETITEM, Column, Integer(@HD));

end;
Das funktioniert auch soweit ganz gut, bis auf das der listview die bitmaps aus der imagelist nimmt, die mit dem listview verbunden ist. ich möchte hier selbst irgendein bitmap einfügen, bringe es aber nicht hin das es angezeit wird, jemand eine idee? habe es mit der auskommentierten zeile versucht aber das klappt nicht.

danke im voraus.
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#2

Re: Sort Arrow in Listview

  Alt 22. Jun 2008, 09:28
Hallo,

Ersetze HDI_IMAGE einfach durch HDF_BITMAP.
Ich habe den Code - vielleicht auch interessant für andere - noch etwas erweitert.
Die SortDirection habe ich jedoch nicht vollständig implementiert.
Auch sollte der Code in eine eigene Komponente gepackt werden.


Delphi-Quellcode:
  private
    { Private declarations }
    FSortUpGlyph: TBitmap;
    FSortDownGlyph: TBitmap;
    procedure SetColumnImage(List: TListView; Column, Image: Integer; ShowImage: Boolean);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses
  CommCtrl;

type
  TSortDirection = (sdAscending, sdDescending);

procedure TForm1.SetColumnImage(List: TListView; Column, Image: Integer;
                                 ShowImage: Boolean);
var
  Align,hHeader: integer;
  HD: HD_ITEM;
begin
  hHeader := SendMessage(List.Handle, LVM_GETHEADER, 0, 0);
  with HD do
  begin
    FillChar(HD, SizeOf(HD), 0);

    Mask := (HDI_BITMAP) or (HDI_FORMAT);

    pszText := PChar(List.Columns[Column].Caption);

    case List.Columns[Column].Alignment of
      taLeftJustify: Align := HDF_LEFT;
      taCenter: Align := HDF_CENTER;
      taRightJustify: Align := HDF_RIGHT;
    else
      Align := HDF_LEFT;
    end;

    if SortDirection = sdAscending then
        Hbm := SortUpGlyph.Handle
      else
        Hbm := SortDownGlyph.Handle;

    if ShowImage then
      fmt := HDF_STRING or HDF_BITMAP or HDF_BITMAP_ON_RIGHT
    else
      fmt := HDF_STRING or Align;

    iImage := Image;
  end;
  SendMessage(hHeader, HDM_SETITEM, Column, Integer(@HD));
end;

function CustomSortProc(Item1, Item2: TListItem; ParamSort: integer): integer; stdcall;
begin
  Result := -lstrcmp(PChar(TListItem(Item1).Caption),
                     PChar(TListItem(Item2).Caption));
end;

procedure TForm1.ListView1ColumnClick(Sender: TObject;
  Column: TListColumn);
var
  i : integer;
begin
  ListView1.CustomSort( @CustomSortProc, Column.Index );
  // This loop displays the icon in the selected column.
  for i := 0 to ListView1.Columns.Count - 1 do
    SetColumnImage(ListView1, i, 0, i = Column.Index);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FSortUpGlyph := TBitmap.Create;
  FSortDownGlyph := TBitmap.Create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FSortUpGlyph.Free;
  FSortDownGlyph.Free;
end;
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von cookie22
cookie22

Registriert seit: 28. Jun 2006
Ort: Düsseldorf
936 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Sort Arrow in Listview

  Alt 22. Jun 2008, 14:24
Jo, klappt! Vielen Dank.

edit:

Leider werden die Bitmaps nicht transparent dargestellt. Jemand ne Idee?
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

Registriert seit: 27. Apr 2006
Ort: München
556 Beiträge
 
Delphi 7 Professional
 
#4

Re: Sort Arrow in Listview

  Alt 22. Jun 2008, 14:51
@Toms
Bei deinem Quelltext ist Zeile 35 (Hbm := FSortUpGlyph.Handle unnötig, da Hbm in Zeile 46-49 nochmal neu zugewiesen wird, oder?
Jabber: littleDave@jabber.org
in case of 1 is 0 do external raise while in public class of object array else repeat until 1 is 0
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#5

Re: Sort Arrow in Listview

  Alt 22. Jun 2008, 20:11
Zitat von littleDave:
@Toms
Bei deinem Quelltext ist Zeile 35 (Hbm := FSortUpGlyph.Handle unnötig, da Hbm in Zeile 46-49 nochmal neu zugewiesen wird, oder?
Stimmt, habe den Code in Zeile 35 im Quelltext gelöscht.
Thomas
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz