Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как в TLabel выделить мышью текст

3.2K
11 апреля 2008 года
nikipelovav
152 / / 12.04.2006
Во вложении два изображения окна "Информация". В них видно,
как текстовые значения параметров могут изменять своё (многострочное) представление в зависимости от ширины колонки, выделяемой для отображения текста. Сделать это смог используя объекты TLabel.

Вопрос: что нужно сделать, чтобы пользователь мог мышью выделить и копировать текст, отображаемый в TLabel?

Или:

Какие могут быть ещё способы реалезации такой задачи:

в диалоговом окне необходимо отобразить строковые значения полей записи таблицы, по принципу списка "Имя-Значение", с условием, чтобы текст, длина которого больше ширины колонки для отображения, не обрезался справа, а преобразовывался в многострочный. Вобщем так, как в Excel при свойстве ячейки "Переносить по словам".



Прочитал на форуме:

---------------------------------
Один из конструкторов TEdit имеет параметры начальной строки текста, максимальной длины строки текста и флаг, определяющий, является ли текстовый управляющий элемент многострочным.

По умолчанию редактируемый управляющий элемент имеет стили ES_LEFT (выравнивание влево), ES_AUTOHSCROLL (автоматическая горизонтальная прокрутка) и WS_BORDER (видимое обрамление управляющего элемента). Многострочные элементы имеют дополнительно стили ES_MULTILINE (многострочный), ES_AUTOSCROLL (автоматическая вертикальная прокрутка), WS_VSCROLL (вертикальная полоса прокрутки) и WS_HSCROLL (горизонтальная полоса прокрутки).
---------------------------------

Как добавить стиль ES_MULTILINE для объекта TEdit?
8.4K
11 апреля 2008 года
Zor
104 / / 23.04.2006
...и получить в результате TMemo?
PS "Вась, а может сразу?"
3.2K
11 апреля 2008 года
nikipelovav
152 / / 12.04.2006
Цитата: Zor
...и получить в результате TMemo?
PS "Вась, а может сразу?"



На стажеров не обижаюсь )))). Посмотри на вид моего окна во вложении и скажи как ты это зделаешь на TMemo?

PS: Александр :))

8.4K
11 апреля 2008 года
Zor
104 / / 23.04.2006
Убираешь рамку, меняешь цвет, ставишь read only. Остальное по фото не нагадаешь :)
3.2K
11 апреля 2008 года
nikipelovav
152 / / 12.04.2006
Цитата: Zor
Убираешь рамку, меняешь цвет, ставишь read only. Остальное по фото не нагадаешь :)



Ты предлагаешь вместо каждой TLabel использовать TMemo?

8.4K
11 апреля 2008 года
Zor
104 / / 23.04.2006
что вас смущает? поставить 50 лабелей - нормально, а 50 - мемов - нельзя? кто ж запретит то
3.2K
11 апреля 2008 года
nikipelovav
152 / / 12.04.2006
Цитата: Zor
что вас смущает? поставить 50 лабелей - нормально, а 50 - мемов - нельзя? кто ж запретит то



:) Согласен. Мне одно не нравиться в TMemo - строка завершается "переводом" на пустую следующую. Иногда TMemo задирает текст на строку выше, чтобы показать курсор в начале пустой строки. Это визуально портит картину ...

3.2K
11 апреля 2008 года
nikipelovav
152 / / 12.04.2006
Я в начале писал про стили для TEdit. Ты в этом помочь можешь?
Не покидает ощущение, что где-то на форумах встречался с такой
штукой, но сейчас найти не могу!
8.4K
11 апреля 2008 года
Zor
104 / / 23.04.2006
ну, это мелочь. при FocusLost ставите курсор на 1:1 и все красиво.

Params.Style |= ES_MULTILINE;
попробовал - создается многострочный TEdit, можно листать, одна тонкость - видима только одна строка. Так что мемо - это наше все.
3.2K
11 апреля 2008 года
nikipelovav
152 / / 12.04.2006
Цитата: Zor
ну, это мелочь. при FocusLost ставите курсор на 1:1 и все красиво.
// щас поищем...



так что ли?

 
Код:
SendMessage( Memo->Handle, EM_LINESCROLL, 0, -Memo->Lines->Count);
3.2K
11 апреля 2008 года
nikipelovav
152 / / 12.04.2006
Цитата: Zor
ну, это мелочь. при FocusLost ставите курсор на 1:1 и все красиво.

Params.Style |= ES_MULTILINE;
попробовал - создается многострочный TEdit, можно листать, одна тонкость - видима только одна строка. Так что мемо - это наше все.



Спаcибо. Но мемо - не наше! :). Ведь с TLable мне приходится проходить по всем объектам выстраивая их один под другим - вручную задаю Top. Если делать Align = alTop, то не получится, ведь высота TLabel - названия параметра (слева) скорее всего не совпадёт с высотой TLabel - значения параметра (справа) и т.д. Если TLabel сам меняет свою высоту, то TMemo - нет! Тоже ручная работа, типа : Высота = Количество строк * высота шрифта(строки). Кстати подобный рассчет высоты прийдётся делать и для TEdit...

Zor, а ты в какой среде работаешь? Не вижу у класса TEdit свойства Params

8.4K
12 апреля 2008 года
Zor
104 / / 23.04.2006
это параметр функции CreateParams, стили контрола

TEdit::CreateParams(Params);
Params.Style = Params.Style | ES_MULTILINE;

ps bcb6
3.2K
12 апреля 2008 года
nikipelovav
152 / / 12.04.2006
bcb пишет TCustomEdit::CreateParams() is not accessible.

Приведи полный код примера создания многострочного TEdit.
8.4K
12 апреля 2008 года
Zor
104 / / 23.04.2006
балет!
часть1:
 
Код:
class TMyEdit : public TEdit
{
public:
__fastcall TMyEdit (TComponent* Owner);
virtual void __fastcall CreateParams(Controls::TCreateParams &Params);
};
//---------------------------------------------------------------------------


часть2

Код:
__fastcall TMyEdit::TMyEdit (TComponent* Owner) : TEdit(Owner)
{
}
//---------------------------------------------------------------------------

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 строки без пустышки снизу
3.2K
12 апреля 2008 года
nikipelovav
152 / / 12.04.2006
Спасибо. Попробовал. Беру свои слова о TMemo обратно. Таки с этим объектом удобнее чем с модифицированным TEdit.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог