Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» ListBox и Delphi

Автор: LedWorm
Дата сообщения: 09.12.2006 22:53
Подскажите уважаемые, как можно узнать, какие элементы ListBox'а видны в данный момент.

Нужно сделать функцию (на подобие Winamp'a) чтобы считывать тэги, но не у всех, а у тех которые видны на экране.
Автор: rain87
Дата сообщения: 10.12.2006 10:42
LedWorm
может поможет событие ondrawitem у listbox?
при наступлении события заносить каждый элемент в массив видимых
Цитата:
Use OnDrawItem to write a handler for drawing of the items in list boxes with the Style values lbOwnerDrawFixed, lbOwnerDrawVariable, or lbVirtualOwnerDraw. OnDrawItem occurs when the list box needs to display an item. OnDrawItem occurs only for owner-draw list boxes.

The size of the rectangle that contains the item is determined either by the ItemHeight property for fixed owner-draw list boxes or by the response to the OnMeasureItem event for variable owner-draw list boxes.
сам никогда такое не юзал, может это и пальцем в небо
Автор: ShIvADeSt
Дата сообщения: 11.12.2006 00:56
rain87

Цитата:
может поможет событие ondrawitem у listbox?

ИМХО самое верное решение, при этом сделать соотв листбоксу массив, в который помещать айтемы с уже полученными атрибутами (чтобы при каждой отрисовке не перечитывать, а брать уже полученные данные из массива).
Автор: Jokerjar
Дата сообщения: 11.12.2006 01:38
ShIvADeSt, вряд ли это самое лучшее решение. А если элементов тысячи? По-любому нужно считывать тэги только у видимых элементов. У меня где-то был примерчик, пороюсь...
Автор: rain87
Дата сообщения: 11.12.2006 21:17
ну это уже варианты - хранить, если хранить то где, если не хранить, то перечитывать
Автор: LedWorm
Дата сообщения: 15.12.2006 23:13
Мне интересно как можно именно узнать что видимо. А то, где хранить это уже другой вопрос.
Автор: ShIvADeSt
Дата сообщения: 18.12.2006 00:56
LedWorm
Итак небольшое копание в инете

Цитата:

An application sends an LB_GETTOPINDEX message to retrieve the index of the first visible item in a list box. Initially the item with index 0 is at the top of the list box, but if the list box contents have been scrolled another item may be at the top.

получаем индекс первого видимого элемента, далее знаю высоту ЛистБокса и высоту одного элемента
An application sends an LB_GETITEMHEIGHT message to retrieve the height of items in a list box.
вычисляем сколько всего айтемов видно, далее делаем вывод, что айтемы начиная с полученнного ТОР и плюс кол-во айтемов в листбоксе - видны.
Автор: LedWorm
Дата сообщения: 18.12.2006 21:54
Спасибо, помогло!

Страницы: 1

Предыдущая тема: Опрос эл./сч по GSM соединению


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.