Поиск:

Ответ в темуСоздание новой темы Создание опроса
> подгонка компонента по ширине текста 
V
    Опции темы
gordmiand
Дата 27.7.2009, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



подскажите пож-та самую простую программную реализацию подгонки ширины компонента (например эдита) под длину какого-то текста (например строка из переменной AnsiString a)...пробовал функцией Length, но она возвращает количество символов в строке, а не ее длину...
PM MAIL   Вверх
Usper
Дата 27.7.2009, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 13.4.2007

Репутация: 15
Всего: 15



Ширину строки, которая будет нарисована на канве, можно узнать с помощью метода TextWidth канвы. Но канва есть не у каждого компонента...


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
gordmiand
Дата 27.7.2009, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



причем здесь канва? я про канву ничего не говорил...допустим есть 6 или 8-ми значное число и надо, чтобы ширина, например эдита, равнялась "ширине" данного числа...
PM MAIL   Вверх
Usper
Дата 27.7.2009, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 13.4.2007

Репутация: 15
Всего: 15



А как по-вашему определить ширину выводимого текста? Эта самая ширина будет зависеть не только от самого текста, но и от типа и размера шрифта, которым осуществляется вывод.
Код

void __fastcall TForm1::Edit1Change(TObject *Sender)
{
    Edit1->Width=Form1->Canvas->TextWidth(Edit1->Text)+12;
}

Пример конечно дурацкий, работает правильно только если на у формы и едита совпадает тип и размер шрифта.

Это сообщение отредактировал(а) Usper - 27.7.2009, 21:04


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
gordmiand
Дата 27.7.2009, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



понятно...вроде похоже на правду...а почему + именно 12? (и зачем вообще нужна эта добавка "+12"???)...b шрифты могут быть разные...как можно усовершенствовать данный пример?
PM MAIL   Вверх
Usper
Дата 28.7.2009, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 13.4.2007

Репутация: 15
Всего: 15



Усовершенствовать пример можно так:
Код

void __fastcall TForm1::Edit1Change(TObject *Sender)
{
    Graphics::TBitmap *B = new Graphics::TBitmap;
    B->Canvas->Font=Edit1->Font;
    Edit1->Width=B->Canvas->TextWidth(Edit1->Text)+12;
    delete B;
}

Но лучше, конечно, сделать свой компонент, унаследовав его от TEdit и сделав доступной канву.
Поле для вывода текста в TEdit уже чем сам TEdit из-за границ компонента, поэтому я и увеличил ширину Edit`а. К тому же есть один не понятный мне эффект: при вводе в такой Edit текст первый введённый символ может уехать за левую границу, не смотря на то, что места для вывода всей строки достаточно. Добавка в 12 пикселей к ширине вроде устраняет эту проблему...


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0422 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.