C++Builder

Вопросы программирования => Общие вопросы программирования в C++Builder => Тема начата: leoboec от 07 Сентябрь 2018, 20:20:29



Название: Текстовая строка не шире чем компонент Image
Отправлено: leoboec от 07 Сентябрь 2018, 20:20:29
Добрый день подскажите можно ли и с мощью какого компонента реализовать вот какую задачу:
есть 2 формы. На 1 форме вводится текст в Edit на второй есть Panel на которой Image по размеру они растянуты на форму. и во далее мне надо чтобы текст из Edit с 1 формы попал на вторую. НО текст может состоять из 20-50 символов примерно. Мне надо чтобы шрифт как бы "автоматом" подстраивался под количество букв, чтобы эта срока оставалась одной строкой (без переноса) и чтобы она не вылазила за пределы Image который как фон формы в прицнипе. Реально ли это?! и если да то какими средствами и компонентами?!


Название: Re: Текстовая строка не шире чем компонент Image
Отправлено: Ravil от 18 Октябрь 2018, 19:54:25
не совсем конечно понятно, что вы хотите получить в итоге,  но думаю , что можно попробовать использовать Label растянуть его максимально и задать Alignment=taCentr;


Название: Re: Текстовая строка не шире чем компонент Image
Отправлено: Hex от 06 Декабрь 2018, 21:18:23
вариант раз - разбить строку на символы и вручную перерасчитать кернинг
вариант два - подумать головой над юзабилити и сделать нормально


Название: Re: Текстовая строка не шире чем компонент Image
Отправлено: S0mbre от 07 Февраль 2019, 13:53:40
Смотрите на методы TextWidth, TextHeight, TextExtent класса TCanvas. Простой пример (http://docwiki.embarcadero.com/CodeExamples/XE2/en/PageControlPages_(C%2B%2B)).

Т.е. вам надо:
1) опытным путем соотнести разные ширины текста с размером и семейством шрифта (при условии автоматического переноса текста, например в методе TCanvas::TextRect), как вариант сохранить в статический массив;
2) на событие OnChange поля (TEdit) повесить обработчик, в котором изменять шрифт в канве в зависимости от длины вводимого текста




.....
..