Как в TLabel выделить мышью текст
как текстовые значения параметров могут изменять своё (многострочное) представление в зависимости от ширины колонки, выделяемой для отображения текста. Сделать это смог используя объекты TLabel.
Вопрос: что нужно сделать, чтобы пользователь мог мышью выделить и копировать текст, отображаемый в TLabel?
Или:
Какие могут быть ещё способы реалезации такой задачи:
в диалоговом окне необходимо отобразить строковые значения полей записи таблицы, по принципу списка "Имя-Значение", с условием, чтобы текст, длина которого больше ширины колонки для отображения, не обрезался справа, а преобразовывался в многострочный. Вобщем так, как в Excel при свойстве ячейки "Переносить по словам".
Прочитал на форуме:
---------------------------------
Один из конструкторов TEdit имеет параметры начальной строки текста, максимальной длины строки текста и флаг, определяющий, является ли текстовый управляющий элемент многострочным.
По умолчанию редактируемый управляющий элемент имеет стили ES_LEFT (выравнивание влево), ES_AUTOHSCROLL (автоматическая горизонтальная прокрутка) и WS_BORDER (видимое обрамление управляющего элемента). Многострочные элементы имеют дополнительно стили ES_MULTILINE (многострочный), ES_AUTOSCROLL (автоматическая вертикальная прокрутка), WS_VSCROLL (вертикальная полоса прокрутки) и WS_HSCROLL (горизонтальная полоса прокрутки).
---------------------------------
Как добавить стиль ES_MULTILINE для объекта TEdit?
PS "Вась, а может сразу?"
PS "Вась, а может сразу?"
На стажеров не обижаюсь )))). Посмотри на вид моего окна во вложении и скажи как ты это зделаешь на TMemo?
PS: Александр :))
Ты предлагаешь вместо каждой TLabel использовать TMemo?
:) Согласен. Мне одно не нравиться в TMemo - строка завершается "переводом" на пустую следующую. Иногда TMemo задирает текст на строку выше, чтобы показать курсор в начале пустой строки. Это визуально портит картину ...
Не покидает ощущение, что где-то на форумах встречался с такой
штукой, но сейчас найти не могу!
Params.Style |= ES_MULTILINE;
попробовал - создается многострочный TEdit, можно листать, одна тонкость - видима только одна строка. Так что мемо - это наше все.
// щас поищем...
так что ли?
Params.Style |= ES_MULTILINE;
попробовал - создается многострочный TEdit, можно листать, одна тонкость - видима только одна строка. Так что мемо - это наше все.
Спаcибо. Но мемо - не наше! :). Ведь с TLable мне приходится проходить по всем объектам выстраивая их один под другим - вручную задаю Top. Если делать Align = alTop, то не получится, ведь высота TLabel - названия параметра (слева) скорее всего не совпадёт с высотой TLabel - значения параметра (справа) и т.д. Если TLabel сам меняет свою высоту, то TMemo - нет! Тоже ручная работа, типа : Высота = Количество строк * высота шрифта(строки). Кстати подобный рассчет высоты прийдётся делать и для TEdit...
Zor, а ты в какой среде работаешь? Не вижу у класса TEdit свойства Params
TEdit::CreateParams(Params);
Params.Style = Params.Style | ES_MULTILINE;
ps bcb6
Приведи полный код примера создания многострочного TEdit.
часть1:
{
public:
__fastcall TMyEdit (TComponent* Owner);
virtual void __fastcall CreateParams(Controls::TCreateParams &Params);
};
//---------------------------------------------------------------------------
часть2
{
}
//---------------------------------------------------------------------------
void __fastcall TMyEdit::CreateParams (Controls::TCreateParams &Params)
{
TEdit::CreateParams(Params);
Params.Style = Params.Style | ES_MULTILINE;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate (TObject *Sender)
{
TMyEdit *Edit = new TMyEdit(this);
Edit->Parent = this;
Edit->SetBounds(32, 32, 200, 10); // Height - пофиг
Edit->Text = "asdfsdgfadgadgr\r\nsdfgsdgsdfgsdg"; // 2 строки
}
//---------------------------------------------------------------------------
Иногда TMemo задирает текст на строку выше, чтобы показать курсор в начале пустой строки
это из-за того что мемо по умолчанию (в редакторе строк) лепит в конец перевод строки.
если задать руками - все нормально.
Memo1->Text = "11111111\r\n22222222\r\n33333333"; // 3 строки без пустышки снизу