|
Проблемы с ListView
|
|||
---|---|---|---|
#18+
Есть Listview(Report), созданный в VB6 (Common Controls 5) Много записей. Одна выделена. Прокручиваем его так, чтоб выделенная запись была вне зоны видимости. Выполняем любую из команд: Код: vbnet 1. 2. 3.
Проблема в том, что когда любая из них выполняется (не для выделенного, а для любого итема), то ListView делает для выделенной записи (для той кот. Selected) прокрутку в видимую область (EnsureVisible) Т.е. когда много записей, они постоянно добавляются и изменяются, невозможно даже сделать прокрутку (все время скручивает на выделенную запись). Я пытался лечить через API ListViewSetSubItemText (LVM_SETITEM) для subitem частично решает проблему А вот LVM_SETITEM (для самого итема, т.е iSubItem=0) LVM_SETITEMTEXTA (для самого итема, т.е iSubItem=0) либо LVM_INSERTITEM всегда дает краш (для ListView созданного в конструкторе). Че делать? Net конечно я чуть подучил, но это VB6 проект. Знаю, что полностью излечится, если полностью рисовать ListView через API. Но это блин пол-проекта покурочить и работа на несколько дней. Плюс всякие сортировки через API делать - повесишься. Есть какой-нибудь способ полечить проблему на базе VB(Control-5) Listview. Я небольшой тест-проект приложил (чтоб можно было поиграться с проблемой). ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2013, 17:30 |
|
Проблемы с ListView
|
|||
---|---|---|---|
#18+
замораживай область отрисовки, а после всех изменений обновляй ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2013, 17:33 |
|
Проблемы с ListView
|
|||
---|---|---|---|
#18+
Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2013, 17:40 |
|
Проблемы с ListView
|
|||
---|---|---|---|
#18+
Konst_One, боюсь это не то Так все равно прокручивает до 1-го итема, если он Selected Код: vbnet 1. 2. 3. 4. 5. 6. 7.
А так все равно делает crash при LVM_INSERTITEM: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Причем тут отрисовка? Речь идет 1) о неправильном поведении 2) о том что я не могу почему-то полноценно применить API LVM_INSERTITEM LVM_SETITEM (для самого итема, т.е iSubItem=0) LVM_SETITEMTEXTA (для самого итема, т.е iSubItem=0) (которые по идеи должны это исправить) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2013, 18:33 |
|
Проблемы с ListView
|
|||
---|---|---|---|
#18+
Что никто не знает? Проблема как бы не праздная и к рюшечкам никакого отношения не имеет. Речь идет о невозможности (сильных затруднениях) нормального просмотра тек. данных. Данные меняются быстро, а он все время передергивает на Selected строчку. Единственный способ для юзера - дергать за Scroll и быстро менять Selected - кто кого. Неужели и вправду класс ListView через API придется ваять? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2013, 21:53 |
|
Проблемы с ListView
|
|||
---|---|---|---|
#18+
Нельзя добавлять айтемы через апи. У этого листвью же объектная модель, как она узнает об изменении его содержимого? Нужно отловить сообщение, отправляемое при EnsureVisible, и подавить его. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2013, 10:04 |
|
Проблемы с ListView
|
|||
---|---|---|---|
#18+
AntonariyНужно отловить сообщение, отправляемое при EnsureVisible, и подавить его. Ну допустим, но тогда EnsureVisible работать не будет, а он кажется иногда нужен. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2013, 10:36 |
|
Проблемы с ListView
|
|||
---|---|---|---|
#18+
Нашел 125 Код: vbnet 1. 2. 3. 4. 5. 6. 7.
На фига он его лепит? Но EnsureVisible 4115 от этого не страдает. Ну и чем чревата отмена? И на фига я в API-шный влез. Тогда вопрос. А API-шный быстрее будет? И насколько? Ну...я б не сказал что какие-то жуткие тормоза, т.е. в "виртуальности" смысла не вижу, да и не знаю что это такое. при больших нагрузках (когда непрерывное добавление) заметно. Ну думаю сначала надо без этого глюка в работе посмотреть. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2013, 11:19 |
|
Проблемы с ListView
|
|||
---|---|---|---|
#18+
Дмитрий77AntonariyНужно отловить сообщение, отправляемое при EnsureVisible, и подавить его. Ну допустим, но тогда EnsureVisible работать не будет, а он кажется иногда нужен.Нужно проверять, было ли перед этим событие добавления айтема, и если было, то подавлять. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2013, 12:00 |
|
Проблемы с ListView
|
|||
---|---|---|---|
#18+
Дмитрий77 А API-шный быстрее будет?Естественно. Дмитрий77 И насколько?Заметно на глаз. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2013, 12:16 |
|
Проблемы с ListView
|
|||
---|---|---|---|
#18+
Antonariy, Дмитрий77Нашел 125 Код: vbnet 1. 2. 3. 4. 5. 6. 7.
Одно лечит, другое калечит. Прокрутка то работает, но при продакшн-тестах при этом выявляется гораздо более плохой глюк. При большом к-ве вводов он при таком лечении подмораживается. Т.е. перестастает обновлять данные (визуально обновленные строчки не перерисовываются) и пользователь не может ткнуться в другую запись (выделить ее). Ломать дальше? Или апишный добивать? А впереди сортировка, в .Net только недавно ругался с местными фанатиками на эту тему. И кстати, что в API-шном есть tag и key? Tag строчки мне понадобится минимум для сортировки по дате, ибо я эти IComparer-ы вряд ли полностью освою, а беглый взгляд в API намекает на то что кухня похожая. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2013, 12:37 |
|
Проблемы с ListView
|
|||
---|---|---|---|
#18+
Дмитрий77Одно лечит, другое калечит.Значит лечишь не то или не тогда, когда надо. Сделай две кнопки, одну, добавляющую айтем, и вторую, которая делает только EnsureVisible, и сравнивай последовательности событий. Дмитрий77И кстати, что в API-шном есть tag и key?Ничего, они есть только в объектной модели. Нужно сопоставлять апи-айтемы и объектные по индексу. Кстати, с тривью такой фокус не пройдет, у него нет способа узнать, какой апи-айтем соответствует объектному. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2013, 13:01 |
|
Проблемы с ListView
|
|||
---|---|---|---|
#18+
Дмитрий77 Или апишный добивать? Добивай объектный апишными расширениями. Я, например, однажды добился, чтобы новые айтемы появлялись в начале списка, и при этом ничего не мигало и не тормозило. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2013, 13:09 |
|
Проблемы с ListView
|
|||
---|---|---|---|
#18+
AntonariyДобивай объектный апишными расширениями. У меня так давно уже и сделано. Но я месяц или больше тогда потратил чтоб перейти с "6-х контролов на 5-е". Кстати в 6-х этого глюка нет. Я пробовал еще так лечить: Код: vbnet 1. 2. 3. 4. 5. 6. 7.
Было ощущение что помогло. Но он гад вместо одного итема апдейтит все. При 3000 записей и 30-50 активных там такая "частота кадров" начинается, что мама не горюй - юзер уже не прорвется в миллисекундные окна. При "оригинале" хотя бы можно "продвигаться перебежками" - перемещать Selected из нижнего видимого в верхний видимый, ну или успевать скролить и щелкать мышью "кто кого". Как вариант можно использовать API-сабитемы - с ними в отличии от объетных не глючит и нагрузка на Listview резко снизится. В "итем" у меня только картинка, да и та через API. Но это не решает вопрос добавления записей. Все-таки попробую сделать API-шный. Единственно, сабклассинги вынесу в формы-модули по своему стандарту. Проще кейсы в WinProc рассматривать чем с этим связываться + массив Listview WithEvents все одно не сделаю, будет еще больше дублей кода. Я твой контрол нашел, но ты там (да и в остальных примерах то же) лепишь все Msg в единственную ф-цию (непорядок), и сабклассинг снять уже проблема, у тебя кажется для ListView Это и не сделано. А чем лепить в класс 2 или 3 ф-ции (про запас, массив то не сделаешь), проще сабклассить индивидуально. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2013, 01:02 |
|
Проблемы с ListView
|
|||
---|---|---|---|
#18+
AntonariyКстати, с тривью такой фокус не пройдет, у него нет способа узнать, какой апи-айтем соответствует объектному.Ну почему же... Extending the functionality of the VB TreeView controls. TVItemData: Treeview item data (or how undocumented can you get?) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2013, 11:11 |
|
Проблемы с ListView
|
|||
---|---|---|---|
#18+
ПанургAntonariyКстати, с тривью такой фокус не пройдет, у него нет способа узнать, какой апи-айтем соответствует объектному.Ну почему же... Extending the functionality of the VB TreeView controls. TVItemData: Treeview item data (or how undocumented can you get?) Это жесть. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2013, 11:20 |
|
Проблемы с ListView
|
|||
---|---|---|---|
#18+
AntonariyПанургпропущено... Ну почему же... Extending the functionality of the VB TreeView controls. TVItemData: Treeview item data (or how undocumented can you get?) Это жесть.Да. Но всеж есть способ. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2013, 11:25 |
|
Проблемы с ListView
|
|||
---|---|---|---|
#18+
Да делаю через API потихоньку. Antonariy, У меня вопрос по сортировке. Я по сути взял тот код кот. у тебя в ucComCtl3 (c LVM_SORTITEMSEX), вроде все работает: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133.
Не могу сейчас до конца просечь, когда я применяю .sorted (VB) в VB-варианте, но вопросы опасения пока такие 1) Правильно ли я понимаю что без LV.sort() он при добавлении новой записи автоматически не сортирует? 2) Т.е. я должен "ручками"(из кода) делать LV.sort() после добавления каждой записи? При изменении записи я этого напротив делать не хочу. 3) Я пока реализовал Column_Click. У меня пока ощущения, что LV.sort(pvCompareDate) работает "чуть долго", т.е. щелчок по столбцу с дата/время чуть (м.б. субъективно) "залипает" если сравнивать со щелчком по столбцу где сортировка как String. Опасения такие (но пока не сделаю, не пойму, а делать еще долго). Если напр. в LV несколько тысяч записей, я добавляю (последовательно) еще пару тысяч, у меня в ф-ции Add() предположительно последней строчкой будет стоять Sort(). Мне эта сортировка его не завесит? (Sort для каждой добавляемой строчки). ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2013, 14:18 |
|
Проблемы с ListView
|
|||
---|---|---|---|
#18+
1. Да 2. Как угодно. 3. Да, даты сравниваются дольше. Мне эта сортировка его не завесит? (Sort для каждой добавляемой строчки).Зависит от характера сортировки. Я делал добавление в начало списка (проверка почты) — сортировал по значению таймера после добавления каждой записи. Так как предыдущие записи уже отсортированы, это много времени не занимало, и новые записи добавлялись с пулеметной скоростью без каких-либо тормозов при размере списка в несколько сотен (много спама было). ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2013, 15:05 |
|
Проблемы с ListView
|
|||
---|---|---|---|
#18+
Antonariy3. Да, даты сравниваются дольше. У меня в VB-реализации код такой: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Ну т.е. идею понял. Подменяю дату/время на "yyyymmddhhmmss" и сравниваю строки а не даты. Т. е. как считаешь? Если забабахать что-то типа Код: vbnet 1. 2. 3. 4.
Оно как бы ускорится? AntonariyЗависит от характера сортировки. Я делал добавление в начало списка (проверка почты) — сортировал по значению таймера после добавления каждой записи. Так как предыдущие записи уже отсортированы, это много времени не занимало, и новые записи добавлялись с пулеметной скоростью без каких-либо тормозов при размере списка в несколько сотен Черт его знает. У меня не письма, у меня факсы. И вот например юзер решил добавить 2000 заданий факса на отправку Код (логика) работает так: Код: vbnet 1. 2. 3. 4.
Можно конечно вынести sort за цикл конкретно для этой процедуры. Доделаю, буду смотреть короче. Не променять бы шило(VB-Listview) на мыло (API-Listview). Счас просто тестирую на критических нагрузках и все сопли очень хорошо вылазят (причем даже в профессиональных C-шных кодах ). И VB-ListView с его "авто-прокрутками" и "авто-рефрешами" это одна из этих соплей. Для стандартного клиента с 1-4 линиями все это практически неважно, а вот если клиент хочет 30-50 линий (другие нагрузки, но и другие деньги), то все эти сопли -прямой путь к потере крупного заказчика. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2013, 16:57 |
|
Проблемы с ListView
|
|||
---|---|---|---|
#18+
Т. е. как считаешь? Если забабахать что-то типа ... Оно как бы ускорится?Тут и Left, и Format, и сравнение строк без StrComp... Вряд ли. Лучше так попробовать: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
И сравнивай по частям целые числа. А можно еще и rtlMoveMemory вместо CopyMemory, она быстрее. У меня не письма, у меня факсы. И вот например юзер решил добавить 2000 заданий факса на отправкуЗачем их сортировать? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2013, 17:17 |
|
Проблемы с ListView
|
|||
---|---|---|---|
#18+
Код: vbnet 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2013, 17:18 |
|
Проблемы с ListView
|
|||
---|---|---|---|
#18+
А хотя тут еще придется строку к дате приводить. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2013, 17:21 |
|
Проблемы с ListView
|
|||
---|---|---|---|
#18+
Antonariy, Ну, буду уже по ходу смотреть. А LVM_SORTITEMS, LVS_SORTASCENDING, LVS_SORTDESCENDING ничего полезного дать не могут? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2013, 18:27 |
|
Проблемы с ListView
|
|||
---|---|---|---|
#18+
Все, что они могут дать, описано в МСДН. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2013, 20:57 |
|
Проблемы с ListView
|
|||
---|---|---|---|
#18+
Antonariy, Ну я вроде доделал API-шный до состояния в котором могу делать тесты. Что могу сказать (про шило и мыло). Глюка с "автопрокруткой" на выделенную запись нет. (ради чего сыр-бор начался) Хотя не могу сказать, что "автопрокрутка" полностью отсутствует. Если например параллельно 1) таймер добавляет новые строчки 2) идут активные процессы (по ранее добавленным строчкам естественно) А я естественно хочу смотреть в (2) активные строчки, т.к. там отображается статистика текущих процессов. То (2) таки уезжает потихоньку по мере добавления(1) по законам какой-то пропорциональности что-ли. Ну и сортировка - полная задница. С теми ф-циями что я привел в коде - тормоза полные. Если сортировать после добавления КАЖДОЙ строчки, то прога зависнет и сдохнет Как вариант выносить Sort за пределы блока добавления - таймер в (1) грубо на 1 секунду, в тесте что я делаю добавляет примерно по 20 строчек за раз (сколько есть готовых). Как вариант: AntonariyУ меня не письма, у меня факсы. И вот например юзер решил добавить 2000 заданий факса на отправкуЗачем их сортировать? Зачем сортировать и по каким полям это уж юзер пускай решает. Но с другой стороны м.б. правильно забить на попытки автосортировки и отдать ее полностью на откуп юзеру (т.е. только при загрузке и по Column_click). Потому что новые записи логично добавлять сверху (в начала списка), иначе юзер их просто с ходу не увидит если сортировка по какому-то второстеренному полю. Но все равно тормоза сортировки бесят, даже при щелчке по столбцу (на 5000 записях столбец будет тупо залипать на 2 сек). В VB-Listview такого не было, очевидно ф-ции сравнения более продуманные. Antonariy и сравнение строк без StrComp... Что имел ввиду? Потому что оно и без дат тормозит. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2013, 05:38 |
|
Проблемы с ListView
|
|||
---|---|---|---|
#18+
Дмитрий77Что имел ввиду? Потому что оно и без дат тормозит.Сравнение строк тоже не быстрая операция. Функция StrComp немного улучшает ситуацию. Но есть и более производительные методы. тынц ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2013, 12:01 |
|
Проблемы с ListView
|
|||
---|---|---|---|
#18+
Antonariy тынц Но "рекомендуемый метод" с LenB+Instr для ">" "<" то не применишь. StrComp почти ничего не дает. Кстати сразу вопрос: Два варианта: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8.
Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8.
Какой правильный? Следуя твоему коду правильный первый, но там к-во операций в 2 раза больше. Но ты почему то не присваиваешь значение при "==". Дальше, API вида lstrcmp StrCmp и т.д. я так понимаю будут тормозить при вызове из VB. Или все таки надо искать? И пробовать ByRef String? Или самому преобразовывать строки в указатели? Ну короче я в растройстве. VB-ListView делает быструю сортировку (очевидно потому что на C++ написан), а здесь функция сортировки отдается на откуп мне как Custom. А я из VB это могу сделать только на VB. C VB-шной скоростью черепахи. Я поэтому и спрашивал про LVM_SORTITEMS, LVS_SORTASCENDING, LVS_SORTDESCENDING М.б. есть какой-то "автоспособ"? Но из msdn следует что LVS_SORTASCENDING, LVS_SORTDESCENDING применяется только к item, но не к subitem. А LVM_SORTITEMS по сути кастом-эквивалент тому который SEX c каким-то мелким ньюансом. Т.е. ничего умного не следует. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2013, 14:05 |
|
Проблемы с ListView
|
|||
---|---|---|---|
#18+
Блин, дебаг вроде показал что основные тормоза 300мс из 350мс на 6000 записей (если убрать сравнение) вот здесь Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Но она отличается от твоей. А ни фига не в сравнении. А >< либо strcomp else либо elseif - играет туда сюда на 5-10 мс ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2013, 14:42 |
|
Проблемы с ListView
|
|||
---|---|---|---|
#18+
vbTextCompare гораздо медленне, чем vbBinaryCompare. Используй text только при сравнении текстов, но не дат или номеров факсов. Кстати, кому нужно видеть живой список из 5000 факсов? Что ему делать с этой простыней, медитировать над ней? В качестве реверанса свистелкам можно отображать последнюю пару десятков — в начало добавлять, из конца удалять. А желающим оглашения полного списка можно сделать кнопку с отдельной формой. Какой правильный? Следуя твоему коду правильный первый, но там к-во операций в 2 раза больше.Я не заморачивался оптимизацией, иначе бы использовал второй. Дальше, API вида lstrcmp StrCmp и т.д. я так понимаю будут тормозить при вызове из VB.Не будут. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2013, 14:52 |
|
Проблемы с ListView
|
|||
---|---|---|---|
#18+
Дмитрий77Блин, дебаг вроде показал что основные тормоза 300мс из 350мс на 6000 записей (если убрать сравнение) вот здесь Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Но она отличается от твоей. Твой вариант еще тормознутее: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Не в сравнении короче тормоза, а в скорости чтения сабитемов. Можно буфер уменьшить до 32 напр, но это копейки. Автоматический (внутренний) какой-то способ должен быть. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2013, 17:01 |
|
Проблемы с ListView
|
|||
---|---|---|---|
#18+
Дмитрий77а здесь функция сортировки отдается на откуп мне как Custom. А я из VB это могу сделать только на VB. C VB-шной скоростью черепахи. А на хрена заниматься фигней с мульти-конвертацией в VB-шную String. Все можно сделать на уровне указателей, используя 2 статических места в памяти на всю процедуру: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70.
Вот это работает на моем компьютере ~125мс на 6500 строчек и против 360мс это можно обозвать словом "мгновенно". По крайней мере визуального залипания заголовка header нету. Думаю дальше оптимизировать уже некуда, по сути использовал C-шный подход. Все тормоза из за String в структуре LV_ITEM + я работаю с фиксированной памятью. Оставшиеся миллисекунды упираются в основном в скорость работы LVM_GETITEMTEXT (без извращений со String), здесь не переплюнешь. Хотя есть одно но. LVM_GETITEMTEXT для каждого итема по ходу вызывается дважды, если не больше. Но вот как быть с датами? 6500 дат сортируется 1,5-2 сек, это ЖОПА плохо. Вообще вот этот метод в VB-Listview работает быстро: Дмитрий77У меня в VB-реализации код такой: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Ну т.е. идею понял. Подменяю дату/время на "yyyymmddhhmmss" и сравниваю строки а не даты. Вопрос только как его применить к API-реализации. Любая попытка вытаскивать String из указателя приведет к тормозам. Причем тупо по байтам я "yyyymmddhhmmss" не просчитаю, у меня дата-время в тек. формате OS Т.е. для России: 12.06.2013 15:12:10 А для США будет 06/12/2013 3:12:10 PM Т.е. без VB Format я не обойдусь. Нужна какая-то "быстрая махинация", но как это сделать? Создать Column, скинуть туда Format(data), отсортировать по новой Column, удалить Column? Вообще линейный цикл по всем итемам с копированием/преобразованием в другой Column это быстрее чем сортировка? М.б. есть "сишные"-API-шные аналоги Format(str, "yyyymmddhhmmss")? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2013, 04:49 |
|
Проблемы с ListView
|
|||
---|---|---|---|
#18+
Я пока что пытаюсь добраться до DATE непосредственно через указатель pszText as long Т.е. хочу получить As Date минуя VB-шную As String. 1) VarDateFromStr - не могу скормить LPTSTR 2) VarDateFromStr -не могу скормить Код: vbnet 1. 2.
3) Могу только скормить вот это: Код: vbnet 1. 2.
Но это 2 обратных преобразования в VB as String ==ТОРМОЗА А надо скормить указатель LPTSTR напрямую (без преобразования в BSTR). А она блин не впихивается туда. Выдает DISP_E_TYPEMISMATCH Есть идеи? На C++ форуме молчат. Дмитрий77Ну, я пока нашел куда копать: VarDateFromStr Function Код: plaintext 1. 2. 3. 4. 5. 6.
Но у меня в моем m_hMem указателе сидит LPTSTR а не OLECHAR . LVITEM structure Код: plaintext 1. 2. 3. 4.
pszTextType: LPTSTR If the structure receives item attributes, pszText is a pointer to a buffer that receives the item text. Note that although the list-view control allows any length string to be stored as item text, only the first 260 TCHARs are displayed. Т.е. если я делаю вот так: Код: vbnet 1. 2. 3. 4. 5. 6. 7.
То вот так не работает (при попытке скормить LPTSTR вместо OLECHAR которую она хочет): Код: vbnet 1.
А вот так работает: Код: plaintext 1.
1) m_hMem1 (LPTSTR) -> VB6 as String 2) VB6 as String -> получаем новый указатель через StrPtr А задача как раз не связываться с VB-шными String, потому что они то и тормозят. Т.е. вопрос как подкинуть указатель на LPTSTR в ф-цию кот. хочет указатель на OLECHAR ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2013, 19:16 |
|
Проблемы с ListView
|
|||
---|---|---|---|
#18+
AntonariyТ. е. как считаешь? Если забабахать что-то типа ... Оно как бы ускорится?Тут и Left, и Format... Вряд ли. Еще как ускорится. Мне удалось наконец обогнать объектный ListView в сортировке дат, использую по сути тот же способ "yyyymmddhhmmss" Результаты для 6500 строк: Объектный Дата/время - 220-250мс; Строки - 30мс API-шный Дата/время - 170-190мс; Строки - 70-90мс (было изначально без оптимизации: Дата/время - 1000-2000мс; Строки - 350-400мс ) Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149.
В принципе на этом можно сказать СТОП. Честно, пытался еще перекидывать данные в нулевой столбец и выполнять "родную" сортировку Код: vbnet 1. 2. 3. 4. 5. 6.
Но она сволочь в run тайме не работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2013, 20:17 |
|
|
start [/forum/topic.php?all=1&fid=60&tid=2156716]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
64ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
70ms |
get tp. blocked users: |
1ms |
others: | 269ms |
total: | 449ms |
0 / 0 |