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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.08.2010, 00:01   #1
MyLastHit
Очень суровый
Участник клуба
 
Аватар для MyLastHit
 
Регистрация: 17.12.2009
Сообщений: 1,988
По умолчанию Авторасширение Memo

Решил написать программу которая бы увеличивала Мемо на одну строку если ее предыдущая строка уже полность заполнена. Создал однострочный мемо на 29 символов. написал код:
Код:
if length(memo1.text)<29 then begin memo1.Height:=17;memo1.Top:=160; end;

if length(memo1.text)>=29 then begin
if length(memo1.Text)<58 then memo1.Height:=32; memo1.Top:=160-15; end;

if length(memo1.text)>=58 then begin
if length(memo1.Text)<87 then memo1.Height:=47;memo1.Top:=160-15-15;end;

if length(memo1.text)>=87 then begin
if length(memo1.Text)<116 then memo1.Height:=60;memo1.Top:=160-30-15;end;

if length(memo1.text)>=116 then begin
if length(memo1.Text)<143 then memo1.Height:=75;memo1.Top:=160-30-15-15;end;

if length(memo1.text)>=143 then begin
if length(memo1.Text)<172 then memo1.Height:=90;memo1.Top:=160-30-15-15-15;end;
if length(memo1.text)>=172 then begin
if length(memo1.Text)<173 then memo1.Height:=105;memo1.Top:=160-30-15-15-15-15;end;
здесь увеличиваю Высоту мемо и поднимаю его на высоту увеличения(чтобы рост был как бы вверх)
Вродибы правильный, но все дергается, мерцает...
Можно решить мою проблемму или здесь вообще по другому решается все?
Ненавижу быть как все, но люблю, чтобы все были как я.

Последний раз редактировалось MyLastHit; 12.08.2010 в 00:04.
MyLastHit вне форума Ответить с цитированием
Старый 12.08.2010, 00:13   #2
r9m
₪₪₪₪₪₪₪₪
Форумчанин
 
Аватар для r9m
 
Регистрация: 16.04.2007
Сообщений: 471
По умолчанию

Нужно знать кол-во символов предыдущей строки. дальше всё пойдёт ништяк
r9m вне форума Ответить с цитированием
Старый 12.08.2010, 00:19   #3
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

попробуй так:
Код:
var
  Form1: TForm1;
    i:Integer;
implementation

{$R *.dfm}

procedure TForm1.memo1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);

begin
  if memo1.Lines.Count>i then
  begin
    memo1.Height:=memo1.Height+15;
    memo1.Top:=memo1.Top-15;
    i:=i+1;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  i:=1;
  memo1.DoubleBuffered:=True;
end;
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Старый 12.08.2010, 00:31   #4
MyLastHit
Очень суровый
Участник клуба
 
Аватар для MyLastHit
 
Регистрация: 17.12.2009
Сообщений: 1,988
По умолчанию

Ништяк DIgorevich))) Спасибо)))
Ненавижу быть как все, но люблю, чтобы все были как я.
MyLastHit вне форума Ответить с цитированием
Старый 14.08.2010, 20:25   #5
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Цитата:
Сообщение от r9m Посмотреть сообщение
Нужно знать кол-во символов предыдущей строки. дальше всё пойдёт ништяк
Во все не надо
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Старый 14.08.2010, 20:55   #6
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Цитата:
Сообщение от DIgorevich Посмотреть сообщение
попробуй так:
Код:
var
  Form1: TForm1;
    i:Integer;
implementation

{$R *.dfm}

procedure TForm1.memo1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);

begin
  if memo1.Lines.Count>i then
  begin
    memo1.Height:=memo1.Height+15;
    memo1.Top:=memo1.Top-15;
    i:=i+1;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  i:=1;
  memo1.DoubleBuffered:=True;
end;
А если шрифт изменить?

Я гдето делал с рассчётом шрифта и тп, если найду выложу как делал.
vovk вне форума Ответить с цитированием
Старый 15.08.2010, 00:25   #7
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

а при чем здесь шрифт? Мой код просто отслеживает переход на новую строку, и если он есть: меняет размеры и позицию memo...
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Старый 15.08.2010, 01:45   #8
DedBoroda
Пользователь
 
Аватар для DedBoroda
 
Регистрация: 15.08.2010
Сообщений: 49
По умолчанию

Цитата:
Сообщение от DIgorevich Посмотреть сообщение
а при чем здесь шрифт? Мой код просто отслеживает переход на новую строку, и если он есть: меняет размеры и позицию memo...
Это при условии, что высота букв <= 15.
Например, размер шрифта в 12 пунктов равен 16-пиксельному размеру шрифта на экране
DedBoroda вне форума Ответить с цитированием
Старый 15.08.2010, 08:32   #9
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

ну, ТС не маленький, догадается, что надо будет сравнивать с высотой шрифта и соответственно высоту memo изменять.
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод из Memo по английскому в Memo по русскому Sanek777 Общие вопросы Delphi 5 26.09.2008 00:17
Memo -=<[Evklidd]>=- Общие вопросы Delphi 3 01.02.2008 13:44
Memo Kocapb Общие вопросы C/C++ 2 17.01.2008 02:06
В Memo сделать так, чтобы текст был разного цвета, разноцветный memo Artem Компоненты Delphi 3 07.09.2007 13:40
В Memo ввёл раз!!! в Memo ввёл два!!! а где Memo ввёл раз??? Хs-You Компоненты Delphi 6 19.08.2007 19:48