|
0 / 0 / 0
Регистрация: 19.05.2017
Сообщений: 17
|
|
Виртуальный режим в ListView14.02.2018, 15:22. Показов 1626. Ответов 16
Добрый день!
Задача состоит в том, чтобы считать данные файла любого размера и вывести их в hex на экран. С файлом работаю через filemapping, вывожу в listview. На данный момент не понимаю, как организовать виртуальный вывод данных в listview. А точнее: 1) Нужно переводить в hex только участок, который должен сейчас показываться? 2) В какой момент это делать ^ ? 3) Каким образом записывать в буфер данные, после того как их перевел в hex? И почему-то при больших размерах файла все виснет и данные не отображаются. (До этого выводил в рич бокс и все полностью выводилось, так что смею предположить, что у listview имеется какое-то ограничение по количеству строк).
0
|
|
| 14.02.2018, 15:22 | |
|
Ответы с готовыми решениями:
16
Виртуальный режим в ListView Как перетащить элемент из ListView в другой ListView? Полноэкранный режим -> оконный режим |
|
0 / 0 / 0
Регистрация: 19.05.2017
Сообщений: 17
|
|
| 14.02.2018, 21:07 [ТС] | |
|
outoftime, https://msdn.microsoft.com/ru-... .110).aspx
0
|
|
|
0 / 0 / 0
Регистрация: 19.05.2017
Сообщений: 17
|
||
| 14.02.2018, 21:48 [ТС] | ||
|
outoftime, при размере файла около 2-х мб
Добавлено через 1 минуту
0
|
||
|
0 / 0 / 0
Регистрация: 19.05.2017
Сообщений: 17
|
|
| 15.02.2018, 09:42 [ТС] | |
|
outoftime, нормально. Я же говорю, если данных не слишком много, то все спокойно выводится.
0
|
|
|
2736 / 891 / 331
Регистрация: 10.02.2018
Сообщений: 2,118
|
|
| 15.02.2018, 15:37 | |
|
Как-то делал нечто похожее, только на ListBox, но думаю что беда там одна и та же с большими файлами.
Каждое последующее добавление элемента в список занимает чуть больше времени, чем предыдущее. То ли там по всему списку какой алгоритм пробегает, то ли из-за динамического выделения памяти. Но постепенно время добавления становится совсем неприличным. Предел нормальной работы зависит от мощности компа, полагаю. Со стороны выглядит, что программа просто зависает пока заполняются все строки контрола. Если долго ждать, то программа или отвиснет, или развалится из-за нехватки памяти. Делать просмотр описанным образом не вариант. Нужен какой-нибудь скрол для позиционирования и отдельное поле для отрисовки кусочка файла по текущей позиции.
0
|
|
|
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,894
|
|
| 15.02.2018, 19:21 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 19.05.2017
Сообщений: 17
|
||||||||||||
| 17.02.2018, 19:21 [ТС] | ||||||||||||
Сейчас, когда я получаю данные файла, у меня принимается это сообщение и срабатывает исключение "Необработанное исключение по адресу 0x009CAF26 в WinAp.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0x004E0AC0." В строчке
0
|
||||||||||||
|
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,894
|
|
| 17.02.2018, 20:23 | |
|
MIRM, что вы хотите получить используя WM_NOTIFY? Покажите свой код (только удалите папки Debug, Release, etc).
Сообщение LVM_SETITEMCOUNT нужно слать когда вам известно кол-во строк, которые будете добавлять, чтобы необходимая память под строки была аллоцирована за один раз. Использую WM_SETREDRAW нужно перед добавлением большого кол-ва строк отключить перерисовку, а затем ее включить.
0
|
|
|
0 / 0 / 0
Регистрация: 19.05.2017
Сообщений: 17
|
|
| 17.02.2018, 21:38 [ТС] | |
|
schdub, вообще с его помощью планировалось выводить на экран содержимое файла в hex виде.
Но похоже, что я еще не учел, что нужно как-то отслеживать, какой именно кусок файла выводить.
0
|
|
|
0 / 0 / 0
Регистрация: 19.05.2017
Сообщений: 17
|
||
| 18.02.2018, 14:14 [ТС] | ||
|
schdub, зачение SetItemCount изменил на ((l.QuadPart/16)+1).
l.quadpart - размер файла; 16 - количество символов в строке. Выдает ту же ошибку. Добавлено через 15 часов 8 минут schdub, возможно я понял, почему выскакивает та ошибка. Она выскакивала после нажатия на кнопку, которая открывала диалог с выбором файла. И обрабатывала его:
0
|
||
|
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,894
|
|
| 18.02.2018, 14:21 | |
|
MIRM, у вас не получится использовать ListView для отображения больших файлов из-за ограничений этого контрола - он не предназначен для этого. Посмотрите лучше MSDN: How to Scroll Text
.
1
|
|
|
0 / 0 / 0
Регистрация: 19.05.2017
Сообщений: 17
|
|
| 19.02.2018, 11:09 [ТС] | |
|
schdub, понял Вас. Спасибо, буду смотреть
Добавлено через 20 часов 32 минуты schdub, начал использовать scroll, но возникла проблема: памяти, отведенной под scrollinfo.nMax, может не хватить, если файл особо большого размера. (По нынешней задумке на экран должен выводиться текст из файла scrollinfo.nPos и до конца экрана. Значит scrollinfo.nMax нужно сразу задать размер, равный размеру файла. Можно конечно подправить сообщения LINEUP,LINEDOWN под PAGEUP,PAGEDOWN и тогда размер скролл бара можно будет чуть уменьшиь, но того тоже может не хватить. Посоветуете что-нибудь?)
0
|
|
|
2736 / 891 / 331
Регистрация: 10.02.2018
Сообщений: 2,118
|
||||||
| 19.02.2018, 14:11 | ||||||
|
Можно завести собственные переменные для хранения количества строк и текущей позиции любой размерности, например 64х битные. В сообщениях скролинга, в первую очередь, опираться на свои переменные и изменять именно их. Таким образом для больших диапазонов скрол бар можно заставить работать в псевдо режиме, когда в него установлено одно значение, а по факту все действия осуществляются над другим. Может конечно есть другой вариант, но я так выкручивался. Приведу косочек кода для наглядности, правда с использованием MFC.
0
|
||||||
| 19.02.2018, 14:11 | |
|
Помогаю со студенческими работами здесь
17
Виртуальный режим ListView Виртуальный режим TListView. Виртуальный режим в дочерних окнах Что такое виртуальный и относительный виртуальный адрес? Как узнать почему включается энергосберегающий режим.И выключить навсегда этот режим? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO
Апнулись до NET10.
Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта
так и в интерактивном режиме. из сложностей - чисто функциональный подход.
Решил. . .
|
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2.
Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники".
В. . .
|
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии.
. . .
|
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
|
|
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут.
https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc
Первый документ красиво выглядит, но без схемы.
Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
|
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере".
Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
|
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти".
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
В качестве источника данных. . .
|
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер
Написал заготовку:
dotnet new console --aot -o UrlHandler
var items = args. Split(":");
var tag = items;
var id = items;
var executable = args;. . .
|