ďťż

Ładny brzuch

Witam
Chciałbym się dowiedzieć jak zaprogramować w Delphi, żeby po kliknięciu w daną kolumnę dane w ListView posortowały się wg niej?
Z góry dziękuję za pomoc...

EDIT:
Znalazłem w sieci coś takiego...
procedure TForm.ListViewColumnClick(Sender: TObject; Column: TListColumn); begin ******************************* * zmiana sposobu sortowania ******************************} inSortColumnRep := Column.Index; end; procedure TForm.ListViewCompare(Sender: TObject; Item1, Item2: TListItem; Data: Integer; var Compare: Integer); begin {******************************* * sortowanie ListView ******************************} case inSortColumnRep of 0 {File} : {zerowe trzeba porównywać przez caption} compare := CompareStr(Item1.Caption, Item2.Caption); 1 {Size} : compare := CompareValue( StrToInt(Item1.SubItems.Strings[inSortColumnRep - 1]), StrToInt(Item2.SubItems.Strings[inSortColumnRep - 1])); else compare := CompareStr( Item1.SubItems.Strings[inSortColumnRep - 1], Item2.SubItems.Strings[inSortColumnRep - 1]); end; end;
ale, albo coś jest tu źle albo nie potrafię tego zastosować... M.in wywala mi błąd w inSortColumnRep := Column.Index; nie wiem czemu...
Może zamiast klikania w kolumnę można jakoś inaczej zrobić sortowanie wg kolumn, np. mając CheckBox, jeśli index 0 to sort wg 1 col a jeśli index 1 to wg drugiej, rzecz w tym że nie wiem jak zaprogramować sortowanie wg kolumny. W object inspectorze jest SortType ale to sortuje zawsze wg pierwszej kolumny...
Użytkownik BloodSam edytował ten post 12 listopad 2006, 12:32



wywala mi błąd w inSortColumnRep := Column.Index; nie wiem czemu...
Napisz treść błędu tutaj, może ktoś z nas będzie wiedział, jak pomóc ;)

"Undeclared Identivier inSortColumnRep" :huh: Próbowałem zmieniać fincje żeby upodobnić je z nazwami moich komponentów ale i tak nic z tego :(
Użytkownik BloodSam edytował ten post 12 listopad 2006, 16:18
Dobra, zapewne coś przegapiłeś przepisując kod, który znalazłeś... Mógłbyś podać link do niego w całości?



PROSZE BARDZO

Poprostu zmienna inSortColumnRep jest zmienną typy integer i jest to zmienna globalna zadeklarowana gdzieś wczesniej. W zdarzeniu OnColumnClick przypisywany jest indeks kolumny który chcemy posortować. Zdarzenie OnCompare odpowiada za sposób sortowania - porównywani pozycji (Item1, Item2). Czyli wystarczy jak zadeklarujesz zmienną typu integer w sekcji private i wszystko bedzię dobrze.
A i jeszcze brakuje czegoś takiego żeby sortowało dobrze:
procedure TForm.ListViewColumnClick(Sender: TObject; Column: TListColumn); begin ******************************* * zmiana sposobu sortowania ******************************} inSortColumnRep := Column.Index; ListView.AlphaSort; end;

Możesz dodać też cos takiego żeby można było sortować w odwrotnej kolejności. Zadeklaruj zmienną typu boolean w sekcji private i zmodyfikuj kod do takiej postaci:
procedure TForm.ListViewColumnClick(Sender: TObject; Column: TListColumn); begin ******************************* * zmiana sposobu sortowania ******************************} inSortColumnRep := Column.Index; ListView.AlphaSort; InvartSort := not InvartSort; // nasza zmienna do odwrotnego sortowania end; procedure TForm.ListViewCompare(Sender: TObject; Item1, Item2: TListItem; Data: Integer; var Compare: Integer); begin {******************************* * sortowanie ListView ******************************} case inSortColumnRep of 0 {File} : {zerowe trzeba porównywać przez caption} compare := CompareStr(Item1.Caption, Item2.Caption); 1 {Size} : compare := CompareValue( StrToInt(Item1.SubItems.Strings[inSortColumnRep - 1]), StrToInt(Item2.SubItems.Strings[inSortColumnRep - 1])); else compare := CompareStr( Item1.SubItems.Strings[inSortColumnRep - 1], Item2.SubItems.Strings[inSortColumnRep - 1]); end; if InvartSort then compare := compare * -1; end;

Mam nadzieje że wszystko jest już jasne

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •