Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.06.2012, 16:49
mpdasa mpdasa вне форума
Прохожий
 
Регистрация: 08.07.2011
Сообщения: 18
Репутация: 10
Радость чтобы текст подгонялся по размеру окна

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

Ваш ход, знатоки
Ответить с цитированием
  #2  
Старый 02.06.2012, 17:13
PS11011010 PS11011010 вне форума
Новичок
 
Регистрация: 30.03.2012
Сообщения: 98
Репутация: 282
По умолчанию

Код:
for i := 0 to RichEdit1.Lines.Count - 1 do
 if MaxWidth < RichEdit1.Canvas.TextWidth(RichEdit1.Lines.Strings[i]) then
   MaxWidth := RichEdit1.Canvas.TextWidth(RichEdit1.Lines.Strings[i]);
Вроде ничего не наврал...
Так ты получишь ширину самой длинной строки.
Ответить с цитированием
  #3  
Старый 02.06.2012, 18:23
mpdasa mpdasa вне форума
Прохожий
 
Регистрация: 08.07.2011
Сообщения: 18
Репутация: 10
Сообщение

Цитата:
Сообщение от PS11011010
Код:
for i := 0 to RichEdit1.Lines.Count - 1 do
 if MaxWidth < RichEdit1.Canvas.TextWidth(RichEdit1.Lines.Strings[i]) then
   MaxWidth := RichEdit1.Canvas.TextWidth(RichEdit1.Lines.Strings[i]);
Вроде ничего не наврал...
Так ты получишь ширину самой длинной строки.

Верю вам, что вы ведёте меня в верном направлении.
А что мне делать дальше, имея ширину самой длинной строки.
И вообще может получиться так, что каждая строка не помещается в одну линию. Тогда надо все их уменьшать.
Ответить с цитированием
  #4  
Старый 02.06.2012, 18:50
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

Цитата:
лезут в 5, 6... линию
wordwrap отключить
Цитата:
А что мне делать дальше, имея ширину самой длинной строки.
уменьшать размер шрифта в цикле, пока она не поместиться в richedit
Ответить с цитированием
Этот пользователь сказал Спасибо Pyro за это полезное сообщение:
mpdasa (02.06.2012)
  #5  
Старый 02.06.2012, 19:35
mpdasa mpdasa вне форума
Прохожий
 
Регистрация: 08.07.2011
Сообщения: 18
Репутация: 10
Сообщение

Цитата:
wordwrap отключить
За это действительно спасибо!

Цитата:
уменьшать размер шрифта в цикле, пока она не поместиться в richedit
А как соотносится ширина окна и ширина стоки?

Последний раз редактировалось mpdasa, 02.06.2012 в 19:41.
Ответить с цитированием
  #6  
Старый 02.06.2012, 19:39
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Ширина окна в пикселях - Form.ClientWidth.
А как они соотносятся - это уже твое решение. В твоем случае, видимо, ширина строки должна быть меньше или равна ширине окна.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
Этот пользователь сказал Спасибо Bargest за это полезное сообщение:
mpdasa (02.06.2012)
  #7  
Старый 02.06.2012, 19:42
PS11011010 PS11011010 вне форума
Новичок
 
Регистрация: 30.03.2012
Сообщения: 98
Репутация: 282
По умолчанию

Ширина окна должна быть равна ширине строки+отступы
Ответить с цитированием
Этот пользователь сказал Спасибо PS11011010 за это полезное сообщение:
mpdasa (02.06.2012)
  #8  
Старый 02.06.2012, 19:58
mpdasa mpdasa вне форума
Прохожий
 
Регистрация: 08.07.2011
Сообщения: 18
Репутация: 10
Сообщение

Цитата:
Сообщение от Bargest
Ширина окна в пикселях - Form.ClientWidth.
У формы свойство ClientWidth есть, а у RichEdit нет.
Ответить с цитированием
  #9  
Старый 02.06.2012, 20:14
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

У него должен быть простой Width.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
Этот пользователь сказал Спасибо Bargest за это полезное сообщение:
mpdasa (03.06.2012)
  #10  
Старый 02.06.2012, 20:16
Аватар для cotseec
cotseec cotseec вне форума
Активный
 
Регистрация: 16.07.2008
Сообщения: 353
Версия Delphi: D7,TDE06,RAD09
Репутация: 1443
По умолчанию

Width, просто Width
__________________
Понять, что хочет заказчик - бесценно, ведь он платит MasterCard
Ответить с цитированием
Этот пользователь сказал Спасибо cotseec за это полезное сообщение:
mpdasa (03.06.2012)
  #11  
Старый 03.06.2012, 08:34
mpdasa mpdasa вне форума
Прохожий
 
Регистрация: 08.07.2011
Сообщения: 18
Репутация: 10
Радость Задача решена!

Код:
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;
Ответить с цитированием
  #12  
Старый 03.06.2012, 09:40
mpdasa mpdasa вне форума
Прохожий
 
Регистрация: 08.07.2011
Сообщения: 18
Репутация: 10
Сообщение

Цитата:
Сообщение от PS11011010
Код:
for i := 0 to RichEdit1.Lines.Count - 1 do
 if MaxWidth < RichEdit1.Canvas.TextWidth(RichEdit1.Lines.Strings[i]) then
   MaxWidth := RichEdit1.Canvas.TextWidth(RichEdit1.Lines.Strings[i]);
Один дилетанский вопрос. Когда я вставил ваш код и запускаю прогу то выдается сообщение
Цитата:
undeclared identifier: 'Canvas'

Это при том, что у меня есть строка:
Код:
var canvas: TCanvas;
Ответить с цитированием
  #13  
Старый 03.06.2012, 10:03
PS11011010 PS11011010 вне форума
Новичок
 
Регистрация: 30.03.2012
Сообщения: 98
Репутация: 282
По умолчанию

RichEdit.canvas и Canvas:TCanvas немного разные вещи
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:25.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025