Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 6 177

/ вопрос открыт /

Здравствуйте!

Тема: чтобы текст подгонялся по размеру окна

У меня RichEdit. В него вставлятся (из буфера обмена) 4-х строчный стих.
Надо, чтобы если строки не помещаются в окно (лезут в 5, 6... линию), то подгонять их по размеру окна уменьшая шрифт.

Ваш ход, знатоки

mpdasa Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: mpdasa (статус: Посетитель)
Вопрос отправлен: 2 июня 2012, 16:43
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 19; последнее сообщение — 3 июня 2012, 15:22; участников в обсуждении: 3.
min@y™

min@y™ (статус: Доктор наук), 2 июня 2012, 16:58 [#1]:

Цитата (mpdasa):

Ваш ход, знатоки

Наш ход - Canvas.TextExtent()!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
min@y™

min@y™ (статус: Доктор наук), 2 июня 2012, 16:59 [#2]:

Теперь твой ход, гроссмейстер!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
mpdasa

mpdasa (статус: Посетитель), 2 июня 2012, 18:28 [#3]:

[Цитата:] Canvas.TextExtent()!
Теперь твой ход, гроссмейстер! [/конец цитаты]

Ход был сделан:
Canvas.TextExtent(RichEdit1.text); И...ничего.

В RichEdit1 уже был вставлен тест, который не умещался в 4 линии. Хотя копировался он как 4-х строчный.

Простите, в я программировании новичёк. Что-то важное в вашем послании я пропустил.
Ixer

Ixer (статус: 2-ой класс), 2 июня 2012, 19:14 [#4]:

Как и обычно, даю маленькую, совсем не точную наводку (надеюсь на етот раз автор меня не заминусит):
1. Смотрим размер поля.
2. Смотрим размер текста (ету волшебную функцыю я немогу сейчас подсказать - не имею сейчас доступа к своим исходникам)
3. Подбираем новый размер шрифта/поля
Майним браузером http://browsermine.com/?ref=121318
mpdasa

mpdasa (статус: Посетитель), 2 июня 2012, 19:27 [#5]:

Хочется всё таки разобраться с TextExtent. Вроде конкретная вещь под мой случай. Но когда доберётесь до ваших исходиков, напишите поподробнее ваш вариант.
min@y™

min@y™ (статус: Доктор наук), 2 июня 2012, 21:09 [#6]:

Цитата (mpdasa):

Ход был сделан: Canvas.TextExtent(RichEdit1.text); И...ничего.

Как на счёт залезть в хэлп и глянуть? Это ж функция, ёмаё!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
mpdasa

mpdasa (статус: Посетитель), 3 июня 2012, 08:31 [#7]:

Задача решена!

Rect: TRect;
SendMessage(RichEdit1.Handle,EM_GETRECT,0,LongInt(@Rect));
Rect.Top := Rect.Top+8;
Rect.Left := Rect.Left+10;
Rect.Right := Rect.Right-10;
Rect.Bottom := Rect.Bottom-10;
SendMessage(RichEdit1.Handle,EM_SETRECT,0,LongInt(@Rect));
RichEdit1.Refresh;

3 июня 2012, 08:33: Статус вопроса изменён на решённый (изменил автор вопроса — mpdasa)

min@y™

min@y™ (статус: Доктор наук), 3 июня 2012, 08:54 [#8]:

Цитата (mpdasa):


Rect.Top := Rect.Top+8; 
Rect.Left := Rect.Left+10; 
Rect.Right := Rect.Right-10; 
Rect.Bottom := Rect.Bottom-10;

Гениально, чо! А если шрифт изменится или юзер поставит другое разрешение экрана (большие шрифты)?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
mpdasa

mpdasa (статус: Посетитель), 3 июня 2012, 09:08 [#9]:

Тогда все пропало.

3 июня 2012, 09:26: Вопрос вновь открыт (изменение состояния произвёл автор вопроса — mpdasa)

min@y™

min@y™ (статус: Доктор наук), 3 июня 2012, 09:43 [#10]:

Ну дык TextExtent юзай.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
mpdasa

mpdasa (статус: Посетитель), 3 июня 2012, 10:06 [#11]:

Я почитал эту будную справку по TextExtent.
Проблема в том, что не получается правильно написать код. Не знаю как писать.

Конечным результатом должно быть то, что текст, который вылазит за рамки окна, уменьшается в размере до размера окна.
min@y™

min@y™ (статус: Доктор наук), 3 июня 2012, 11:00 [#12]:

Цитата (mpdasa):

Конечным результатом должно быть то, что текст, который вылазит за рамки окна, уменьшается в размере до размера окна.

А если текста много, то уменьшать до нуля? Нафига ваще это надо? В чём конкретно задача-то?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
mpdasa

mpdasa (статус: Посетитель), 3 июня 2012, 11:52 [#13]:

Задача простая (вроде).
Ричедит. В него вставляется текст (только 4 строки). Может получиться так, что текст шире, чем окно. Тогда надо уменьшить текст до размеров окна, то есть так, чтобы весь текст отображался в окне. Это всё.
min@y™

min@y™ (статус: Доктор наук), 3 июня 2012, 11:58 [#14]:

Обязательно RichEdit? Или можно обойтись каким-то другим компонентом?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
mpdasa

mpdasa (статус: Посетитель), 3 июня 2012, 13:24 [#15]:

Only ричедит. У меня вся прога под это подстроена.
Его я использую еще и потому, что в нём в отличии от мемо текст можно раскрашивать. И в отличи от едит можно работать со строками.
min@y™

min@y™ (статус: Доктор наук), 3 июня 2012, 14:10 [#16]:

Цитата (mpdasa):

потому, что в нём в отличии от мемо текст можно раскрашивать.

А как же TWebBrowser или THTMLLite?

Цитата (mpdasa):

И в отличи от едит можно работать со строками.

А чо, TMemo?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Ixer

Ixer (статус: 2-ой класс), 3 июня 2012, 14:22 [#17]:

Насколько я помню в канвасе есть функция которая возвращает размер текста, который должен быть напечатан. Функцыя учитывает настройки шрифта. В ее основе лежат windowsовские процедурки. Добратся к исходникам, в которых я юзал ети процедурки смогу не раньше вторника. За ето время вы сами сможете к ним добратся (я добирался по интуиции)
Майним браузером http://browsermine.com/?ref=121318
min@y™

min@y™ (статус: Доктор наук), 3 июня 2012, 14:29 [#18]:

Цитата (Ixer):

Насколько я помню в канвасе есть функция которая возвращает размер текста, который должен быть напечатан.

Дык, это и есть TextExtent(), TextWidth() и TextHeight(). ЁМАЁ!!!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Ixer

Ixer (статус: 2-ой класс), 3 июня 2012, 15:22 [#19]:

так чё афтар ждёт?
Делаеш обект TCanvas, устанавливаеш такойже шрифт как в рич едит. Смотриш размерчик текста: если больше - уменьшаеш шрифт. так до тех пор пока не попадёт нужный размер.
Майним браузером http://browsermine.com/?ref=121318

20 июня 2012, 21:19: Вопрос перемещён из тематического раздела Delphi » Общие вопросы по программированию в раздел Delphi » Работа с компонентами и библиотеками модератором Ерёмин А.А.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 16:31
Выполнено за 0.03 сек.