ďťż

Ładny brzuch

Mam małą zagwozdkę związaną z działaniem komponentu ListView. Przy ustawieniu parametru MultiSelect na False (co jest dla mnie niezbędne) i próbie przejścia do kolejnego elementu na liście cała lista odświeża się i zaznaczenie wraca się do pierwszego elementu. W jaki sposób mogę osiągnąć efekt przejścia bez odświeżania? Kod wygląda banalnie:

ListView.MultiSelect:=False; ListView.ItemIndex := ListView.ItemIndex + 1;



Nie wiem, u mnie normalnie przechodzi do następnego elementu, próbowałeś zrobić to innymi sposobami, np:
ListView1.ItemIndex := ListView1.Selected.Index + 1; ?

MozeListView1.DoubleBuffered := true;lub dla calej formyForm1.DoubleBuffered := true?

Odswiezania w ten sposob nie unikniesz, ale przypuszczam ze chodzi Ci o ten brzydki efekt migania ktory powinien zostac zlikwidowany (z listboxem to dziala).

Mysle tez, ze przy ustawianiu MultiSelect'a na false komponent musi sobie odswiezyc zawartosc zeby miec pewnosc ze zostaly odznaczone elementy i zostanie sie tylko jeden wybrany (ten na poczatku).


z listboxem to dziala
Ale z ListViewem nie :).

Po dłuższych przemyśleniach i niezliczonych próbach dochodzę do wniosku, że błąd jest związany ze specyfiką komponentu ListView (odświeżenie jest konieczne przy zmianie właściwości MultiSelect). Póki co nie będę w to ingerował, bo nie jest to bardzo uciążliwe.

Mam jednak jeszcze jedno pytanie. Orientuje się ktoś, czym może być spowodowane krzaczenie się listy w taki sposób?:
http://pl.youtube.co...h?v=VC9HrkWzIlQ
Użytkownik cimlik edytował ten post 25 październik 2007, 15:51



Mam jednak jeszcze jedno pytanie. Orientuje się ktoś, czym może być spowodowane krzaczenie się listy w taki sposób?:
http://pl.youtube.co...h?v=VC9HrkWzIlQ
A to jest w delphi pisane?
Ja taki blad zauwazylem w konfiguracji ffdshow (pisany w C/C++ z uzyciem bibliotek ms) - nie wiem czy teraz to wystepuje, ale kiedys takie cos bylo.
Przypuszczam ze to tez jest jakis blad danego elementu.

A sprobuj odswiezyc te liste po przewinieciu.


A sprobuj odswiezyc te liste po przewinieciu.
Odświeżenie oczywiście działa, ale tym samym usuwa się zaznaczenie.
Błąd jest spowodowany niepoprawną obsługą stylów wizualnych tego komponentu - będę musiał użyć manifesta w postaci pliku dll najprawdopodobniej.
Dzięki za rady, jeśli ktoś jeszcze ma pomysły, to proszę pisać ;).


Odświeżenie oczywiście działa, ale tym samym usuwa się zaznaczenie.
Błąd jest spowodowany niepoprawną obsługą stylów wizualnych tego komponentu - będę musiał użyć manifesta w postaci pliku dll najprawdopodobniej.
Dzięki za rady, jeśli ktoś jeszcze ma pomysły, to proszę pisać ;).

A w jaki sposób odświeżasz? Próbowałeś wysłać komunikat WM_PANIT lub coś w ten deseń (nie pamiętam już listy komunikatów)?


A w jaki sposób odświeżasz? Próbowałeś wysłać komunikat WM_PANIT lub coś w ten deseń (nie pamiętam już listy komunikatów)?
WM_PAINT. Jeszcze nie próbowałem, zaraz sprawdzę.
Jak dotąd robiłem to za pomocą ListView.Refresh po prostu.


WM_PAINT. Jeszcze nie próbowałem, zaraz sprawdzę.
Jak dotąd robiłem to za pomocą ListView.Refresh po prostu.

Refresh pewnie sprawdza wszystkie elementy etc. A tu potrzebne jest wymuszenie przemalowania się komponentu po prostu. Więc ja bym próbował właśnie komunikatami :).

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