![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Listbox с элементами переменной высоты [D6]
Муть © (2003-01-20 13:56:00)Здравия желаю!
Возникла такая задача - менять высоту элемента Listbox в зависимости от того, находится ли этот элемент в состоянии odSelected. Оказывается что сделать это непросто.
Сейчас я пытаюсь сохранять номер выбранного элемента в переменной, далее вызывать процедуру перерисовки и анализировать этот номер. Проблема в том, что listbox1.repaint не приводит к вызову кода вычисления высоты элементов. Поэтому вопрос можно сузить до следуюшего - какое сообщени необходимо послать listbox чтобы он для каждого из элементов было вызвано wm_measureitem?
Муть (2003-01-21 14:15:00) [1]Добавлю, что Игорь Шевченко сыграл ключевую роль в поиске ответа на этот вопрос. За что ему спасибо.
Игорь Шевченко (2003-01-21 11:30:00) [2]
> Как всегда, приходится самому отвечать на свой же вопрос.
>
Однако...
Муть (2003-01-21 10:55:00) [3]Как всегда, приходится самому отвечать на свой же вопрос.
Делается это так:
Функции height и heightfull вычислияют высоты для отмеченного и неотмеченного элементов. Переменная prev хранит номер предыдущего отмеченного элемента.
procedure TForm1.ListBox2Click(Sender: TObject);
begin
if prev>=0 then
listbox2.perform(LB_SETITEMHEIGHT, prev, makelparam((current as xList).height(prev), 0));
listbox2.perform(LB_SETITEMHEIGHT, listbox2.ItemIndex, makelparam((current as xList).heightfull(listbox2.ItemIndex, listbox2.Canvas, listbox2.Width), 0));
listbox2.Refresh;
prev:=listbox2.ItemIndex;
end;