Trix Napisano Listopad 3, 2019 Autor Zgłoś Udostępnij Napisano Listopad 3, 2019 Witam Mam kontrolke ListView - zawiera ona 4 kolumny ( 1 Item + 3 SubItem'y). Kontrolka ustawiona jest na automatyczne sortowanie elementow. Problem polega na tym, ze gdy dodam nowy element, a jest on "mniejszy" niz poprzedni, to zostanie on przesuniety przed poprzedni element ale jego podelementy zostaja na tym samym miejscu. Reasumujac jak skojarzyc Item z SubItem tak, aby sortowane byly cale wiersze?? Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Burn Napisano Listopad 5, 2019 Zgłoś Udostępnij Napisano Listopad 5, 2019 Witam Niestety nie znam metody by robić to automatycznie (za pomocą styli) :( ale można sobie napisać funkcję, która posortuje elementy listy. Po dodaniu każdego (oczywiście jeżeli dodajemy jednoczesnie dużą liczbę elementów to robimy to tylko po dodaniu wszystkich) elementu do listy trzeba wywołać: ;jeżeli wParam = 0 sortowanie rosnące, 1 malejące ;lParam to adres funkcji sortującej invoke SendMessage,hLView, LVM_SORTITEMS, 0, addr LVSortProc Funkcja sortująca może być np. taka: LVSortProc proc lParam1: LPARAM, lParam2: LPARAM, lParamSort: LPARAM LOCAL szBuff1[256]:BYTE LOCAL szBuff2[256]:BYTE LOCAL lvi:LV_ITEM ;Wypełnij struktrę LV_ITEM mov lvi.imask, LVIF_TEXT mov lvi.cchTextMax, 256 mov lvi.iSubItem, 0 lea eax, szBuff1 mov lvi.pszText, eax ;Pobierz teksty do porownania invoke SendMessage, hLView, LVM_GETITEMTEXT, lParam1, addr lvi lea eax, szBuff2 mov lvi.pszText, eax invoke SendMessage, hLView, LVM_GETITEMTEXT, lParam2, addr lvi ;Porwnaj teksty (ignorując wielkość liter) invoke lstrcmpi, addr szBuff1, addr szBuff2 .if lParamSort == 1 ;Jeżeli chcemy sortować malejąco neg eax ;trzeba zmienić znak wyniku porwnania na przeciwny .endif ret LVSortProc endp Oczywiście funkcja w tej postaci zawsze sortuje elementy wg. tekstu Item (pierwszej kolumny) ale można ją przerobić tak, aby sortowała wg. dowolnego SubItem (dowolnej kolumny). Myślę, że jeżeli będziesz miał potrzebę sortowania według kolumn to z tym już sobie poradzisz, ale jeżeli jednak nie to napisz. Pozdro Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Trace Napisano Listopad 6, 2019 Zgłoś Udostępnij Napisano Listopad 6, 2019 Spróbój też pokombinować z ListView_Update, np. wysyłając LVM_UPDATE do wszystkich itemów lub tylko do większych niż dodany. Może pomoże. Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.