Builder 5.0 \"DBGRID i strzałeczki\"

0

Mam pytanko czy moglby mi ktos powiedziec jak wprowadzic strzaleczki do dgTittle "DBGrid" chodzi mi dokladnie o sortowanie??a moze zna ktos linka do kodu gdzie znajduje sie opis tego jak sie to czyni

0

DBGrid to listview?
Jeśli tak, to szukaj za LVM_GETHEADER i HDM_SETIMAGELIST

0

Chodzi mi o DBGrida mam go wstawionego do Forma w events jest DBGrid1TitleClick i to sluzy do napisania kodu dla tego sortowania dgTittlem ale chodzi mi jak do tego Grida w dgTittle wstawic obok strzaleczke gdzie musze wejsc w jaką opcję moze ktos juz to robil i pomoze mi [???]?? a moze wie ktos gdzie jest kodzik z przykladem do napisania tej funkcji !!

0

Ten dbgrid wygląda mi na zsubclassowane ListView :)
Robiłem to (razem ze sortowaniem wg dowolnej kolumny) ale w czystym api, wczytywałem bitmapkę (trójkącik w górę i w dół) z zasobów:

//________________________________
UINT hc
// Create Imagelist from resource bitmap
himl =   ImageList_LoadImage(hInstance, "bitmap_sort", 16, 1, rgb(255,0,255), IMAGE_BITMAP, LR_LOADTRANSPARENT)

// hwnd - handle do listview (albo DBGrid)
hc = SendMessage(hwnd, LVM_GETHEADER, 0, 0)
SendMessage(hc, HDM_SETIMAGELIST, 0, himl)
//________________________________

po każdym kliku w header kolumny usuwałem bierzący ikonkę z headera, żeby w razie kliknięcia na inną kolumnę - nie było widać dwóch ikonek :)

//________________________________
//LastClickedColumn - przechowuje indeks ostatnio klikniętej kolumny
//hListView - handle do aktywnego ListView
//ClickedColumn - indeks właśnie klikniętej kolumny
//LastSortedListView - chyba wiadomo
//SortAscDesc - {-1, 0, 1} 0:stan spoczynkowy bez ikonki
//else sort rosnąco/malejąco. Użyte w funkcji sortcallback
LVCOLUMN lvc

ZeroMemory(&lvc, len(lvc))
// usuwam ikonkę (bitmapę) z headera
lvc.mask = LVCF_FMT | LVCF_SUBITEM
lvc.fmt = LVCFMT_LEFT
lvc.iSubItem = LastClickedColumn
SendMessage(hListView, LVM_SETCOLUMN, LastClickedColumn, &lvc)
//________________________________

zastosowałem trójstopniowe sortowanie: trzeci klik w tą samą kolumnę powoduje usunięcie ikonki z headera i posortowanie listy wg pierwszej kolumny, gdzie jest licznik wierszy. Poza tym funkcja obsługuje klikanie w wiele różnych tabel

//________________________________
IF (LastClickedColumn <> ClickedColumn) or (hListView <> LastSortedListView)
	SortAscDesc = 1
	LastClickedColumn = ClickedColumn // zapamiętanie ostatniej
	LastSortedListView = hListView  // kolumny i lv. handle
Else
	SortAscDesc++
	IF SortAscDesc = 2 Then SortAscDesc = -1
Endif
//________________________________

teraz ustawiam inną ikonkę zależnie od zmiennej SortAscDesc

//________________________________
lvc.mask = LVCF_FMT | LVCF_IMAGE | LVCF_SUBITEM
lvc.fmt = LVCFMT_IMAGE | LVCFMT_COL_HAS_IMAGES | LVCFMT_LEFT | LVCFMT_BITMAP_ON_RIGHT
lvc.iImage = (SortAscDesc & 2) >> 1
//1 --> image 0,  -1 --> image 1,  0 -->no image
lvc.iSubItem = ClickedColumn

// jeśli sortowanie jest rosnące/malejące to dodaję ikonkę do headera
IF SortAscDesc <> 0
	SendMessage(hListView, LVM_SETCOLUMN, ClickedColumn, &lvc)
Endif
//________________________________

W zdarzeniu headerclick mam:

//________________________________
ClickedColumn = *<NMLISTVIEW>lParam.iSubItem
hListView = hListView_main // dla każdego okna podobnie
UpdateSortColumnImage() // zmieniam ikonkę w headerze
SendMessage hListView, LVM_SORTITEMSEX, 0, &LVSortCallback
//________________________________

a w funkcji LVSortCallback mam

//________________________________
Sub LVSortCallback(lParam1:int, lParam2:int, lParamSort:uint),int
	LVITEM lvi1, lvi2
	ISTRING txt1[300], txt2[300]
	INT CompareResult

// makestruct to moja funkcja wypełniające strukturę liczbami DWORD
// __cdecl makestruct(ilość, adres struktury,...)
	makestruct(7, lvi1,   LVIF_TEXT, lParam1, ClickedColumn * (SortAscDesc<>0), 0, 0, &txt1, 300)
	makestruct(7, lvi2,   LVIF_TEXT, lParam2, ClickedColumn * (SortAscDesc<>0), 0, 0, &txt2, 300)

	SendMessage(hListView, LVM_GETITEM, 0, &lvi1)
	SendMessage(hListView, LVM_GETITEM, 0, &lvi2)

	IF (SortAscDesc <> 0)
		CompareResult = lstrcmpi(&txt1, &txt2)
		CompareResult *= SortAscDesc
	Else
		//pierwsza kolumna jest numerem wiersza
		CompareResult = val(txt1) > val(txt2)
	Endif

	Return CompareResult
EndSub

Ale mam jakiś error w LVCOLUMN bo jak ikonka się pokaże, to wizualny styl XP na headerze zanika :-/ tzn wysokość i kolor sięnie zmienia, ale przestaje się podświetlać na "pomarańczowo" jakto w XP po najechaniu kursorem
Pewnie zapomniałem o jakiejs fladze

0

Sapero jezeli znalazlbys dla mnie chwileczke to chcialbym z Toba pogadac na gg oto moj numer 1256747 [browar]

Jezeli ktos programuje w builderze prosilbym o kontakt na gg moj numer 1256747

Jezeli ktos programuje w builderze prosilbym o kontakt na gg moj numer 1256747

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