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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.08.2015, 12:26   #1
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию Прерывание события, первый exit не помог

Есть такой код:
Код:
procedure TForm1.Edit1Change(Sender: TObject);
begin
  if edit1.Text = '' then
    exit;  //<- 1-ый «exit»
  showmessage('1');

    if length(edit1.Text) = 2 then
    begin
        showmessage('2');
        edit1.Clear;
        {exit;}    //<- 2-ой «exit» 
        showmessage('3');
    end;
   showmessage(‘4’);
end;
Можно ли сделать, чтоб «showmessage('3');» - не выполнялось, БЕЗ учета 2-го «exit», а с отработкой 1-го «exit»?

Спасибо.
KBO вне форума Ответить с цитированием
Старый 14.08.2015, 12:31   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Можно ли сделать, чтоб «showmessage('3');» - не выполнялось, БЕЗ учета 2-го «exit», а с отработкой 1-го «exit»?
а если все это сказать по-русски
в таких-то случаях showMessage(1)
в таких-то ... 3
.....

как вариант
Код:
case length(edit1.text) of
0: begin  .... end;
1: begin ... end;
else begin ... end;
end;
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 14.08.2015, 12:41   #3
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

Нет, просто в событии таких
Код:
if length(edit1.Text) = 2 then
и не таких, тоже много (это как пример, упрощенный вариант)...
но даже дело не в этом.
А в строках (в моментах)
Код:
edit1.Clear;
встречающейся при различных ситуациях в этом собитии.
А т.к. это возвращает в начало события, т.е. на
Код:
if edit1.Text = '' then
    exit;  //<- 1-ый «exit»
я и хотел, чтоб на этих строках, все и заканчивалось, я имею ввиду выполнение события.
И я не влазил в основной код

Последний раз редактировалось KBO; 14.08.2015 в 12:49.
KBO вне форума Ответить с цитированием
Старый 14.08.2015, 13:16   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

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

Код:
if length(edit1.Text) = 2 then
    begin
        Edit1.OnChange:=nil; //Deactivate
        edit1.Clear;
        Edit1.OnChange := Edit1Change; // восстановить обработчик
        showmessage('2');
        exit;
    end;

Последний раз редактировалось Serge_Bliznykov; 14.08.2015 в 13:20.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.08.2015, 14:27   #5
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

если честно толком не понял, чего вы хотите.
Код:
procedure TForm1.Edit1Change(Sender: TObject);
begin
  if edit1.Text = '' then
    exit;  //<- 1-ый «exit» тут происходит выход из процедуры больше обработчик нечего не выполнит 
{если этит не пуст пойдем по поду дальше} 
 showmessage('1'); //выведем сообщение

    if length(edit1.Text) = 2 then // если кол-во символов в тексте 2
    begin
        showmessage('2');  //выведем сообщение
        edit1.Clear; // отчистим эдит 
        {exit;}    //<- 2-ой «exit»  если открыть скобки  showmessage('3'); вообще не когда не заработает проще убрать его.
        showmessage('3');  //выведем сообщение если скобки не открывать
    end; 
   showmessage('4'); // ведем сообщение 
end;
на тесте должно показать так
Едит пуст ничего не происходит
Едит имеет текст состоящий не из 2х символов выводится, 2 сообщение "2" и "4"
Едит имеет текст из 2-х символов выводятся все сообщения "1","2","3","4"
если открыть скобки {exit;}
Едит имеет текст из 2-х символов выводятся сообщения "1" и "2"

а чего вам нужно добиться??
Терпение!Дежурный экстрасенс скоро свяжется с вами!
Dvoishnik вне форума Ответить с цитированием
Старый 14.08.2015, 15:53   #6
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

Цитата:
Сообщение от Dvoishnik Посмотреть сообщение
а чего вам нужно добиться??
В "Edit1Change", у меня обрабатывается инф-я, которую пользователь вводит в "Edit1".
И в "Edit1Change", есть некое количество моментов, при котором происходит:
Код:
edit1.Clear;
После которого "edit1" очищается. И значит мне, не нужно далее обрабатывать "Edit1Change".
Чтоб, после каждого
Код:
edit1.Clear;
мне не писать "Exit", я и хотел, где-то в одном месте, делать выход из обработчика
KBO вне форума Ответить с цитированием
Старый 14.08.2015, 16:39   #7
koljsch
Форумчанин
 
Регистрация: 26.01.2009
Сообщений: 360
По умолчанию

Может я не так Вас понял, да и суть проблемы как-то непонятна, но не легче заменить
Код:
if edit1.Text = '' then
на
Код:
if edit1.Text <> '' then
И весь блок события Edit1Change обернуть в вышеописанное условие?
koljsch вне форума Ответить с цитированием
Старый 14.08.2015, 16:54   #8
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

Цитата:
Сообщение от koljsch Посмотреть сообщение
Может я не так Вас понял, да и суть проблемы как-то непонятна, но не легче заменить
Код:
if edit1.Text = '' then
на
Код:
if edit1.Text <> '' then
И весь блок события Edit1Change обернуть в вышеописанное условие?
Все равно без 2-ого "exit" не обойтись.
"showmessage('3');" - все равно выпадает. :-)
KBO вне форума Ответить с цитированием
Старый 14.08.2015, 17:59   #9
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Можно запускать таймер при ОнЧейнч, в таймер скопировать этот код, там работать точно будет, и при выполнении кода тормозить таймер, а потом exit;

Ну это если ничего не поможет, говонокод конечно выйдет, но все же.

Лучше пришлите наработки все свои, подумаем как сделать лучше.

А вообще, как выше было упомянуто:
Код:
procedure TForm1.Edit1Change(Sender: TObject);
begin
       if trim(edit1.Text) <> '' then
  begin
  showmessage('1');

    if length(edit1.Text) = 2 then
    begin
        showmessage('2');
        edit1.Clear;
        exit;
        showmessage('3');
    end;
   showmessage('4');
   end;
end;
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 14.08.2015, 19:08   #10
koljsch
Форумчанин
 
Регистрация: 26.01.2009
Сообщений: 360
По умолчанию

Цитата:
Все равно без 2-ого "exit" не обойтись.
"showmessage('3');" - все равно выпадает. :-)
Напишите более подробно, что именно Вам нужно, т.к., я думаю, тут многие не поймут самого задания
koljsch вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прерывание 21h функция 4C (Exit) RuVarez Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 29.10.2012 15:29
[C++] Переставить местами первый минимальный и первый максимальный элементы массива Aaaaaa111 Помощь студентам 2 27.02.2012 11:56
Обработка матриц.В каждой строке матрицы найти первый минимальный и первый максимальный элементы и поменя ride013 Помощь студентам 4 20.04.2011 13:14
События в WPF. Обращение к компонентам формы из события Casper-SC Общие вопросы .NET 3 25.07.2010 19:03
помог получил ключ clop1000 Фриланс 3 06.05.2008 06:42