Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.09.2011, 19:45   #1
limansky
Пользователь
 
Регистрация: 08.05.2011
Сообщений: 14
По умолчанию Текст полностью не помещается в окно ввода.

Подскажите, существует ли событие, возникающее, когда текст выходит за рамки видимой части ввода Мемо?
Мне нужно реализовать автоматическую настройку высоты окна Мемо в зависимости от загружаемого текста.

Последний раз редактировалось limansky; 23.09.2011 в 19:53.
limansky вне форума Ответить с цитированием
Старый 23.09.2011, 20:08   #2
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

вам надо при загрузке текста приписать, чтобы memo растянулось в зависимости от количества строк загруженного текста
Вадим Мошев вне форума Ответить с цитированием
Старый 23.09.2011, 20:17   #3
limansky
Пользователь
 
Регистрация: 08.05.2011
Сообщений: 14
По умолчанию

Цитата:
Сообщение от Вадим Мошев Посмотреть сообщение
вам надо при загрузке текста приписать, чтобы memo растянулось в зависимости от количества строк загруженного текста
Ок. Вот конкретная задача.
Memo1.Width:=30;
Memo1.height:=10;

Memo1.Text:='Memo, растянись-ка так, чтобы мы увидели этот текст полностью!';

Пожалуйста, ЧТО и ГДЕ мне дописать для достижения цели?
limansky вне форума Ответить с цитированием
Старый 23.09.2011, 21:15   #4
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
const S = 'Подскажите, существует ли событие, возникающее, когда текст выходит за рамки видимой части ввода Мемо? '+
 'Мне нужно реализовать автоматическую настройку высоты окна Мемо в зависимости от загружаемого текста.';
begin
  Memo1.Text:=S;
  Memo1.Height:=(Abs(Memo1.Font.Height)+3)*memo1.Lines.Count+4;
end;
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 23.09.2011, 21:40   #5
limansky
Пользователь
 
Регистрация: 08.05.2011
Сообщений: 14
По умолчанию

to JUDAS
Спасибо. Очень близко. При размере шрифта 8 (ширина Мемо 185) в поле видимости попадает 4 строки из 5-и.
При размере шрифта 12 - в поле видимости оказывается 10 строк вместо 12-и...
limansky вне форума Ответить с цитированием
Старый 23.09.2011, 21:42   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Для WordWrap=True
Код:
procedure TForm1.FormCreate(Sender: TObject);
var s: String;
    xPaintBox: TPaintBox;
    xHeight: Integer;
    r: TRect;
begin
  s:='Подскажите, существует ли событие, возникающее, когда текст выходит за рамки видимой части ввода Мемо? '+
     'Мне нужно реализовать автоматическую настройку высоты окна Мемо в зависимости от загружаемого текста.';
  xPaintBox:=TPaintBox.Create(Self);
  xPaintBox.Parent:=Self;
  xPaintBox.Left:=Memo1.Left;
  xPaintBox.Top:=Memo1.Top;
  xPaintBox.ClientWidth:=Memo1.ClientWidth;
  xPaintBox.ClientHeight:=Screen.Height;
  xPaintBox.Font.Assign(Memo1.Font);
  r:=xPaintBox.ClientRect;
  xHeight:=DrawText(xPaintBox.Canvas.Handle,PChar(s),Length(s),r,DT_WORDBREAK);
  xPaintBox.Free;
  if xHeight>0 then Memo1.ClientHeight:=xHeight+Memo1.Font.Size;
  Memo1.Text:=s;
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 23.09.2011 в 21:48.
Аватар вне форума Ответить с цитированием
Старый 23.09.2011, 22:02   #7
limansky
Пользователь
 
Регистрация: 08.05.2011
Сообщений: 14
По умолчанию

to JUDAS
На моём компе с разными по высоте шрифтами ваша формула работает с такими коэффициентами:
Memo1.Height:=(Abs(Memo1.Font.Heigh t)+6)*memo1.Lines.Count+6;

to Аватар
Спасибо большое за внимание к моему вопросу.
Дело в том, что похожим способом, только я брал label у меня всё получилось.
Я загружал фразу сначала в label, затем измерял высоту и присваивал высоте Мемо. И это я посчитал слишком сложным путём. Мне казалось, что должно возникать какое-то событие, когда текст не вмещается в Мемо... Тогда можно было бы легко устанавливать высоту.
limansky вне форума Ответить с цитированием
Старый 24.09.2011, 17:23   #8
limansky
Пользователь
 
Регистрация: 08.05.2011
Сообщений: 14
По умолчанию

Вот последнее, что получилось весьма неплохо при фиксированной ширине Memo и WordWrap=True:
Memo1.Height:=2*(Memo1.Lines.Count) *(Memo1.Font.Size);
limansky вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Окно ввода Vasek007 Microsoft Office Excel 5 06.10.2010 23:22
почему не помещается изображение в таблице полностью otenova HTML и CSS 1 29.09.2010 14:42
Шифратор! Дешифрирует или шифрирует текст не полностью! sting Общие вопросы Delphi 1 30.11.2008 00:59
Окно ввода в Delphi Xeon332 Общие вопросы Delphi 6 29.10.2008 16:54