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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.12.2009, 18:54   #1
user2010
Новичок
Джуниор
 
Регистрация: 25.12.2009
Сообщений: 5
По умолчанию Вопрос про Memo

Придумал код (дурной головой), который проверяет, есть ли в Мемо текст. Через таймер. Подскажите плиз как правильно написать и покороче (через массив?), в общем вот криво-код:
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if memo1.Lines.Text='' then button1.Enabled:=false else button1.Enabled:=true;
if memo2.Lines.Text='' then button1.Enabled:=false else button1.Enabled:=true;
if memo3.Lines.Text='' then button1.Enabled:=false else button1.Enabled:=true;
if memo4.Lines.Text='' then button1.Enabled:=false else button1.Enabled:=true;
if memo5.Lines.Text='' then button1.Enabled:=false else button1.Enabled:=true;
end;
user2010 вне форума Ответить с цитированием
Старый 25.12.2009, 19:25   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

button1.enabled:=(memo1.linex.count >0) or ... or (memo4.lines.count>0)
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 25.12.2009, 19:31   #3
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Всем своим Мемо назначьте этот обработчик (не каждому свой, а всем - этот один):
Код:
procedure TForm1.Memo1Change(Sender: TObject);
begin
Button1.Enabled:=not (Trim((Sender as TMemo).Text)='');
end;
Таймер - не нужен.

Последний раз редактировалось mihali4; 25.12.2009 в 19:34.
mihali4 вне форума Ответить с цитированием
Старый 25.12.2009, 19:43   #4
user2010
Новичок
Джуниор
 
Регистрация: 25.12.2009
Сообщений: 5
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Всем своим Мемо назначьте этот обработчик (не каждому свой, а всем - этот один):
Код:
procedure TForm1.Memo1Change(Sender: TObject);
begin
Button1.Enabled:=not (Trim((Sender as TMemo).Text)='');
end;
Таймер - не нужен.
При этом способе почему то глючет, кнопка то робит то нет

Цитата:
button1.enabled:=(memo1.lines.count >0)
А это не понял как использовать
user2010 вне форума Ответить с цитированием
Старый 25.12.2009, 19:49   #5
user2010
Новичок
Джуниор
 
Регистрация: 25.12.2009
Сообщений: 5
По умолчанию

Вот чел с другого форума подсказал, работает без глюков:

Код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Button1.Enabled := (Memo1.Text<>'') and
                     (Memo2.Text<>'') and
                     (Memo3.Text<>'') and
                     (Memo4.Text<>'') and
                     (Memo5.Text<>'');
end;
user2010 вне форума Ответить с цитированием
Старый 25.12.2009, 19:53   #6
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

user2010, давайте колитесь, по какому событию нужно определять пустой ли мемо? Михалыч дал хороший вариант, должно работать, Trim разве что можно убрать оттуда.

Цитата:
Вот чел с другого форума подсказал, работает без глюков:
Использовать таймер там где он не нужен, это называется через ж...

А, все, не учли один момент. Нужно ведь все мемо проверять а не один. Вот обработчик для всех мемо.
Код:
procedure TForm1.MemoChange(Sender: TObject);
begin
  Button1.Enabled := (Memo1.Text<>'') and
                     (Memo2.Text<>'') and
                     (Memo3.Text<>'') and
                     (Memo4.Text<>'') and
                     (Memo5.Text<>'');

end;
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 25.12.2009 в 19:57.
mutabor вне форума Ответить с цитированием
Старый 25.12.2009, 20:04   #7
user2010
Новичок
Джуниор
 
Регистрация: 25.12.2009
Сообщений: 5
По умолчанию

Спасибо всем за ответы) Колоться не надо, ибо какой-то фишки необычной здесь нету... А глючила кнопка потому что надо в обj инспекторе button1.enable в false ставить...)
user2010 вне форума Ответить с цитированием
Старый 25.12.2009, 20:18   #8
user2010
Новичок
Джуниор
 
Регистрация: 25.12.2009
Сообщений: 5
По умолчанию

Вот классный способ предложили:
Код:
var
  Memo        : TMemo;
  i           : Integer;
begin
  //Перебор всех компонентов на форме.
  for i := 0 to Self.ComponentCount - 1 do begin
    //Если очередной компонент оказался принадлежащим классу TMemo или его потомку.
    if Self.Components[i] is TMemo then begin
      //Устанавливаем ссылку на этот компонент.
      Memo := Self.Components[i] as TMemo;
      //Если в этом Мемо есть текст, то разрешаем кнопку и выходим из цикла,
      //тем самым - завершаем процедуру.
      if Memo.Text <> '' then begin
        Button1.Enabled := True;
        Break;
      end;
    end;
  end;
end;
user2010 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос про Memo doniyor Помощь студентам 1 25.03.2009 18:08
Вопрос про memo. Алён@ Компоненты Delphi 1 02.02.2009 13:23
Вопрос наверное про функции, а так точно даже не знаю про что. (Вопрос начинющего #6) Albert2008 Общие вопросы Delphi 4 21.08.2008 15:33
У меня вопрос про базы данных,а точнее про таблицы!!! Alexij Общие вопросы Delphi 1 13.04.2008 23:24
Вопрос про memo Artem Общие вопросы Delphi 1 14.09.2007 10:47