Na forum 4programmers.net korzystamy z plików cookies. Część z nich jest niezbędna do funkcjonowania
naszego forum, natomiast wykorzystanie pozostałych zależy od Twojej dobrowolnej zgody, którą możesz
wyrazić poniżej. Klikając „Zaakceptuj Wszystkie” zgadzasz się na wykorzystywanie przez nas plików cookies
analitycznych oraz reklamowych, jeżeli nie chcesz udzielić nam swojej zgody kliknij „Tylko niezbędne”.
Możesz także wyrazić swoją zgodę odrębnie dla plików cookies analitycznych lub reklamowych. W tym celu
ustaw odpowiednio pola wyboru i kliknij „Zaakceptuj Zaznaczone”. Więcej informacji o technologii cookie
znajduje się w naszej polityce prywatności.
Mam taki problem, że jeśli dodam więcej danych niż jest w stanie pomieścić Listview podczas wyświetlania to pojawiają się paski scroll. Wszystko było by dobrze gdyby pojawił się tylko z prawej strony ale pojawia się także na samym dole pomimo tego że dane mieszczą się i nie ma potrzeby wyświetlać tego scrolla. Problemem jest to to że nowy scroll z prawej strony zabiera trochę miejsca listview przez co pojawia się niechciany scroll na dole.
Może znajdzie się ktoś kto zna rozwiązanie problemu.
powiększenie listview nic nie daje. Nie mogę już zmienić na VirtualTreeView ale dzięki za radę przyda się na przyszłość. A 3 rozwiązanie nie jest jeszcze na moim poziomie wiedzy ale dzięki ;d
@VESPERUS - a myśląc o najprostszym - nie myślałeś o ustawieniu maksymalnych (ew. i minimalnych) długości poszczególnych kolumn? Dzięki temu użytkownik nie będzie miał możliwości ich tak porozciągać, żeby się nie mieściły w widocznych obszarze komponentu;
Plusem jest to, że nie będziesz musiał nic programować (wystarczą ustawienia w Object Inspector), ale minusem będzie oraniczenie możliwości rozciągania kolumn, bo każda z nich będzie musiała mieć określony maksymalny rozmiar; Może i takie rozwiązanie przypadku Ci do gustu.
Ponieważ zaproponowane przez @crowa rozwiązanie nie dotyczy standardowego TListView (trzeba trochę pozmieniać i z tym @VESPERUS sobie nie radzi) pozwolę sobie zaproponować nieco inne (także polegające na podmianie domyślnej procedury obsługi komunikatów TListView czyli subclassingu ale trochę inaczej inaczej):
Kopiuj
type
TListView =class(ComCtrls.TListView)publicprocedure WndProc(varMessage: TMessage);override;end;//-----implementation{$R *.dfm}procedure TListView.WndProc(varMessage: TMessage);beginifMessage.Msg = WM_SIZE then
ShowScrollBar(Handle, SB_HORZ,False);inherited;end;
Jak widać kodu trochę mniej i bez szalonego rozwiązania z ukrywaniem ScrollBara przy KAŻDYM komunikacie.
PS: Rozwiązanie będzie dobre jeżeli jest tylko jeden komponent TListView (lub wszystkie mają zachowywać się tak samo) ponieważ zastosowałem najprostszy sposób podmiany WndProc kontrolki ale w razie czego można w inny sposób podmienić procedurę tylko dla danego ListView i będzie działać.
EDIT: Jak coś to nic się nie zmieniło z wyjątkiem poprawy błędów w treści posta (nie w kodzie) było kilka literówek i 2 razy powtarzających się słów.
No i robi to, co trzeba; Wyłącza pasek przesuwu bez przestawiania innych rzeczy, tak że najlepsze rozwiązanie; Nie ma to jak stary dobry subclassing :)
Usunąć wpis?
Tej operacji nie będzie można cofnąć.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.