Sign in Join
Wiki copytemporary

TListView/pl: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11**TListView** ![](/wiki-images/d/d7/Tlistview.png) jest wizualnym komponentem na [[Common Controls tab|zakładce Common Controls]] [[Component Palette|Palety Komponentów]], który zapewnia widok listy powiązanych z nim elementów. Elementy mogą być reprezentowane przez jeden z zestawów ikon powiązanych z [[TImageList]]: SmallImages, LargeImages i StateImages.
22
33## Uwagi
44
55- **GetNextItem**() wymaga podania StartItem. Jest to niezgodne z GetNextItem() Delphi, gdzie parametr StartItem może mieć wartość **nil**, co spowoduje wykonanie wyszukiwania od względnego (sterowanego kierunkiem) startu.
66
77## Sortowanie
88
99`TODO: dodać opis, w jaki sposób OwnerData wpływa na sortowanie`
1010
1111Sortowanie jest (zazwyczaj) stosowane podczas korzystania z **vsReport** ViewStyle, ponieważ jest oparte na kolumnach (z wymaganym indeksem Sortcolumn). Sortowanie może być czasochłonne w przypadku większej ilości danych (gdy porównywanie elementów zajmuje dużo czasu).
1212
1313**SortType** jest kluczową właściwością w celu wykonania dowolnego sortowania w TListView.
1414
1515
1616**stNone** - (wartość domyślna) informująca, że dla danej kontrolki sortowanie nie powinno być wykonywane.
1717
1818**stText** - tekst komórek powinien być używany do porównania elementów. Istniejący tekst jest kontrolowany przez właściwość **SortColumn**. Zauważ, że domyślne porównanie sortowania w rzeczywistości traktuje tekst jako Ansi, a nie UTF8. W związku z tym wynik może być niepożądany w przypadku tekstów nieanglojęzycznych
1919
2020**stData** - porównanie właściwości **Data** domyślne traktowane są jako wartości całkowite (przez rzutowanie wskaźnika na liczbę całkowitą) i sortowane według wartości. (w większości przypadków takie sortowanie jest bezużyteczne, chyba że „Dane” to rzeczywista liczba całkowita rzutowana na wskaźnik)
2121
2222**stBoth** - domyślnie traktowane jest jak **stText** podczas sortowania.
2323
2424Jeśli nie używasz sortowania tekstu, domyślna metoda porównania nie jest najlepszym podejściem, zamiast tego można użyć porównania niestandardowego. Porównanie niestandardowe jest przypisywane do zdarzenia **OnCompare** TListView, do którego przekazywane są następujące parametry:
2525
2626
2727**Sender** - TListview, który ma być sortowany
2828
2929**Item1** - pierwszy element TListItem użyty do porównania
3030
3131**Item2** - drugi element TListItem użyty do porównania z pierwszym
3232
3333**Data** - nie jest używany i jest zawsze podawany jako zero. (zastosowany dla zgodności z Delphi)
3434
3535**Compare** - wynik porównania, który musi być ustalony przez zdarzenie. Do argumentu **Compare** należy przypisać następujące wartości:
3636
3737
3838-1 - jeśli pozycja Item1 powinna pojawić się „wcześniej”, tj. w kolejności rosnącej, niż Item2. (Item1 jest mniejsza niż Item2)
3939
40400 - jeśli dwa elementy Item są równe
4141
42421 - jeśli pozycja Item2 powinna pojawić się „wcześniej”, tj. w kolejności rosnącej, niż Item1. (Item2 jest mniejsza niż Item1)
4343
4444Normalną praktyką jest odwracanie wartości wyniku porównania, jeśli SortDirection jest malejący. tj.:
4545
4646```delphi
4747procedure TForm1.ListView1OnCompare(Sender: TObject; Item1, Item2: TListItem;
4848 Data: Integer; var Compare: Integer)
4949begin
5050 ... zrób porównanie ...
5151
5252 if TListView(Sender).SortDirection = sdDescending then
5353 Compare := -Compare;
5454end;
5555```
5656
5757Zdarzenie OnCompare powinno sprawdzać właściwości TListView **SortType**, **SortColumn** i **SortDirection** oraz odpowiednio dostosowywać wynik porównania w zależności od stanu tych właściwości.
5858
5959Metoda **Sort** sortuje elementy, jeśli **SortType** jest inny niż **stNone** i SortColumn jest przypisany do prawidłowego indeksu kolumny.
6060
6161Metoda **CustomSort** wykonuje jednorazowe sortowanie za pomocą dostarczonej funkcji sortowania.
6262
6363
6464ASortProc: TLVCompare - funkcja sortowania
6565
6666AOptionalParam: PtrInt - parametr sortowania
6767
6868Parametr sortowania jest ignorowany (występuje on tylko dla kompatybilności z Delphi). Jeśli **ASortProc** ma wartość zero, wówczas używane jest sortowanie OnCompare lub sortowanie domyślne.
6969
7070Zazwyczaj sortowania może zażądać użytkownik. Za każdym razem, gdy użytkownik kliknie nagłówek kolumny, żąda on jakiegoś sposobu sortowania (początkowo rosnąco) albo przełączenia na odwrotną kolejność sortowania (z rosnącego na malejące lub odwrotnie). To nie reguła, ale powszechne oczekiwanie. W przypadku niektórych zbiorów danych wybór sortowania może nie mieć sensu. Jeśli widok listy powinien być sortowany automatycznie, gdy tylko użytkownik kliknie nagłówek kolumny należy użyć właściwość kontrolki TListview **AutoSort** (wartość domyślna to true). **AutoSort** nie przyniesie żadnego efektu, gdy właściwość **SortType** jest ustawiony na **stNone**.
7171
7272**AlphaSort** to wygodna metoda, która zmienia ustawienia na sortowanie rosnąco (SortDirection=sdAscending) w oparciu o tekst (SortType=stText) pierwszej kolumny (SortColumn=0). Zwróć uwagę, że rzeczywiste właściwości uległy zmianie.
7373
7474### Wskaźnik kierunku sortowania
7575
7676Pochodzący z: <https://bugs.freepascal.org/view.php?id=36281>
7777
7878In trunk since r62567
7979
80801\) Dodaj nową właściwość **SortIndicator** do TListViewColumn. Właściwość ta kontroluje systemowy wskaźnik sortowania.
8181
8282Wskaźnik ten pełni wyłącznie funkcję informacyjną. Reprezentuje graficznie kierunek sortowania (ale nie ma żadnego wpływu na sortowanie). Wskaźnik ma 3 możliwe wartości
8383
8484
8585**siNone** - nie powinien być pokazywany żaden wskaźnik sortowania
8686
8787**siAscending** - powinien być pokazywany wskaźnik rosnący
8888
8989**siDescending** - powinien być pokazywany wskaźnik malejący
9090
9191Właściwość może działać niezależnie od innych właściwości sortowania TListview.
9292
93-<figure>
94-<img src="autosort0.gif" title="autosort0.gif" />
95-<figcaption>autosort0.gif</figcaption>
96-</figure>
93+![](/wiki-images/2/29/Autosort0.gif)
9794
98952\) Dodaj nową właściwość **AutoSortIndicator** do TListView. Właściwość używa się jako uzupełnienie właściwości **AutoSort**. Jeśli oba są włączone, kod LCL kontroluje bieżący wybór wskaźnika sortowania kolumn zgodnie z regułami **AutoSort**.
9996
100-<figure>
101-<img src="autosort2.gif" title="autosort2.gif" />
102-<figcaption>autosort2.gif</figcaption>
103-</figure>
97+![](/wiki-images/7/78/Autosort2.gif)
10498
10599Na początku 2021 r. zauważono, że jeśli używasz Qt5 i masz TListView.SortDirection ustawioną na sdAscending (domyślnie), to ustawienie wskaźnika sortowania kolumny na siDescending wyświetla wskaźnik rosnący. Nie dzieje się tak z GTK2 lub GTK3. Ustawienie SortDirection na sdDescending sprawia, że ​​wszystkie inne kombinacje działają dobrze, więc wydaje się łatwym rozwiązaniem. Zobacz: <https://bugs.freepascal.org/view.php?id=38393>
106100
107101## Implementacja widżetów
108102
109103ListView is implemented via TWSCustomListViewClassinterface. ListView jest implementowany za pośrednictwem interfejsu TWSCustomListViewClassinterface.
110104
111-<table>
112-<thead>
113-<tr>
114-<th><p>Metoda</p></th>
115-<th><p>Opis</p></th>
116-</tr>
117-</thead>
118-<tbody>
119-<tr>
120-<td><p>SelectAll</p></td>
121-<td><p>Metoda udostępnia parametr <strong>AIsSet</strong>.</p>
122-<p>Jeśli parametr jest ustawiony na <strong>true</strong>, wszystkie elementy powinny być wybrane w widoku. Jeśli jest to <strong>false</strong>, wszystkie parametry powinny zostać odznaczone.</p>
123-<p>Ważne jest, aby to zdarzenie nie wyzwalało żadnych innych zdarzeń, ponieważ LCL sam wywoła zdarzenie SelectChange.</p></td>
124-</tr>
125-</tbody>
126-</table>
105+**Metoda**
106+
107+**Opis**
108+
109+SelectAll
110+
111+Metoda udostępnia parametr **AIsSet**.
112+
113+Jeśli parametr jest ustawiony na **true**, wszystkie elementy powinny być wybrane w widoku. Jeśli jest to **false**, wszystkie parametry powinny zostać odznaczone.
114+
115+Ważne jest, aby to zdarzenie nie wyzwalało żadnych innych zdarzeń, ponieważ LCL sam wywoła zdarzenie SelectChange.
127116
128117## Zobacz także
129118
130119- [[doc:lcl/comctrls/tlistview.html|Dokumentacja TListView]]
131120- [[TTreeView]]
132121- [[TShellListView]]
133122
134123---
135124*From the Free Pascal wiki, page "TListView/pl", as it stood on 2021-10-31 after a change by Slawek, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history