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
DBGrid to listview?
Jeśli tak, to szukaj za LVM_GETHEADER i HDM_SETIMAGELIST
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 !!
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
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