Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
 Аватар для FFPowerMan
2156 / 1236 / 508
Регистрация: 11.10.2018
Сообщений: 6,259

Многострочная метка

19.10.2018, 07:54. Показов 4339. Ответов 23

Студворк — интернет-сервис помощи студентам
Здорово, парни. Что-то тут заказчику понадобилось в метке(Label) перед полем(Edit) писать целое предложение из 3 слов, а не F или P, например. Ну вообще у меня на форме много LabeledEdit-ов, т.е. поле для редактирования с надписью слева.
Ну вот я думаю, что-то посмотрел я Label и StaticText и там вроде нету многострочного текста. Как быть? Как поместить на форму перед Edit-ом его многострочные тирады?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.10.2018, 07:54
Ответы с готовыми решениями:

Многострочная надпись
Привет. Я задумала информатику своему подарить прогу: нажимает он на на название группы, название песни, и ему выдается её текст и аккорды....

Многострочная строка
Всем привет. Столкнулся с трудностью. Есть, например, следующий кусок текста, причем весь он (с символами переноса строки) помещен в одну...

Многострочная строка
У меня в Текстбоксе есть Многострочный текст. Хочу в цикле обойти и обработать все строки. Подскажите как сделать. Заранее спс

23
 Аватар для TrollHammer
1216 / 709 / 336
Регистрация: 22.02.2018
Сообщений: 2,095
Записей в блоге: 2
19.10.2018, 08:15
Цитата Сообщение от FFPowerMan Посмотреть сообщение
вроде нету многострочного текста
Есть, размером самой Label регулируется
Миниатюры
Многострочная метка  
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,904
Записей в блоге: 12
19.10.2018, 08:26
Для этого нужно WordWrap в True, а AutoSize в False выставить...
1
 Аватар для TrollHammer
1216 / 709 / 336
Регистрация: 22.02.2018
Сообщений: 2,095
Записей в блоге: 2
19.10.2018, 08:42
Цитата Сообщение от volvo Посмотреть сообщение
Для этого нужно WordWrap в True, а AutoSize в False выставить...
Забыл про это сказать, спасибо!

Добавлено через 1 минуту

Не по теме:

Кстати, если установлен CnPack (к Builder 6 к сожалению не относится), то при редактировании Caption появляется мини текстовый редактор, где можно вписать многострочный текст, остальные свойства сами выставятся

0
 Аватар для FFPowerMan
2156 / 1236 / 508
Регистрация: 11.10.2018
Сообщений: 6,259
19.10.2018, 09:41  [ТС]
Цитата Сообщение от volvo Посмотреть сообщение
Для этого нужно WordWrap в True, а AutoSize в False выставить...
- Да, вот это я уже понял. Спасибо.
0
 Аватар для FFPowerMan
2156 / 1236 / 508
Регистрация: 11.10.2018
Сообщений: 6,259
19.10.2018, 10:03  [ТС]
А можете еще, пожалуйста, помочь?
Вот текст слева, какого-то фига, вылез наверх - как-будто есть невидимая ось симметрии и он(текст) над ней. Как сделать так, чтобы нормально все было? Т.е. у текста есть, как-бы, своя ось симметрии и нужно чтобы они с Edit-ом совпадали. - Ну, по-нормальному, короче. Лишних пробелов в тексте нету.
Миниатюры
Многострочная метка  
0
 Аватар для FFPowerMan
2156 / 1236 / 508
Регистрация: 11.10.2018
Сообщений: 6,259
19.10.2018, 13:49  [ТС]
Все, разобрался.

Добавлено через 15 минут
А что за белиберда с этими двойными строками. Рисунок тот же что и Выше, только мне удалось по центральной горизонтальной оси поставить текст метки. Но суть в том, что при запуске программы он опять становится однострочным. Естественно, что когда он становится однострочным, он становится корявым и вылезает за пределы GroupBox, ну бред получается, короче, там остатки строки видно и все. - Вот это что такое вообще? И как это исправить?
0
Модератор
 Аватар для D1973
9921 / 6457 / 2457
Регистрация: 21.01.2014
Сообщений: 27,404
Записей в блоге: 3
19.10.2018, 13:58
Цитата Сообщение от FFPowerMan Посмотреть сообщение
при запуске программы он опять становится однострочным
AutoSize точно false? WordWrap точно true?
0
 Аватар для FFPowerMan
2156 / 1236 / 508
Регистрация: 11.10.2018
Сообщений: 6,259
19.10.2018, 17:22  [ТС]
Цитата Сообщение от D1973 Посмотреть сообщение
AutoSize точно false? WordWrap точно true?
- да, эти свойства стоят. Что Билдер гонимый такой. Щас просто Билдер открыл, ну и проект там тоже автоматически сразу сам открывается - так Билдер, зараза, опять их сам сделал однострочными. Что за зараза-то такая? Как быть?
Ну это я так понял что он свойство Width меняет сам у метки. Смысл в том, что если оно широкое - то получается 1 строка, а если поуже - то 2. А с каких пор Билдер стал сам свойства менять? Или какие-нибудь опции стоят, чтобы типа он сам вмешивался и менял свойства. Может-быть кто-нибудь знает как отключить это, чтобы Билдер не лез и не менял свойства компонентов?
0
Модератор
 Аватар для D1973
