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

VCL, KOL, CLX и др. Свои компоненты
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

Сделал наследника, добился что колонки автосайзятся по ширине. Осталась одна проблема: при клике мышой выделяется тот пункт если бы размеры колонок были одинаковые :(
Весь башка уже сломал... Не могу понять кто и когда выставляет odSelected in State, ибо отрисовывается по факту этого свойства
Изображение
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Албаните товарищ, ещё раз повнятней, можно с кодом.
[syntax=Delphi] [/syntax]
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

ща попробую :)
[ATTACH]1085[/ATTACH]
в сообщение не влезло...

Надо зарегичтрировать в систему, положить на форму, вбить в Items штуки 3 значения разной длины, включить AutoSizeColumns := true, выставить Columns := 3, запустить.
При выделении пункта мышой - выделяется не тот, на ком щёлкнули
Вложения
DBCheckListBox.zip
(2.55 КБ) 88 скачиваний
Изображение
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Сделай демку, для ленивых, чтоб сразу можно было тыкать :)
А точно не тот пункт выделяется или просто отрисовка шалит? (Значение забирается верно?)
[syntax=Delphi] [/syntax]
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

фишка в том, что не понятно кто и когда выставляет флаг odSelected свойства State
А проца DrawItem родителя в зависимости от его значения рисует выделение.
Ща дему сделаю
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
[ATTACH]1086[/ATTACH]
для БДС2006, там группа = проект + пакет с компонентом.
вот зараза, на тестовом примере оказалось что мышой в чек попадает, а при задании значения в дизайнере правильно отрисовывается только самы первый чек. Ноги растут из одного места, пшёл ещё покопаюсь
Вложения
CLB.zip
(8.3 КБ) 79 скачиваний
Изображение
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Не смог у себя запустить, при попытке добавить итемсы (ты юнит забыл положить) полезли ошибки - дивисион бу зерро, еще была про дефолтовое значение что-то там (тыкнул в ячейку высоты), у тебя соседние выделяются или вообще рандомные? Я думаю что это проблема вычисления, itemID div GetListBoxInfo(Self.Handle); GetListBoxInfo напомоему DWORD возвращает и не факт что при целочисленном делении запятая куда-нить не переедет, попроверяй цифры во всех местах..
[syntax=Delphi] [/syntax]
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

[ATTACH]1089[/ATTACH]

блинство, пересохранял в другой каталог и часть файлов зобыло...
ошибка там из-за того что по-дефолту стоит автоширина, а список пустой не проверяю - надо перед добавлением выключить автоширину
&quot писал(а):у тебя соседние выделяются или вообще рандомные?
дык я и говорю, выделяется тот пункт как будто автосайз не стоит, т.е. в примере чтобы выделить п2 надо щёлкнуть на самой его правой части. Хотя клик по квадратику попадает в нужное место и правильно отрисовывается
Вложения
CLB.zip
(11.71 КБ) 77 скачиваний
Изображение
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Spin, dxCntner,dxEditor, dxExEdtr, dxEdLib - not found
Запустил потыкал, однозначно вычисления длинны элементов храмают, к примеру на 3 элемент в 1 половине нажать выделется 2 элемент на 2 половине то что нужно. Если вечером не обламает поищу где косячит..
[syntax=Delphi] [/syntax]
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

всё что не найдено - убить (ступил) это просто едит для проверки отрисовки чеков при изменении значения на компоненте...
Там интересная фигня вылезает. Если без отладки - выделяется лажа и чеки не отрисовываются при смене значения, а в отладке вызывается дополнительная отрисовка и вроде нормально всё...
Изображение
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

[ATTACH]1095[/ATTACH]

хм, частично таки сделал, путём банального присвоения Selected!
обновил, пофиксил пару багов. В архиве только один файл самого компонента. Теперь всё нормально при клике выделяется. Есть один забавный эффект... Если кнопку мыши нажать но не отпустить, выделение опять убегает на другой пункт.
Вложения
DBCheckListBox.zip
(2.8 КБ) 75 скачиваний
Изображение
Ответить