Проблемы с CheckListBox

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Проблемы с CheckListBox

Сообщение yuray » 30.05.2008 16:25:51

Переношу проект с Delphi на Lazarus win32. Столкнулся
с проблемами при переносе CheckListBox:

1. В Lazarus CheckListBox не имеет property ItemEnabled. Как быть? Чем заменить?
2. Цвет CheckListBox.Color отображается коряво... Как заставить CheckListBox заливать фон нормально?
3. Появляется вертикальная прокрутка. Как запретить?

Lazarus-0.9.24-fpc-2.2.0-20071114-win32
WinXP, SP2

Спасибо
Последний раз редактировалось yuray 02.06.2008 12:55:29, всего редактировалось 1 раз.
yuray
новенький
 
Сообщения: 95
Зарегистрирован: 22.05.2008 14:19:19
Откуда: Ровно, Украина

Re: Проблемы с CheckListBox

Сообщение yuray » 02.06.2008 12:55:04

Что-то не так спросил или никто не знает... :?:
yuray
новенький
 
Сообщения: 95
Зарегистрирован: 22.05.2008 14:19:19
Откуда: Ровно, Украина

Re: Проблемы с CheckListBox

Сообщение Troublemaker » 02.06.2008 13:29:33

yuray писал(а):20071114

А в более новых сборках это не исправлено? (я не знаю, просто спрашиваю)
Аватара пользователя
Troublemaker
постоялец
 
Сообщения: 292
Зарегистрирован: 16.04.2008 13:00:44
Откуда: Биробиджан, Дальний Восток

Re: Проблемы с CheckListBox

Сообщение Павел Ишенин » 03.06.2008 06:08:04

Добавил реализацию для ItemEnabled в r15295 для win32, qt, gtk2. Чтобы использовать надо либо собрать lazarus из svn, либо подождать завтрашнюю ночную сборку, либо подождать пару месяцев lazarus 0.9.26
Павел Ишенин
постоялец
 
Сообщения: 475
Зарегистрирован: 24.03.2007 10:16:52

Re: Проблемы с CheckListBox

Сообщение yuray » 04.06.2008 10:29:14

Павел Ишенин писал(а):Добавил реализацию для ItemEnabled в r15295 для win32, qt, gtk2.

Поставил r15296 - ItemEnabled есть. Большое спасибо.

yuray писал(а):2. Цвет CheckListBox.Color отображается коряво... Как заставить CheckListBox заливать фон нормально?
3. Появляется вертикальная прокрутка. Как запретить?

Как бороться с этим?
yuray
новенький
 
Сообщения: 95
Зарегистрирован: 22.05.2008 14:19:19
Откуда: Ровно, Украина

Re: Проблемы с CheckListBox

Сообщение Павел Ишенин » 05.06.2008 06:58:25

2. Что значит не нормально? Добавьте запись в bugtracker и присоедините туда изображение и демо-пример.
3. А как это делается в Delphi?
Павел Ишенин
постоялец
 
Сообщения: 475
Зарегистрирован: 24.03.2007 10:16:52

Re: Проблемы с CheckListBox

Сообщение yuray » 05.06.2008 11:57:06

Павел Ишенин писал(а):3. А как это делается в Delphi?

Посмотрел как это делается в Delphi...
В Delphi класс TCheckListBox = class(TCustomListBox). Этот класс имеет свойство Columns в секции published.
А в Lazarus TCheckListBox = class(TCustomCheckListBox). Cвойство Columns наследуется от TCustomListBox.
Соответственно, в инспекторе объектов свойство Columns для объекта CheckListBox отсутствует. Поэтому,
при переносе проекта с Delphi в Lazarus значение Columns=5 (Delphi) установилось по дефолту
в Columns=0 и все CheckBox-ы выстроились в одну колонку. При этом, если CheckBox-ов много, появляется
вертикальная прокрутка (как и в Delphi). Это нормально.
Установил в Runtime CheckListBox1.Columns = 5 и получил в CheckListBox1 5 колонок. Но тут возникли следующие
проблемы:
1. Название CheckBox отображаются только в первой колонке. :!:
2. Если CheckBox-ов много (выходят за область CheckListBox1), то при Columns > 0 в Delphi автоматически появляется
горизонтальная прокрутка. В Lazarus такой прокрутки нет. Замечу, что при Columns = 0 в Delphi и Lazarus автоматически
появляется вертикальная прокрутка.
3. Когда меняю шрифт, то в Delphi CheckBox-ы позиционируются возле названия. В Lazarus позиционирования нет и названия
накладываются друг на друга.
yuray
новенький
 
Сообщения: 95
Зарегистрирован: 22.05.2008 14:19:19
Откуда: Ровно, Украина

Re: Проблемы с CheckListBox

