![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Skiminok |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 5.4.2006 Где: Киев Репутация: нет Всего: нет |
Здравствуйте. Есть такой вот вопрос. Лично мне он кажется ламерским донельзя, но выхода найти не могу...
Имеется Label. От него требуется следующее:
Пункт 2 достигается только установкой AutoSize в false. А вот что теперь делать с пунктом 3, если нельзя ресайзить автоматически... Пробовал следующее:
Ресайзит, но на перенос строк не реагирует. То есть, если в Label'e 3 строки, причем вторая из них превышает ширину label'a, то высота установится именно в 3 строки, вследствие чего строчку №3 увидеть будет невозможно. Замена Graphics.MeasureString на TextRenderer.MeasureText не помогает. Что делать, не представляю. Уже с ног сбился. Буду очень благодарен за помощь. |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 8 Всего: 232 |
Решается выставлением AutoSize=false, фиксированным размером по горизонтали и большим размером по вертикали (заведомо бОльшим чем размер Label). Сам текст будет автоматом переноситься на новую строку, а за счёт того что фон прозрачный - будет впечатление что это вертикальный размер растёт автоматически.
-------------------- ![]() |
|||
|
||||
| Skiminok |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 5.4.2006 Где: Киев Репутация: нет Всего: нет |
Это очевидный способ Наверняка же существует не читерское решение |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 8 Всего: 232 |
Skiminok, так по-любому контролы будут перекрыты в худшем случае (если высота текста слишком велика), не так ли? А фон у лейбла прозрачный, в чём проблема?
-------------------- ![]() |
|||
|
||||
| Skiminok |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 5.4.2006 Где: Киев Репутация: нет Всего: нет |
Проблема в том, что я в проге выстраиваю в столбик серию компонентов на форме в run-time.
И для того чтобы поместить новый компонент в правильное место, мне нужно знать точные координаты, где заканчивается "осмысленная", а не "техническая" часть верхнего. (попытался объяснить на пальцах, неформально |
|||
|
||||
| sawtooth |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 4.8.2008 Репутация: нет Всего: нет |
Столкнулся с аналогичной проблемой. Решение нашлось. Возможно, ещё пригодится:
|
|||
|
||||
| boojum |
|
||||||||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 11.10.2011 Репутация: нет Всего: нет |
Проблемы начались с того, что вы посчитали пункт 1 банальным:) Т.е. с ходу решили ставить AutoSize:=false; WordWrap:=true; А ведь можно было бы немного подумать и тогда.... (На net не пишу, но в дельфе то же самое, так что сообразите, кому нужно).
Ширина будет оставаться фиксированной (а куда ей деваться?), высота будет меняться при переносе по словам. Более того, если сам лейбл автосайзить не можете (например, у него Align=alClient), а в рантайме хотите менять размеры его родителя (Parent), скажем, панели на которой он лежит, то нетрудно посчитать высоту текста с помощью невидимого лейбла(точнее, вообще безхозного лейбла, точнее лейбла-сироты (Parent=nil)):
Параметр _lbl - лейбл высоту текста которого хотите измерить, при существующей у него ширине и шрифте. fLbl - экземпляр TLabel, который создается и уничтожается соответственно в конструкторе и деструкторе Вашей формы/фрейма/класса или при инизализации/финализации модуля:
Ну и естественно, fLbl нужно объявить как TLabel. Скажем, в private секции TFrame1. ПРЕДУПРЕЖДЕНИЕ: все отлично работает до тех пор, пока ширина слов текста меньше или равна ширине лейбла. Если она больше - поведение лейбла вообще странно-непонятное, разное, но палюбому неадекватное. Поэтому о переносе или разрыве слишком длинных слов нужно заботиться отдельно |
||||||||
|
|||||||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | .NET для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |