Страница 1 из 2

TCheckListBox колонки разной ширины

Добавлено: 20 окт 2009, 16:11
Игорь Акопян
Сделал наследника, добился что колонки автосайзятся по ширине. Осталась одна проблема: при клике мышой выделяется тот пункт если бы размеры колонок были одинаковые :(
Весь башка уже сломал... Не могу понять кто и когда выставляет odSelected in State, ибо отрисовывается по факту этого свойства

Re: TCheckListBox колонки разной ширины

Добавлено: 20 окт 2009, 18:03
Duncon
Албаните товарищ, ещё раз повнятней, можно с кодом.

Re: TCheckListBox колонки разной ширины

Добавлено: 21 окт 2009, 10:39
Игорь Акопян
ща попробую :)
[ATTACH]1085[/ATTACH]
в сообщение не влезло...

Надо зарегичтрировать в систему, положить на форму, вбить в Items штуки 3 значения разной длины, включить AutoSizeColumns := true, выставить Columns := 3, запустить.
При выделении пункта мышой - выделяется не тот, на ком щёлкнули

Re: TCheckListBox колонки разной ширины

Добавлено: 21 окт 2009, 11:38
Duncon
Сделай демку, для ленивых, чтоб сразу можно было тыкать :)
А точно не тот пункт выделяется или просто отрисовка шалит? (Значение забирается верно?)

Re: TCheckListBox колонки разной ширины

Добавлено: 21 окт 2009, 14:00
Игорь Акопян
фишка в том, что не понятно кто и когда выставляет флаг odSelected свойства State
А проца DrawItem родителя в зависимости от его значения рисует выделение.
Ща дему сделаю
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
[ATTACH]1086[/ATTACH]
для БДС2006, там группа = проект + пакет с компонентом.
вот зараза, на тестовом примере оказалось что мышой в чек попадает, а при задании значения в дизайнере правильно отрисовывается только самы первый чек. Ноги растут из одного места, пшёл ещё покопаюсь

Re: TCheckListBox колонки разной ширины

Добавлено: 22 окт 2009, 09:58
Duncon
Не смог у себя запустить, при попытке добавить итемсы (ты юнит забыл положить) полезли ошибки - дивисион бу зерро, еще была про дефолтовое значение что-то там (тыкнул в ячейку высоты), у тебя соседние выделяются или вообще рандомные? Я думаю что это проблема вычисления, itemID div GetListBoxInfo(Self.Handle); GetListBoxInfo напомоему DWORD возвращает и не факт что при целочисленном делении запятая куда-нить не переедет, попроверяй цифры во всех местах..

Re: TCheckListBox колонки разной ширины

Добавлено: 22 окт 2009, 11:31
Игорь Акопян
[ATTACH]1089[/ATTACH]

блинство, пересохранял в другой каталог и часть файлов зобыло...
ошибка там из-за того что по-дефолту стоит автоширина, а список пустой не проверяю - надо перед добавлением выключить автоширину
&quot писал(а):у тебя соседние выделяются или вообще рандомные?
дык я и говорю, выделяется тот пункт как будто автосайз не стоит, т.е. в примере чтобы выделить п2 надо щёлкнуть на самой его правой части. Хотя клик по квадратику попадает в нужное место и правильно отрисовывается

Re: TCheckListBox колонки разной ширины

Добавлено: 22 окт 2009, 15:14
Duncon
Spin, dxCntner,dxEditor, dxExEdtr, dxEdLib - not found
Запустил потыкал, однозначно вычисления длинны элементов храмают, к примеру на 3 элемент в 1 половине нажать выделется 2 элемент на 2 половине то что нужно. Если вечером не обламает поищу где косячит..

Re: TCheckListBox колонки разной ширины

Добавлено: 23 окт 2009, 15:47
Игорь Акопян
всё что не найдено - убить (ступил) это просто едит для проверки отрисовки чеков при изменении значения на компоненте...
Там интересная фигня вылезает. Если без отладки - выделяется лажа и чеки не отрисовываются при смене значения, а в отладке вызывается дополнительная отрисовка и вроде нормально всё...

Re: TCheckListBox колонки разной ширины

Добавлено: 29 окт 2009, 11:12
Игорь Акопян
[ATTACH]1095[/ATTACH]

хм, частично таки сделал, путём банального присвоения Selected!
обновил, пофиксил пару багов. В архиве только один файл самого компонента. Теперь всё нормально при клике выделяется. Есть один забавный эффект... Если кнопку мыши нажать но не отпустить, выделение опять убегает на другой пункт.