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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.10.2011, 18:10   #1
Фиалка001
Пользователь
 
Регистрация: 01.05.2010
Сообщений: 14
По умолчанию Delphi выход из цикла по нажатию клавиши

Разрабатываю программу просмотра графических файлов, в частности, режим Слайд-шоу. Необходимо выйти из слайд-шоу при нажатии любой клавиши, кроме Esc. Мой код запускает режим, но не выходит из него при нажатии клавиш. Подскажите, пожалуйста, как достичь желаемого результата?
Код:
procedure TFormViewUV.SlideShowClick(Sender: TObject);
var
  fn: WideString;
  bt: Boolean;
begin
  bt:=False;
  while not bt do
    begin
      if Application.Terminated
      then
        bt:=True
      else
        begin
          fn:= FFileList.GetNext(FFileName, nfNext, FFileNextMsg and (not FFileList.Locked));
          if fn <> '' then
            LoadFile(fn, true);
          Delay(3000);
        end;
    end;
end;
Фиалка001 вне форума Ответить с цитированием
Старый 15.10.2011, 19:58   #2
fbus
Форумчанин
 
Аватар для fbus
 
Регистрация: 23.10.2008
Сообщений: 460
По умолчанию

создай глобальную переменную stop и присвой ей сразу false; потом сделай событие на нажатие кнопки escape stop:=true; а в самом цикле проверяй
if stop then exit;
надеюсь идею понял
fbus вне форума Ответить с цитированием
Старый 15.10.2011, 21:46   #3
ByAlex
Форумчанин
 
Аватар для ByAlex
 
Регистрация: 15.03.2011
Сообщений: 465
По умолчанию

Сделай булеву переменную и проверяй ее с помощью application.processMessages;
Помог - жми на весы!
ByAlex89@mail.ru
ByAlex вне форума Ответить с цитированием
Старый 16.10.2011, 11:19   #4
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Тут можно сделать 2 решения: 1 - как уже предложили, только в коде , а то новичку можно с ходу не понять
Код:
var stop : boolean = false;
...
procedure TFormViewUV.SlideShowClick(Sender: TObject);
var
  fn: WideString;
  bt: Boolean;
begin
  bt:=False;
  while not bt do
    begin
      if Application.Terminated
      then
        bt:=True
      else
        begin
        application.processmessages;
        if stop then 
        begin
        stop := false; 
        break;
        end; 
          fn:= FFileList.GetNext(FFileName, nfNext, FFileNextMsg and (not FFileList.Locked));
          if fn <> '' then
            LoadFile(fn, true);
          Delay(3000);
        end;
    end;
end;

procedure TFormViewUV.ButtonStopClick(Sender: TObject);
begin
stop := true;
end;
и второй, через таймер :
Код:
procedure TFormViewUV.SlideShowClick(Sender: TObject);
begin
timer1.enabled := true;
end;

procedure TFormViewUV.ButtonStopClick(Sender: TObject);
begin
timer1.enabled:= false;
end;

procedure TFormViewUV.timer1Timer(Sender: TObject);
begin
// весь код вашей процедуры, кроме delay(3000), вместо него надо установить timer1.interval = 3000
end;
phomm вне форума Ответить с цитированием
Старый 16.10.2011, 16:01   #5
Фиалка001
Пользователь
 
Регистрация: 01.05.2010
Сообщений: 14
По умолчанию

Спасибо большое!
Фиалка001 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как выйти из цикла по нажатию горячей клавиши? suslik_ Помощь студентам 2 06.07.2011 16:20
Выход из цикла vandrouny Общие вопросы Delphi 5 27.05.2010 20:23
Выход из цикла Сергей089 Помощь студентам 6 17.03.2010 16:44
По нажатию обеих кнопок мыши выход из программы Slash3 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 10 05.04.2009 00:47
Выход из цикла RIO Помощь студентам 1 21.04.2008 22:55