RadioGroup CheckGroup как сделать перенос строк

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

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

Ответить
Аватара пользователя
vada
энтузиаст
Сообщения: 691
Зарегистрирован: 14.02.2006 12:43:17

RadioGroup CheckGroup как сделать перенос строк

Сообщение vada »

Есть такая проблема - строка у RadioButton-а очень длинная. Не влезает в одну строку. Сокращать нельза, ибо, это пункт нормы СНиП.
От сюда вопрос: как сделать пункт выбора многострочным?

Добавлено спустя 15 минут 16 секунд:
Да! Комбинации из RadioButton и Label не катят. Пункты появляются и убираются в зависимости от требований. Задолбаюсь их рисовать.убирать.
Odyssey
энтузиаст
Сообщения: 580
Зарегистрирован: 29.11.2007 16:32:24

Сообщение Odyssey »

В TRadioGroup/TCheckGroup из стандартной поставки -- никак. Они сделаны на основе обычных RadioButton и CheckBox, которые не поддерживают перенос.

Как вариант, можно поискать/написать свои RadioButton/CheckBox с переносом строк (или добавить WordWrap к стандартным), и сделать наследников от TRadioGroup/TCheckGroup, которые использовали бы новые, "переносимые" RadioButton/CheckBox.

Как второй вариант, можно написать аналог TRadioGroup/TCheckGroup на RadioButton/CheckBox'ах и Label'ах.

В обоих случаях писать задолбаетесь, но в обоих случаях достаточно это сделать один раз.

Как третий вариант, можно повесить фичереквест в багтрекер и подождать когда/если это будет сделано. Ждать скорее всего придётся долго.
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

vada писал(а):Есть такая проблема - строка у RadioButton-а очень длинная. Не влезает в одну строку. Сокращать нельза, ибо, это пункт нормы СНиП.
От сюда вопрос: как сделать пункт выбора многострочным?

в норме СНиП указан размер шрифта? ;)
Аватара пользователя
vada
энтузиаст
Сообщения: 691
Зарегистрирован: 14.02.2006 12:43:17

Сообщение vada »

Спасибо! Почитал сырцы и понял что никак. Или надо свои классы писать, или вертеться на бровях.
Ждать и разрабатывать времени нет, поэтому, решил сделать на радиобатанах с пустой сапчей и лейблами.
Упралять немного сложнее, но это вариант.
ЗЫ. А вот интересно, почему в лазарусе так реализовали? В дельфях в радиогруппе доступен массив баттанов, и у батана свойство WordWrap существует... Чё так через жопу то? Неудобно ведь. =:(
Аватара пользователя
VirtUX
энтузиаст
Сообщения: 880
Зарегистрирован: 05.02.2008 09:52:19
Откуда: Крым, Алушта

Сообщение VirtUX »

Выход из ситуации вижу так:

Код: Выделить всё

const
{$IFDEF UNIX}
  EndString = #$0A;
{$ENDIF}
{$IFDEF WINDOWS}
  EndString = #$0D#$0A;
{$ENDIF}
...
RadioButton1.Caption:= 'qwe'+EndString+'ert';

А уж где вставлять EndString решайте изходя из длины текста.
Аватара пользователя
vada
энтузиаст
Сообщения: 691
Зарегистрирован: 14.02.2006 12:43:17

Сообщение vada »

В капче режутся символы #10#13. :(
Odyssey
энтузиаст
Сообщения: 580
Зарегистрирован: 29.11.2007 16:32:24

Сообщение Odyssey »

В Delphi оно тоже появилось не сразу. Значит когда-нибудь появится и в LCL.
vada писал(а):Ждать и разрабатывать времени нет, поэтому, решил сделать на радиобатанах с пустой сапчей и лейблами.
Упралять немного сложнее, но это вариант.

Если честно, компонент всё же лучше, потому что время на разработку нужно и там и там, но в случае с компонентом не нужно будет тратить время на копипасту управления тонной лейблов. Другое дело, что копонент придётся устанавливать и пересобирать Lazarus, но это уже другой вопрос.
Как разумный компромисс, в реализации с Label'ами можно основываться на обычном GroupBox и процедуре, которая добавит в него RadioButton'ы и CheckBox'ы. Например:
SetupSelectionGroup(GroupBox: TGroupBox; Items: TStringList; MultipleSelection: Boolean);
а она бы уже создавала нужные компоненты и располагала бы их внутри GroupBox нужным образом.
Аватара пользователя
VirtUX
энтузиаст
Сообщения: 880
Зарегистрирован: 05.02.2008 09:52:19
Откуда: Крым, Алушта

Сообщение VirtUX »

vada писал(а):В капче режутся символы #10#13. :(

Что значит режутся? Не видно? Или не вставляются?
Я проверил у себя - все норм. Получается две строки.

Добавлено спустя 6 минут 28 секунд:
Вот во время разработки:
P5110003.JPG


Добавлено спустя 1 минуту 51 секунду:
Тут один лишь вопрос: "в каком месте вставить перенос строки?" Но это уже зависит от конкретной ситуации.

Добавлено спустя 2 минуты 25 секунд:
Здесь, конечно, следует предусмотреть еще и событие OnResize компонента TRadioButton.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

VirtUX
В венде данная вещь не работает :wink:
Аватара пользователя
VirtUX
энтузиаст
Сообщения: 880
Зарегистрирован: 05.02.2008 09:52:19
Откуда: Крым, Алушта

Сообщение VirtUX »

Mr.Smart писал(а):В венде данная вещь не работает :wink:

Ох ё... Это все проделки "Фикса" :)
Аватара пользователя
vada
энтузиаст
Сообщения: 691
Зарегистрирован: 14.02.2006 12:43:17

Сообщение vada »

Под линуксом символ #13 в капче нормально переходит на новую строку. В винде, под которую сейчас приходится писать, символы #13#10 игнорируются. Просто удаляются из как вредоносные :)
Аватара пользователя
VirtUX
энтузиаст
Сообщения: 880
Зарегистрирован: 05.02.2008 09:52:19
Откуда: Крым, Алушта

Сообщение VirtUX »

vada писал(а):Просто удаляются из как вредоносные

Значит нужно постить в багтрекере.
Phrancuz
незнакомец
Сообщения: 1
Зарегистрирован: 15.09.2010 16:32:45

Сообщение Phrancuz »

vada писал(а):Есть такая проблема - строка у RadioButton-а очень длинная. Не влезает в одну строку. Сокращать нельза, ибо, это пункт нормы СНиП.
От сюда вопрос: как сделать пункт выбора многострочным?


Используй WordWrap!

Пример:
RadioGroup.Buttons[i].WordWrap := True;
Ответить