В LV пятой версии в режиме lvwReport неспеша (1-2 раза в секунду) добавляютcя новые записи.
Захотелось сделать так, чтобы записи добвлялись в начало по мере поступления. Надумал добавить невидимое поле, писать в него значения таймера и сортировать по убыванию.
Да.Обёртка из comctl32.ocx что-ли?
Странный вопрос. Разве то, что я написал, можно понять как-то иначе?А зачем? Ради нужного порядка отображения?
Dim e As ListItem
Set e = ListView1.ListItems.Add(1, , CStr(Rnd))
DoEvents
e.EnsureVisible
Все равно буду рад услышать. Потому как у меня вообще никаких.У меня есть мысли, но озвучивать я их не буду, потому как могу ошибаться.
Хакер писал(а):2) LockWindowUpdate. Или сабклассинг внутреннего LV с обламыванеим "лишних" сообщений. Но мне эти способы как-то совсем не нравятся.
LvwName.Visible = False
LvwName.ListItems.Clear
...
LvwName.Add...
...
LvwName.Refresh
LvwName.Visible = True
With ListView1.ListItems.Add
ля-ля-тополя
DoEvents
.EnsureVisible
End With
DoEvents
.EnsureVisible
SendMessage ListView1.hwnd, WM_SETREDRAW, 1, 0
Private Function LVProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Select Case uMsg
Case WM_CLOSE
SetWindowLong hw, GWL_WNDPROC, lpListViewProc
Case WM_SETREDRAW
If wParam = 1 And lParam = 0 Then Exit Function
'WM_SETREDRAW и так шлется, в первый раз 0 при Add, второй раз 1 при DoEvents
'Вот этот второй раз и нужно проигнорировать.
'При SendMessage lParam приходит равным 1307854
End Select
LVProc = CallWindowProc(lpListViewProc, hw, uMsg, wParam, lParam)
End Function
+1Это такой инкремент счётчика желающих также как и kibernetics вглянуть на контрол.
-1извиняюсь за оффтоп, но AFAIK "+1" ставят как знак того, что высказывание того, кому ставят этот +, заслуживает инкрементирования рейтинга на форуме. здесь он, имхо, не к месту...
Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 14