Советы по Delphi

         

Ошибка TListBox MeasureItem


MeasureItem не работает, если элементы были добавлены через AddObject.

AddObject работает в два этапа. Сначала добавляется строка, затем указатель на объект. Проблема заключается в том, что добавление строки инициирует событие MeasureItem прежде, что происходит присвоение указателя на объект, поэтому в обработчик события MeasureItem вместо указателя попадает *мусор*. Не nil, не данные, а простой мусор.

Я обошел эту проблему, устанавливая глобальный флаг перед загрузкой элементов. MeasureItem проверяет этот флаг, и если он выставлен, указатель на объект игнорируется и возвращается произвольная высота. После этого я загружаю элементы, в цикле вычисляю высоту каждого, и для установления высоты использую сообщение lb_SetItemHeight. Все это я делаю перед тем как ListBox станет видимым. В конце я сбрасываю флаг, поскольку остальные вызовы MeasureItem обрабатываются правильно.

Конечно, это все криво, но другого решения я пока не знаю.

-Scott Samet [000720]



Содержание раздела