Проблемы с CheckListBox
Модератор: Модераторы
Проблемы с CheckListBox
Переношу проект с 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
Спасибо
с проблемами при переносе 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 раз.
Что-то не так спросил или никто не знает... 
- Troublemaker
- постоялец
- Сообщения: 292
- Зарегистрирован: 16.04.2008 13:00:44
- Откуда: Биробиджан, Дальний Восток
- Контактная информация:
yuray писал(а):20071114
А в более новых сборках это не исправлено? (я не знаю, просто спрашиваю)
-
Павел Ишенин
- постоялец
- Сообщения: 475
- Зарегистрирован: 24.03.2007 09:16:52
Добавил реализацию для ItemEnabled в r15295 для win32, qt, gtk2. Чтобы использовать надо либо собрать lazarus из svn, либо подождать завтрашнюю ночную сборку, либо подождать пару месяцев lazarus 0.9.26
Павел Ишенин писал(а):Добавил реализацию для ItemEnabled в r15295 для win32, qt, gtk2.
Поставил r15296 - ItemEnabled есть. Большое спасибо.
yuray писал(а):2. Цвет CheckListBox.Color отображается коряво... Как заставить CheckListBox заливать фон нормально?
3. Появляется вертикальная прокрутка. Как запретить?
Как бороться с этим?
-
Павел Ишенин
- постоялец
- Сообщения: 475
- Зарегистрирован: 24.03.2007 09:16:52
2. Что значит не нормально? Добавьте запись в bugtracker и присоедините туда изображение и демо-пример.
3. А как это делается в Delphi?
3. А как это делается в Delphi?
Павел Ишенин писал(а):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 позиционирования нет и названия
накладываются друг на друга.
-
Павел Ишенин
- постоялец
- Сообщения: 475
- Зарегистрирован: 24.03.2007 09:16:52
По поводу Columns - опубликовать и исправить не проблема - r15315, но ListBox.Columns - это исключительно возможность windows - ни в какой другой поддерживаемой lazarus библиотеки (qt, gtk, carbon) такого нет и не понятно будет ли вообще и когда.
Вообще желательно прикладывать проект чтобы было понятно что не работает.
Вообще желательно прикладывать проект чтобы было понятно что не работает.
Спасибо, Павел!
С колонками и названиями все впорядке.
Например, создаем новый проект с одной формой Form1. Бросаем на форму CheckListBox1 и
BitBtn1 с обработчиком
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
CheckListBox1.Items.Add('Caption') ;
end;
В инспекторе объектов меняем CheckListBox1.Color := clGradientActiveCaption и запускаем программу на выполнение.
Жмем пару раз на BitBtn1 и получаем следующий вид
Это одна проблема...
Дальше продолжаем давить кнопку, чтобы количество CheckBox-ов перевалило 3*12=36 (количество, которое помещается
в рабочей области CheckListBox1).
А такой вид получаем когда меняем размер шрифта....
С колонками и названиями все впорядке.
Павел Ишенин писал(а):Вообще желательно прикладывать проект чтобы было понятно что не работает.
Например, создаем новый проект с одной формой Form1. Бросаем на форму CheckListBox1 и
BitBtn1 с обработчиком
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
CheckListBox1.Items.Add('Caption') ;
end;
В инспекторе объектов меняем CheckListBox1.Color := clGradientActiveCaption и запускаем программу на выполнение.
Жмем пару раз на BitBtn1 и получаем следующий вид
Это одна проблема...
Дальше продолжаем давить кнопку, чтобы количество CheckBox-ов перевалило 3*12=36 (количество, которое помещается
в рабочей области CheckListBox1).
А такой вид получаем когда меняем размер шрифта....
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Возможно, ошибаюсь, но по-моему имелось в виду добавление уже готового тестового проекта, а не описание как его сделать
voltron писал(а):Возможно, ошибаюсь, но по-моему имелось в виду добавление уже готового тестового проекта, а не описание как его сделать
Трудно сказать... Для понимания проблемы, думаю, так нагляднее.
-
Павел Ишенин
- постоялец
- Сообщения: 475
- Зарегистрирован: 24.03.2007 09:16:52
В r13353,r13354 исправил заливку и добавил скроллер. По поводу размера шрифта не смотрел. Delphi подбирает высоту?
Павел Ишенин писал(а):Delphi подбирает высоту?
Да
У вас нет необходимых прав для просмотра вложений в этом сообщении.
- Troublemaker
- постоялец
- Сообщения: 292
- Зарегистрирован: 16.04.2008 13:00:44
- Откуда: Биробиджан, Дальний Восток
- Контактная информация:
9.24.1/2.2.0
В чеклистбоксе высота строки меняется независимо от размера шрифта параметром ItemHeight.
Не помню где, в хелпе по Д7 или по лазарю, нашел что-то связанное с константой 72 и для подбора высоты строки использую такую формулу:
То есть, высота итема берется в 2.5 раза больше (в попугаях) чем какой-то параметр шрифта.
Одновременно с этим меняется и размер чекбокса, что, на мой взгляд, выглядит вполне логично - на последнем примере крошечные чекбоксы рядом с огромными буквами смотрятся несолидно.
А горизонтальной прокрутки нет и в обычном листбоксе, я об этом писал.
В чеклистбоксе высота строки меняется независимо от размера шрифта параметром ItemHeight.
Не помню где, в хелпе по Д7 или по лазарю, нашел что-то связанное с константой 72 и для подбора высоты строки использую такую формулу:
Код: Выделить всё
ItemHeight:=MulDiv(MulDiv(font.Size,25,10),72,font.PixelsPerInch);То есть, высота итема берется в 2.5 раза больше (в попугаях) чем какой-то параметр шрифта.
Одновременно с этим меняется и размер чекбокса, что, на мой взгляд, выглядит вполне логично - на последнем примере крошечные чекбоксы рядом с огромными буквами смотрятся несолидно.
А горизонтальной прокрутки нет и в обычном листбоксе, я об этом писал.
-
Павел Ишенин
- постоялец
- Сообщения: 475
- Зарегистрирован: 24.03.2007 09:16:52
Исправил высоту элементов в CheckListBox в r15373. Правда изменение размера шрифта в runtime не проверял.
