powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как прекратить выполнение события из продцедуры?
7 сообщений из 32, страница 2 из 2
Как прекратить выполнение события из продцедуры?
    #39859554
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatDelphi 10.2, Release, Core i5-6500 3.2 GHz.

Delphi 2006, AMD ноутбук пятилетней давности 1Ггц.

Походу, они что-то сломали в RTL.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как прекратить выполнение события из продцедуры?
    #39859557
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Не. Надо было не из под среды запускать. Она даже в релизе ошибки отлавливает оказывается.

Теперь все как у тебя.
Код: pascal
1.
  for i:=0 to 1000000 do begin


4047
62
...
Рейтинг: 0 / 0
Как прекратить выполнение события из продцедуры?
    #39859660
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
InterSkyТо есть, цикл - это процедура внутри процедуры.
Если вместо комментария вы впишите текст программы и там встретится Exit, он сработает как Continue в циклах и завершит лишь внутреннюю процедуру "innerProc". По аналогии, встречающийся в цикле Break завершил бы внешнюю процедуру "outerProc".
Чта?
Всегда считал, что цикл - это конструкция, предназначенная для многократного выполнения. В паскале это for, while, repeat-until.
То, что вы привели, это последовательное выполнение процедуры.
И если в outerProc вы напишете Break без цикла, то будет ошибка компиляции. Потому что break должен находиться внутри цикла (for, while, repeat-until).
Код 1:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
begin
  for i := 0 to 100 do
  begin
    writeln(Format('%d', [i]));
    if i = 9 then
      Exit;
  end;
  writeln('after loop');
end;


Код 2:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
begin
  for i := 0 to 100 do
  begin
    writeln(Format('%d', [i]));
    if i = 9 then
      Break;
  end;
  writeln('after loop');
end;



Как вы думаете, есть разница между кодом 1 и 2?
...
Рейтинг: 0 / 0
Как прекратить выполнение события из продцедуры?
    #39859682
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
InterSky,

есть еще способ, если по твоим условиям позволено менять тип и кол-во параметров процедуры (изврат, конечно, но если сильно надо) :)
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
  { TForm1 }

  TForm1 = class(TForm)
    procedure FormDblClick(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: char);
  private
    FOutParam: Integer;
    FInParam: Integer;
  public
    procedure Proc1();
    procedure Proc2(out OutParam: Integer);

  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormDblClick(Sender: TObject);
begin
  Proc1();
end;

procedure TForm1.FormKeyPress(Sender: TObject; var Key: char);
begin
  if Key = chr(ord(VK_ESCAPE)) then FInParam:= 1;
end;

procedure TForm1.Proc1();
begin
  Proc2(FOutParam);
  if FOutParam <> 1
    then Self.Caption:= 'был exit'
    else Self.Caption:= 'не было exit''а';
end;

procedure TForm1.Proc2(out OutParam: Integer);
var n: Integer = 0;
begin
  FInParam:= 0;
  OutParam:= 1;
  while n < 10 do
  begin
    Application.ProcessMessages;
    if FInParam > 0 then
    begin
      OutParam:= 0;
      Exit;
    end;
    inc(n);
    Self.Caption:= IntToStr(n) ;
    Sleep(500);
  end;
end;  
...
Рейтинг: 0 / 0
Как прекратить выполнение события из продцедуры?
    #39861714
Linux_64
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуйте использовать вместо if then оператор выбора case или метку Label
...
Рейтинг: 0 / 0
Как прекратить выполнение события из продцедуры?
    #39861741
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13.09.2019 17:18, Linux_64 пишет:
> Попробуйте использовать вместо if then оператор выбора case или метку Label

и шо?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как прекратить выполнение события из продцедуры?
    #39861820
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Linux_64или метку Label
а go to почему не упомянул? :)
...
Рейтинг: 0 / 0
7 сообщений из 32, страница 2 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как прекратить выполнение события из продцедуры?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]