ListView. Jak ukryć kolumne?/ SUBITEM DATA

0

Witam

Jak ukryć kolumnę w ListView abym mógł pobierać dane ale jej nikt nie widział.
Tylko chodzi mi o inne rozwiązanie niż ustawienie rozmiaru na 0 bo jak się porusza rozszerzeniem to ona się wysuwa.

Najlepiej przy pomocy funkcji z WinApi.

Pozdrawiam

0

Możesz uniemożliwić rozszerzania danej kolumny (lub wszystkich) reagując na HDN_BEGINTRACKA i HDN_BEGINTRACKW, które musisz przechwycić z WndProc listview'a.

0

Jak ukryć kolumnę w ListView abym mógł pobierać dane ale jej nikt nie widział.

Yyy, to po co ci ta kolumna? Alternatywną wersję zmiennej se tworzysz, bo deklarować normalnych tablic nie potrafisz? :|

0

Po co to tak się głupio wypowiadasz. Jak nie wiesz jak to zrobić to nie PISZ!

Pisze program w CA VisualObject a tam nie ma kolorowania wierszy w ListView.
Dlatego napisałem sobie bibliotekę dll w C++ i towerze jedynie W CA nagłówek.
Wywołuje Funkcje z dll i przekazuje do niej uchwyt LV. W dll'u do LV jest bindowana nowa funkcja rysująca
ale chce w jednej kolumnie mieć jaki kolor ma tam być rysowany aby nie wykonywać podwójnej operacji odczytywania danych które mają być pokolorowany tylko od razu w procesie budowania zaznaczyć a funkcja rysująca sama sobie to sprawdzi. Bo inaczej to musiał bym tworzyć jakiś vektor w biblotece i przekazywać uchwyt i jakąs listę które mają być pokolorowane.

0

Ja bym przesłał stukturę zawierająca uchwyt kontrolki i wektor/tablicę opisującą co i jak ma być rysowane.

0

A widzisz, wypowiadam się w konkretnym celu, mianowicie żeby wiedzieć "Yyy, to po co ci ta kolumna?" - bo to mi jest potrzebne, żebyś Ty głupot nie robił :>

Masz układ komórki + kolorowanie komórek, chcesz uniknąć dodatkowej tablicy (czyli nie myliłem się zasadniczo ;] ).

W uczciwy sposób to robiąc, dane o kolorze zapisz w... komórce, która ma być kolorowana. Zobacz, jak wiele rzeczy możesz przydzielić każdej komórce: MSDN:LVITEM; ciebie szczególnie niech zainteresuje pole lParam. Jak chcesz wiedzieć, czym zapisywać nie tylko tekst, ale wszystko inne: LVM_GETITEM LVM_SETITEM

Ale tutaj coś wydaje mi się to zbyt proste zdaje, ze względu na tekst:

aby nie wykonywać podwójnej operacji odczytywania danych które mają być pokolorowany tylko od razu w procesie budowania zaznaczyć

to może powiedz, czym tę listę budujesz - skąd dane są pobierane na samym początku, i w jakiej postaci je przekazujesz funkcji budującej. I czy widzisz opcję przerobienia funkcji budującej tak, żeby na podstawie wejścia potrafiła tekst wstawić jako tekst, a kolor jako lparam (wewnętrznie za pomocą LVM_INSERTITEM).

Dodatkowa kolumna używana jako "wewnętrzne dane implementacji" to tak paskudne rozwiązanie, że unikać go trzeba naprawdę gdzie się da. No chyba, że się nie da - wtedy nie będę już judził :]

0

No dzięki już mi się trochę rozjaśniło.

Kombinować muszę tak bo CA Visual Object jest niby dostęp do funkcji WIN32SDk ale wszystkie komponenty są już poprzerabiane i tworząc dany komponent to on ma w sobie metody do dodania, ma swoje struktury budowania kolumn. Każde okno ma niby metodę Dispathch gdzie niby jest wywoływana przez Windows w pętli zdarzeniowej ale nie ma znowu struktur np. LPNMLVCUSTOMDRAW.
Budowanie czegoś graniczy tu z cudem.

A jak pobrać ilość kolumn w winapi??

Przykładowy kod w CA tak wygląda:

METHOD mSetColumnsKSIEGA() AS VOID PASCAL CLASS datadialog_test
	LOCAL oLVC			AS ListViewColumn
	
	/* Column create section */
	oLVC	:=	ListViewColumn{,,LVCFMT_LEFT}
	oLVC:NameSym	:=	#PARAMKS
	oLVC:Caption	:= "Ksiega"
	oLVC:Width		:= 45
	SELF:oDClvksiega:AddColumn(oLVC)
  LOCAL oLVI	AS ListViewItem

    	FOR i:=1 TO ALen(tab_pom)
    		oLVI	:= ListViewItem{}
			oLVI:SetText(tab_pom[i][2],#PARAMKS) //,2
			oLVI:SetValue(tab_pom[i][1],#PARAMKS)	
			  
			SELF:oDClvksiega:AddItem(oLVI)							
		NEXT	
0

Mam teraz drugie pytanie.

Czy da się przypisać do LPARAM dla Subitem jakąś wartość.

Przypisywanie do ITEM i odczytywanie działa

        LvItem.iItem=1;          
        LvItem.iSubItem=0;
        LvItem.lParam=RGB(255,0,100);

ale dla sub item już nie

        LvItem.iItem=1;          
        LvItem.iSubItem=1;

1 użytkowników online, w tym zalogowanych: 0, gości: 1