9921 / 6457 / 2457
Регистрация: 21.01.2014
Сообщений: 27,404
Записей в блоге: 3
19.10.2018, 17:58
Сделайте минимальный пример, где такое поведение можно увидеть - и выкладывайте сюда, т.к. у меня это не воспроизводится...
0
 Аватар для FFPowerMan
2156 / 1236 / 508
Регистрация: 11.10.2018
Сообщений: 6,259
31.10.2018, 20:10  [ТС]
Здорово, всем. А можете еще подсказать? Как сделать так, чтобы в Label кубический метр писался м3, ну т.е. чтобы "3" улетела вверх?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,904
Записей в блоге: 12
31.10.2018, 21:09
Использовать Юникод, в частности вот такой символ. Грубо - вот так:
C++
1
Label1->Caption = L\u00B3";
, ну, а как у тебя в проекте (на этом допотопном Билдере, которому уже даже в мусорке не место, его закапывать надо очень глубоко) - это только тебе известно.
2
 Аватар для FFPowerMan
2156 / 1236 / 508
Регистрация: 11.10.2018
Сообщений: 6,259
01.11.2018, 07:48  [ТС]
Что-то не работает ваш метод. Это правда так делается?

Добавлено через 1 минуту
Цитата Сообщение от volvo Посмотреть сообщение
C++
1
Label1->Caption = L\u00B3";
- вот это выводит "м?".
0
 Аватар для TrollHammer
1216 / 709 / 336
Регистрация: 22.02.2018
Сообщений: 2,095
Записей в блоге: 2
01.11.2018, 08:18
Цитата Сообщение от FFPowerMan Посмотреть сообщение
Что-то не работает ваш метод
У Вас билдер Юникод поддерживает?
0
 Аватар для TrollHammer
1216 / 709 / 336
Регистрация: 22.02.2018
Сообщений: 2,095
Записей в блоге: 2
01.11.2018, 08:20
вот скрин
Миниатюры
Многострочная метка  
0
01.11.2018, 08:36

Не по теме:

В шестерке я изгалялся, когда такое надо было вывести - выводил текст на канве формы через TextOut

0
Модератор
 Аватар для D1973
9921 / 6457 / 2457
Регистрация: 21.01.2014
Сообщений: 27,404
Записей в блоге: 3
01.11.2018, 08:38
Цитата Сообщение от FFPowerMan Посмотреть сообщение
Это правда так делается?
Да это делается так... Но Вам уже ведь было написано, что:
Цитата Сообщение от volvo Посмотреть сообщение
на этом допотопном Билдере
такое не сработает. Используйте 2 метки...
Изображения
 
0
 Аватар для TrollHammer
1216 / 709 / 336
Регистрация: 22.02.2018
Сообщений: 2,095
Записей в блоге: 2
01.11.2018, 09:27
Нашел эту функцию, которой так делал:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void TForm1::fDrawTextUp(int x, int y, AnsiString aDown, AnsiString aUp)
{
    int d_len = Canvas->TextWidth(aDown);
    int d_ht  = Canvas->TextHeight(aDown);
 
    y-=d_ht;
 
    Canvas->TextOut(x, y, aDown);
    y-=d_ht/2;
    x+=(d_len+2);
    Canvas->TextOut(x, y, aUp);
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    fDrawTextUp(Edit1->Left, Edit1->Top, "M", "3");
}
//---------------------------------------------------------------------------
Объявление в Unit1.h:
C++
1
2
3
4
5
6
7
8
9
10
11
class TForm1 : public TForm
{
__published:    // IDE-managed Components
    TEdit *Edit1;
    TButton *Button1;
    void __fastcall Button1Click(TObject *Sender);
private:    // User declarations
public:     // User declarations
    __fastcall TForm1(TComponent* Owner);
    void fDrawTextUp(int, int, AnsiString, AnsiString);
};
Может, пригодится кому

Добавлено через 1 минуту

Не по теме:

volvo, D1973 - за AnsiString не наказывать, писалось давно еще под "шестерку"



Добавлено через 26 минут
Обе - нижний и верхний
Кликните здесь для просмотра всего текста
C++
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
28
29
30
31
void TForm1::fDrawTextUp(int x, int y, AnsiString aDown, AnsiString aUp)
{
    int d_len = Canvas->TextWidth(aDown);
    int d_ht  = Canvas->TextHeight(aDown);
 
    y-=d_ht;
 
    Canvas->TextOut(x, y, aDown);
    y-=d_ht/2;
    x+=(d_len+2);
    Canvas->TextOut(x, y, aUp);
}
 