Сообщение Павел Ишенин » 05.06.2008 18:15:44

По поводу Columns - опубликовать и исправить не проблема - r15315, но ListBox.Columns - это исключительно возможность windows - ни в какой другой поддерживаемой lazarus библиотеки (qt, gtk, carbon) такого нет и не понятно будет ли вообще и когда.

Вообще желательно прикладывать проект чтобы было понятно что не работает.
Павел Ишенин
постоялец
 
Сообщения: 475
Зарегистрирован: 24.03.2007 10:16:52

Re: Проблемы с CheckListBox

Сообщение yuray » 06.06.2008 16:08:45

Спасибо, Павел!
С колонками и названиями все впорядке.
Павел Ишенин писал(а):Вообще желательно прикладывать проект чтобы было понятно что не работает.

Например, создаем новый проект с одной формой Form1. Бросаем на форму CheckListBox1 и
BitBtn1 с обработчиком

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
CheckListBox1.Items.Add('Caption') ;
end;

В инспекторе объектов меняем CheckListBox1.Color := clGradientActiveCaption и запускаем программу на выполнение.
Жмем пару раз на BitBtn1 и получаем следующий вид
CheckListBox_1.JPG

Это одна проблема...

Дальше продолжаем давить кнопку, чтобы количество CheckBox-ов перевалило 3*12=36 (количество, которое помещается
в рабочей области CheckListBox1).
CheckListBox_2.JPG


А такой вид получаем когда меняем размер шрифта....
CheckListBox_3.JPG
У вас нет необходимых прав для просмотра вложений в этом сообщении.
yuray
новенький
 
Сообщения: 95
Зарегистрирован: 22.05.2008 14:19:19
Откуда: Ровно, Украина

Re: Проблемы с CheckListBox

Сообщение voltron » 06.06.2008 16:24:51

Возможно, ошибаюсь, но по-моему имелось в виду добавление уже готового тестового проекта, а не описание как его сделать
voltron
новенький
 
Сообщения: 64
Зарегистрирован: 06.07.2007 13:27:46
Откуда: Украина

Re: Проблемы с CheckListBox

Сообщение yuray » 06.06.2008 16:34:42

voltron писал(а):Возможно, ошибаюсь, но по-моему имелось в виду добавление уже готового тестового проекта, а не описание как его сделать

Трудно сказать... Для понимания проблемы, думаю, так нагляднее.
yuray
новенький
 
Сообщения: 95
Зарегистрирован: 22.05.2008 14:19:19
Откуда: Ровно, Украина

Re: Проблемы с CheckListBox

Сообщение Павел Ишенин » 07.06.2008 12:35:21

В r13353,r13354 исправил заливку и добавил скроллер. По поводу размера шрифта не смотрел. Delphi подбирает высоту?
Павел Ишенин
постоялец
 
Сообщения: 475
Зарегистрирован: 24.03.2007 10:16:52

Re: Проблемы с CheckListBox

Сообщение yuray » 07.06.2008 14:23:59

Павел Ишенин писал(а):Delphi подбирает высоту?

Да
CheckListBox.JPG
У вас нет необходимых прав для просмотра вложений в этом сообщении.
yuray
новенький
 
Сообщения: 95
Зарегистрирован: 22.05.2008 14:19:19
Откуда: Ровно, Украина

Re: Проблемы с CheckListBox

Сообщение Troublemaker » 07.06.2008 16:48:35

9.24.1/2.2.0

В чеклистбоксе высота строки меняется независимо от размера шрифта параметром ItemHeight.

Не помню где, в хелпе по Д7 или по лазарю, нашел что-то связанное с константой 72 и для подбора высоты строки использую такую формулу:
Код: Выделить всё
ItemHeight:=MulDiv(MulDiv(font.Size,25,10),72,font.PixelsPerInch);

То есть, высота итема берется в 2.5 раза больше (в попугаях) чем какой-то параметр шрифта.
Одновременно с этим меняется и размер чекбокса, что, на мой взгляд, выглядит вполне логично - на последнем примере крошечные чекбоксы рядом с огромными буквами смотрятся несолидно.

А горизонтальной прокрутки нет и в обычном листбоксе, я об этом писал.
Аватара пользователя
Troublemaker
постоялец
 
Сообщения: 292
Зарегистрирован: 16.04.2008 13:00:44
Откуда: Биробиджан, Дальний Восток

Re: Проблемы с CheckListBox

Сообщение Павел Ишенин » 10.06.2008 05:25:52

Исправил высоту элементов в CheckListBox в r15373. Правда изменение размера шрифта в runtime не проверял.
Павел Ишенин
постоялец
 
Сообщения: 475
Зарегистрирован: 24.03.2007 10:16:52

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 46

Рейтинг@Mail.ru