Форум программистов, компьютерный форум, киберфорум
Наши страницы

Lazarus

Войти
Регистрация
Восстановить пароль
 
ronvaleron
0 / 0 / 0
Регистрация: 27.12.2016
Сообщений: 4
#1

Разбиение Caption на несколько строк для TButton, TBitBtn, TSpeedButton по аналогии с TToggleBox - Lazarus

27.12.2016, 15:57. Просмотров 315. Ответов 6
Метки нет (Все метки)

Всем доброго дня. Необходимо сделать кнопку, которая может разбивать Caption на несколько строк, в зависимости от длины. Таким свойством в Lazarus обладает объект TToggleBox. У него как-будто есть все время включенное свойство WordWrap.
Подскажите пожалуйста, как можно реализовать такой же механизм на кнопках TButton, TBitBtn, TSpeedButton???

П.С. Вариант разбиения на строки через #13 не подходит.
П.П.С. Искал ответ на этот вопрос не только на этом форуме, но так и не нашел. Буду благодарен за любую помощь. С какими свойствами отрисовки нужно поработать? Быть может есть уже готовый сторонний компонент...
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.12.2016, 15:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Разбиение Caption на несколько строк для TButton, TBitBtn, TSpeedButton по аналогии с TToggleBox (Lazarus):

Проектирование форм и создание обработчика события для компонентов TEdit, TButton, TBitBtn. Компоненты TLabel, TMemo - Delphi
Всем привет! Помогите написать код для приложения. Как правило, использование семейного бюджета планируется. В одной семье 43%...

отличие классов TButton от TBitBtn и TSpeedButtton - Delphi
Чем отличаются Button от bitBtn и speedbuttton

Не меняется значение заголовка кнопок TButton и TSpeedButton (XE4) - C++ Builder
Есть программа,которую мне нужно переделать.Само собой,что там на форме присутствует много таких компонентов,как TButton и...

Изменение Caption в TButton без прорисовки - C++ Builder
Caption на кнопке изменяется в зависимости от выбранного айтема в листбоксе. Раньше все было нормально, но после увеличения количества...

Перенос текста в названии кнопки (TButton.Caption) - Delphi
Нашел такой способ переноса текста в названии кнопки procedure TForm1.FormCreate(Sender: TObject); var R : TRect; N :...

Разбиение текста для записи в несколько файлов - C++
Здравствуйте уважаемые форумчане. Я еще только начинаю изучать С++. Надеюсь на вашу помощь. В программе мне нужно реализовать...

6
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
24112 / 16093 / 4895
Регистрация: 22.10.2011
Сообщений: 28,528
Записей в блоге: 5
27.12.2016, 16:11 #2
Цитата Сообщение от ronvaleron Посмотреть сообщение
Вариант разбиения на строки через #13 не подходит
Чем?
0
ronvaleron
0 / 0 / 0
Регистрация: 27.12.2016
Сообщений: 4
27.12.2016, 16:13  [ТС] #3
Тем, что это не удобно, т.к. на форме очень много будет такого рода компонентов. А в некоторых случаях информация для Caption будет грузиться из СУБД.
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
24112 / 16093 / 4895
Регистрация: 22.10.2011
Сообщений: 28,528
Записей в блоге: 5
27.12.2016, 18:52 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Неубедительно. Какая бы разница компоненту, откуда что будет грузиться? По изменению Caption компонента разбить строку на несколько строк добавлением sLineBreak - все, что нужно:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
type
  // Перед классом формы
  { TSpeedButton }
  TSpeedButton = class(Buttons.TSpeedButton)
  private
    function GetText: TCaption;
    procedure SetText(const Value: TCaption);
  public
    property Caption: TCaption read GetText write SetText;
  end;
 
  { TForm1 }
  TForm1 = class(TForm) // дальше все без изменений
 
// реализация:
{ TSpeedButton }
 
function TSpeedButton.GetText: TCaption;
begin
  result := inherited Caption;
end;
 
procedure TSpeedButton.SetText(const Value: TCaption);
begin
  inherited Caption := WrapText(Value, sLineBreak, [' '], (Width - 10) div
    Canvas.TextWidth('W')); 
end;
, и всё:
1
Миниатюры
Разбиение Caption на несколько строк для TButton, TBitBtn, TSpeedButton по аналогии с TToggleBox  
ronvaleron
0 / 0 / 0
Регистрация: 27.12.2016
Сообщений: 4
28.12.2016, 07:53  [ТС] #5
А сделать так, что бы работало и в дизайнтайме можно?
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
24112 / 16093 / 4895
Регистрация: 22.10.2011
Сообщений: 28,528
Записей в блоге: 5
28.12.2016, 12:46 #6
Для этого однозначно придется писать свой компонент, а это сопряжено с многократными пересборками всего Лазаруса, мне лень это делать.
0
ronvaleron
0 / 0 / 0
Регистрация: 27.12.2016
Сообщений: 4
28.12.2016, 14:24  [ТС] #7
Я понял)) И на том спасибо)
0
28.12.2016, 14:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.12.2016, 14:24
Привет! Вот еще темы с ответами:

При добавлении компонента к примеру кнопки. В коде Button1: TButton; выдает ошибку что TButton не известно. - Delphi
Прошу у вас помощи. Rad Studio XE 3 выдает глупую ошибку. При добавлении компонента к примеру кнопки. В коде Button1: TButton; выдает...

Ошибка: E2015 Ambiguity between 'TButton' and 'Stdctrls::TButton' - C++ Builder
СОЗДАЛ КЛАС НАСЛЕДНИК TBotton QClass.h //--------------------------------------------------------------------------- #ifndef...

процедура для TSpeedbutton - Delphi
Товарищи помогите пожалуйста! Надо решить такую задачу: на форме есть 5 кнопок типа TSpeedbutton. Написать процедуру (одну для всех...

События OnMouseEnter и OnMouseLeave для компонента TBitBtn - Delphi
Препод показал пример в Delphi 7, где при наведении курсором на TBitBtn он менял "цвет". Если я не ошибаюсь то у батона нет свойства...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.