void TForm1::fDrawTextDown(int x, int y, AnsiString aUp, AnsiString aDown)
{
    int d_len = Canvas->TextWidth(aUp);
    int d_ht  = Canvas->TextHeight(aDown);
 
    y-=d_ht*1.5;
 
    Canvas->TextOut(x, y, aUp);
    y+=d_ht/2;
    x+=(d_len+2);
    Canvas->TextOut(x, y, aDown);
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    fDrawTextUp(Edit1->Left, Edit1->Top, "M", "3");
    fDrawTextDown(Edit2->Left, Edit2->Top, "M", "3");
}
//---------------------------------------------------------------------------
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,904
Записей в блоге: 12
01.11.2018, 11:47
Был когда-то старый-старый компонент для Дельфи, еще конца 1990-ых годов, в котором можно было задавать текст в виде
C++
1
Label1->Caption = "м^3 или z_6";
, и он преобразовывал это в суб/суперскрипты. Сделал его в виде перехватчика (ленивый я, не хочу что-то устанавливать на несколько минут). Код:

C++
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
// перед классом формы:
namespace SupSub_Label
{
    class TLabel : public Stdctrls::TLabel
    {
        DYNAMIC void __fastcall DoDrawText(Types::TRect &Rect, int Flags)
        {
            Canvas->FillRect(Rect);
            TFont *FFont = new TFont;
            FFont->Assign(Canvas->Font);
 
            int x_pos = 1;
            bool is_sup = false, is_sub = false;
            for(int i = 1; i <= Caption.Length(); i++)
            {
                is_sup = (i > 1) && (Caption[i - 1] == '^');
                is_sub = (i > 1) && (Caption[i - 1] == '_');
                if(Caption[i] != '_' && Caption[i] != '^')
                {
                    if(is_sub)
                    {
                        Canvas->Font->Height = 8 * Canvas->Font->Height / 10;
                        Canvas->TextRect(Classes::Rect(x_pos, Rect.Top, x_pos + Canvas->TextWidth(Caption[i]), Rect.Bottom),
                                         x_pos, abs(8*Canvas->Font->Height - 10*FFont->Height) / 10, Caption[i]);
                        x_pos += Canvas->TextWidth(Caption[i]);
                    }
 
                    if(!is_sub && !is_sup)
                    {
                        Canvas->Font = FFont;
                        Canvas->TextRect(Classes::Rect(x_pos, Rect.Top, x_pos + Canvas->TextWidth(Caption[i]), Rect.Bottom),
                                         x_pos, 0, Caption[i]);
                        x_pos += Canvas->TextWidth(Caption[i]);
                    }
 
                    if(is_sup)
                    {
                        Canvas->Font->Height = 9 * Canvas->Font->Height / 10;
                        Canvas->TextRect(Classes::Rect(x_pos, Rect.Top, x_pos + Canvas->TextWidth(Caption[i]), Rect.Bottom),
                                         x_pos, -abs(8*Canvas->Font->Height - 10*FFont->Height) / 20, Caption[i]);
                        x_pos += Canvas->TextWidth(Caption[i]);
                    }
                }
                Canvas->Font = FFont;
            }
            delete FFont;
        }
    };
};
#define TLabel SupSub_Label::TLabel
, в инспекторе объектов свойству Caption было назначено то, что написано выше. Вот результат:
Миниатюры
Многострочная метка  
2
 Аватар для TrollHammer
1216 / 709 / 336
Регистрация: 22.02.2018
Сообщений: 2,095
Записей в блоге: 2
01.11.2018, 12:53
volvo, Супер! Я примерно такое делал, только в виде функций (то что я выложил - один из первых вариантов), там изменялся размер шрифта надстрочных и подстрочных символов для пропорции. Я с Вашего позволения, код перехватчика допилю с этими свойствами и выложу.

Добавлено через 2 минуты
volvo, То что Вы выложили, гораздо удобнее, не надо высчитывать координаты места рисовки текста. Спасибо!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.11.2018, 12:53
Помогаю со студенческими работами здесь

Многострочная надпись
Можно ли Label сделать многострочной или чем заменить?

Документ (многострочная часть)
Есть документ (1с v77) с табличной частью. Табличная часть имеет два реквизита: Специальность (тип справочник.Специальности) и сумма. Надо...

Многострочная ячейка в dbgrid
думаю мне сюда. много гуглил, но информации не много. похожий вопрос. не вмещается большой текст, необходим перенос на другую строку в...

TstringGrid многострочная ячейка
Возможно ли в StringGrid сделать что то вроде этого WordWrap:=true; // ????? Перенос по строкам

Сложная реглярка (многострочная)
Дорогие программисты прошу Ваше помощи! Есть такой кусок html кода :&lt;div align=&quot;justify&quot;&gt; В переходную эпоху...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru