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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.05.2012, 16:14   #1
Зод
Форумчанин
 
Регистрация: 25.08.2011
Сообщений: 140
По умолчанию Остановить цикл или завершить программу.

Есть форма, на ней кнопка. На кнопке повешан цикл типа :
Код:
 For i:=1 to Memo3.Lines.Count do
 begin
  if Length(Memo2.Text) = 0 then
   begin
   break;
   Application.Terminate;
   end;
  if Length(Memo3.Text) = 0 then
   begin
   break;
   Close;
   end;
 B1(self);
 end;
Ставил без break, убивается программа только через раз и то тасккиллом что не есть правильно. Собственно вопрос как убить эту программу когда Memo2 или Memo3 станет пустым?
P.S.
в В1 там код отправки в сеть.
Зод вне форума Ответить с цитированием
Старый 06.05.2012, 16:48   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Извиняюсь, а что это за ересь, и для чего она написана?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.05.2012, 17:14   #3
C_R_E_S_C_H
Пользователь
 
Аватар для C_R_E_S_C_H
 
Регистрация: 02.01.2012
Сообщений: 34
Смех

В обработчике события MemoChange пишешь такой код
Код:
if length(Memo.Text)=0 then
begin
Form1.Close;
end
можно еще вынести этот код в отжельную функцию и вызывать из MemoChange 2 и 3 мемо

И вопрос один имеется почему бы не начать писать код там где ему это полагается?
Код:
if Пиво=True then
ShowMessage('Пишем дальше');
Else ShowMessage('Да ну вас всех');

Последний раз редактировалось C_R_E_S_C_H; 06.05.2012 в 17:31.
C_R_E_S_C_H вне форума Ответить с цитированием
Старый 06.05.2012, 17:29   #4
Зод
Форумчанин
 
Регистрация: 25.08.2011
Сообщений: 140
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Извиняюсь, а что это за ересь, и для чего она написана?
А какая разница для чего? Ну скажем чекер это и что суть изменилась? и причем здесь ересь? Ни Close ни Terminate ни Break не работает. Как мне прописать завершение я спросил где ересь? Первый раз что бы окончание цикла задается количеством строк или основной код выносится в отдельную процедуру?

Цитата:
Сообщение от C_R_E_S_C_H Посмотреть сообщение
В обработчике события MemoChange пишешь такой код
Код:
if length(Memo.Text)=0 then
begin
Form1.Close;
end
можно еще вынести этот код в отжельную функцию и вызывать из MemoChange 2 и 3 мемо
А вот по поводу функции можно поподробнее? Я считал что задать номер Memo не реально...ну вот так скажем Memo + i .Text Там же разные цифры идут..
К слову эта конструкция то же не работает.
Если смотреть по шагам то там условие выполняется и программа переходит к закрытию формы только не закрывает. Код Form1.Close выполняет но безрезультатно.

Последний раз редактировалось Зод; 06.05.2012 в 17:44.
Зод вне форума Ответить с цитированием
Старый 06.05.2012, 17:59   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вот ересь:
Цитата:
For i:=1 to Memo3.Lines.Count do
begin
...
if Length(Memo3.Text) = 0 then
Если Memo3.Text пуст то тело цикла никогда не выполнится.
И потом: правильно будет - to Memo3.Lines.Count - 1
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.05.2012, 19:03   #6
Зод
Форумчанин
 
Регистрация: 25.08.2011
Сообщений: 140
По умолчанию

А там код выше есть. Условие так что если Memo3 будет пустым цикл не запустится.
А про -1 там же цикл от 1 до Count стоит а не от 0. Так что ровно столько раз сколько и строк и будет. Просто i программе не нужна поэтому так поставил. Смысл то не меняется или я не прав?
Зод вне форума Ответить с цитированием
Старый 06.05.2012, 19:11   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
там же цикл от 1 до Count стоит а не от 0.
Это не имеет значения. Ты сдвинул границы, чего делать нельзя. Пиши Count-1.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.05.2012, 19:42   #8
C_R_E_S_C_H
Пользователь
 
Аватар для C_R_E_S_C_H
 
Регистрация: 02.01.2012
Сообщений: 34
По умолчанию

Цитата:
Сообщение от Зод Посмотреть сообщение
А вот по поводу функции можно поподробнее?
А нафиг тебе номер мемо?
ты пишешь в обработчике события для мемо т.е. если у тебя изменяется количество символов в мемо срабатывает код который я приводил выше а про функцию я сказал для того чтобы по 2 раза одно и то-же не писать в 2х местах просто делаешь функцию без входных данных а на выходе ставишь булевую переменную а в теле функции ставишь код который выше а в обработчике КАЖДОГО мемо вставляешь эту функцию и все

А когда у тебя цикл остановится должен?

И скиь сюда исходник программы так лучше будет

Кстати в мемо нумерация строк с 0 начинается т.е. у 1 строки индекс 0 у 2-ой строки 1 и.т.д. так-что правильно строчка будет выглядеть так
Код:
For i:=0 to Memo3.Lines.Count-1 do
т.к. Memo3.Lines.Count это число строк в мемо и функция у тебя всегда оставляла 1 строку в мемо т.к. i было равно 1
Код:
if Пиво=True then
ShowMessage('Пишем дальше');
Else ShowMessage('Да ну вас всех');

Последний раз редактировалось C_R_E_S_C_H; 06.05.2012 в 19:58.
C_R_E_S_C_H вне форума Ответить с цитированием
Старый 06.05.2012, 19:48   #9
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

В обработчике события MemoChange пишешь такой код
Код:
if length((sender as Tmemo).Text)=0 then
Form1.Close;
не?
Кольша вне форума Ответить с цитированием
Старый 07.05.2012, 08:35   #10
Зод
Форумчанин
 
Регистрация: 25.08.2011
Сообщений: 140
По умолчанию

Цитата:
Сообщение от Кольша Посмотреть сообщение
В обработчике события MemoChange пишешь такой код
Код:
if length((sender as Tmemo).Text)=0 then
Form1.Close;
не?
не, не работает. Условие выполняется а программа не закрывается. Раньше все это работало а сейчас даже не знаю в чем проблема.

Цитата:
Сообщение от C_R_E_S_C_H Посмотреть сообщение
А нафиг тебе номер мемо?
ты пишешь в обработчике события для мемо т.е. если у тебя изменяется количество символов в мемо срабатывает код который я приводил выше а про функцию я сказал для того чтобы по 2 раза одно и то-же не писать в 2х местах просто делаешь функцию без входных данных а на выходе ставишь булевую переменную а в теле функции ставишь код который выше а в обработчике КАЖДОГО мемо вставляешь эту функцию и все

А когда у тебя цикл остановится должен?

И скиь сюда исходник программы так лучше будет

Кстати в мемо нумерация строк с 0 начинается т.е. у 1 строки индекс 0 у 2-ой строки 1 и.т.д. так-что правильно строчка будет выглядеть так
Код:
For i:=0 to Memo3.Lines.Count-1 do
т.к. Memo3.Lines.Count это число строк в мемо и функция у тебя всегда оставляла 1 строку в мемо т.к. i было равно 1
По сути когда возникнет условие. Либо Memo2 либо Memo3 пустым станет. Я ставлю цикл отталкиваясь от Memo2 к примеру тогда пустым оно не будет работать но мне нужно контралировать сразу два Memo а все попытки завершить остановить цикл не работают. Просто программа вызывается другой прогой и должна сама завершаться. Как бы расписание что ли. Например первая прога будет запускать вторую каждые 15 минут а если вторая не будет завершаться то и смысла нет в этом. Весь код в один исходник сливать не хочу там функционнал совсем разный.
Ну так я i не использую. У меня нет в коде конструкции типа Memo3.Lines[i] ну с этим понятно, завершиться бы еще)
Зод вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как правильно завершить цикл? Bape}l{ka Microsoft Office Excel 20 13.01.2012 12:41
Остановить цикл for basten Общие вопросы C/C++ 1 30.03.2010 11:40
Остановить цикл mavlon_m Общие вопросы Delphi 4 04.08.2009 17:00
Как корректно завершить цикл? Iren Microsoft Office Excel 4 02.11.2007 09:58
как корректно остановить цикл. Alar Общие вопросы Delphi 0 29.10.2006 10:42