Страница: 1 | 2 | 3 | 4 |
Вопрос: HScroll в ListBox
Добавлено: 09.03.05 23:05
Автор вопроса: ZagZag | ICQ: 295002202
Ответы
Всего ответов: 54
Номер ответа: 16
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #16
Добавлено: 14.03.05 19:34
virtual listview не "монстрозный контрол", а обычный listview из windows common controls, у которого среди прочих стилей установлен стиль LVS_OWNERDATA.
A virtual list view is a list-view control that has the LVS_OWNERDATA style. This style enables the control to handle millions of items because the owner receives the burden of managing item data. This allows you to use the virtual list-view control with large databases of information, where specific methods of data access are already in place.
A virtual list-view control maintains very little item information itself. Except for the item selection and focus information, the owner of the control must manage all item information. Other processes request item information from the owner by using LVN_GETDISPINFO notification messages.
Because this type of list control is intended for large data sets, it is recommended that you cache requested item data to improve retrieval performance. The list view provides a cache-hinting mechanism to assist in optimizing the cache. The hint is implemented in the form of an LVN_ODCACHEHINT notification message.
Creating a Virtual List-View Control
You create virtual list-view controls using the CreateWindow or CreateWindowEx function, specifying the LVS_OWNERDATA window style as part of the dwStyle function parameter.
You can use the LVS_OWNERDATA style in combination with most other window styles, except the LVS_SORTASCENDING or LVS_SORTDESCENDING style. All virtual list-view controls default to the LVS_AUTOARRANGE style.
Note Dynamically switching to and from the LVS_OWNERDATA style is not supported.
Номер ответа: 17
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #17
Добавлено: 14.03.05 21:09
Угу, см. клиента, благо доступ у тя еще есть, хоть ты и своими пирогами занят
Но при этом деле на слабеньких машинах долговато прорисовывается - на 450 MHz заметно подтормаживние )
Номер ответа: 18
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #18
Добавлено: 14.03.05 22:31
Причина тормозов вряд ли связана с listview.
Когда скролишь листвью, он посылает родителю WM_NOTIFY c LVN_GETDISPINFO, и пока родитель не вернет ему информацию для отображения, он ждет не перерисовываясь. Обычно самая долгая операция - подготовить картинку для итема. Если хэндл картинки не кэширован, то на его получение уходит куча времени. Особенно если используется для этого SHGetFileInfo. Если хэндлы иконок есть готовые (например в массиве) то рисуется быстро. Или листвью без отображения иконок. Рисует итемы моментом.
Если обрабатывать ещё и LVN_ODCACHEHINT - оно приходит перед LVN_GETDISPINFO (запрос на подготовку данных для итема), то скорость отображения возрастает, т.к. по этому сообщению родитель может начинать готовить данные.
Номер ответа: 19
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #19
Добавлено: 14.03.05 23:27
Ну раньше-то ясно отчего подтормаживание шло - у меня в реальном времени данные из БД получались по ID'шникам... Сейчас по сравнению с тем что было - день с ночью, на моем-то 2600 MHz - все ок, но на 500 - при таскинии слайдера - видно как подтормаживает прорисовка
Картинки берутся из ImageList'a... Думаю это не ах как тормозит, да и возможности проверить сейчас нет...
Номер ответа: 20
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #20
Добавлено: 15.03.05 10:46
Честно говоря мне ListView не очень понравился, да и давненько я с ним не работал. Ну и громоздковатый он в плане кода.
Лучше подскажите мне как ускорить поиск PB-шных констант в инклюдах. Там когда нажимаешь символ '_' аддон проверяет текущее слово и генерит листбокс с продолжением. Пока просто показываю тултип с надписью "Please wait..."
Как лучше организовать поиск? На моём 433 целероне приходится ждать несколько секунд пока заполнится лист.
Номер ответа: 21
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #21
Добавлено: 15.03.05 10:51
PB = VB + ASM - MSVBVMxx.DLL +
Так можно любой язык просчитать
36 Функций из 4-х (хоть и стандартных) библиотек для пустого проекта - ИМХО,
много
36 функций или 1.35 метра функций Выбирай. В этом плане PB даже покруче Дельфи будет. С Си прошу не сравнивать, ведь PB - это всё таки ЯВУ.
Номер ответа: 22
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #22
Добавлено: 15.03.05 11:36
Как лучше организовать поиск?
посмотри на algolist.manual.ru
там есть поиски. Это если касается уже считанного файла.
Открытие и чтение файлов .inc как сделано: ReadFile или MapViewOfFile?
win32api.inc вроде небольшой, так что быстрее будет с ReadFile.
Номер ответа: 23
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #23
Добавлено: 15.03.05 14:15
Ну почти ReadFile - через Open For Binary.
Через MapViewOfFile? Так он же ж вроде закрывает доступ к файлу, а это недопустимо.
Файл уже считан и лежит в строчной переменной, вернее в массиве строк. Ищу последовательно через InStr все позиции, начинающиеся например с %WS_ или %SM_ (вобщем не имеет значения).
Номер ответа: 24
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #24
Добавлено: 15.03.05 16:37
Если в массиве только константы, отсортируй его предварительно, чтобы не искать по всему массиву, а только от текущей позиции вверх. Сделай строки в массиве фиксированной длины As STRING*32, с ними быстрее. Напиши свою процедуру поиска в строке вместо стандартной InStr, например в виде ассемблерной вставки, это должно быть быстрее.
Может есть смысл считать количество констант, начинающихся с символов, введенных в редакторе кода, и исходя из соотношения этого количества к общему количеству констант выбирать, либо очищать листбокс и перезаполнять его снова, либо удалять из него те итемы, которые оказались лишними.
Номер ответа: 25
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #25
Добавлено: 15.03.05 17:12
Нет, в массиве находятся Win32API.INC и другие инклюды. Содержимое массива заранее не известно. Свою процедуру поиска писать не буду - мне бы лучше алгоритм поиска какой.
Добавление/удаление не нужно. Список создаётся только для констант одного типа (например %LB_...), а не для всех констант вообще.
Номер ответа: 26
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #26
Добавлено: 15.03.05 18:07
CyRax
Ну да - 13,5 Кб в дельфи 7 это минимум... Правда мона еще до 3,5 Кб уменьшить размер но при этом прийдется с собой нехилую библу таскать
Номер ответа: 27
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #27
Добавлено: 15.03.05 18:21
Как это, 13 кБ без билы и 3.5 кБ с нехилой библой?
Номер ответа: 28
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #28
Добавлено: 15.03.05 21:02
Ну это так... Если к Дельфи не подрубать VCL, то такие Win32 exe'шники у него получаются
Номер ответа: 29
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #29
Добавлено: 16.03.05 09:53
Ну PowerBasic тоже рантайм в экзешник вшивает. Из 5 кБ - 3 рантайма. Правда что туда зашивается я пока не знаю.
Номер ответа: 30
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #30
Добавлено: 16.03.05 11:11
А если условно разбить строку на две части и перебирать байты в одном цикле сразу из двух участков? Ну это уже на ассемблере прийдётся.