|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Прерывание программы по ESC
Здравствуйте, помогите, пожалуйста, разобраться, как мне сделать так, чтобы при нажатии кнопки ESC программа останавливалась? Вот код:
Цитата:
Последний раз редактировалось boobonick, 26.09.2010 в 10:13. |
#2
|
||||
|
||||
Application.ProcessMessages;
|
#3
|
|||
|
|||
Спасибо огромное!
|
#4
|
|||
|
|||
Вместо Sleep лучше использовать следующий механизм., не будет подвисаний.
Код:
procedure _Delay(dwMilliseconds: Longint); var iStart, iStop: DWORD; begin iStart := GetTickCount; repeat iStop := GetTickCount; Application.ProcessMessages; until (iStop - iStart) >= DWORD(dwMilliseconds); end; |
#5
|
|||
|
|||
загрузка процессора на 100% будет выглядеть не красиво
|
#6
|
|||
|
|||
Не получается у меня, с Application.ProcessMessages; - это осуществимо вообще или лучше здесь потоки использовать? По коду у меня получается, что крутится бесконечный цикл, который должен прерваться при нажатии кнопки Esc.
|
#7
|
||||
|
||||
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Label1: TLabel; Button1: TButton; procedure FormKeyPress(Sender: TObject; var Key: Char); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin if Key=#27 then Tag:=1; end; procedure TForm1.Button1Click(Sender: TObject); begin while Tag=0 do begin Label1.Caption:=IntToStr(Label1.Tag); Label1.Tag:=Label1.Tag+1; Application.ProcessMessages; end; Close; end; end. Пишу программы за еду. __________________ |
#8
|
|||
|
|||
Спасибо за ответы, долго ломал голову, приду домой и обязательно загоню)
Последний раз редактировалось boobonick, 05.10.2010 в 12:27. |
#9
|
|||
|
|||
Если я делаю так, то Esc не срабатывает :
PHP код:
Но стоит убрать PHP код:
И кнопка срабатывает. Как я понимаю это связано с функцией, но как это исправить не понимаю, разъясните, если возможно, пожалуйста Последний раз редактировалось boobonick, 05.10.2010 в 21:24. |
#10
|
||||
|
||||
Все правильно, и все работает, только поставь у формы (или в design time или в run time) свойство KeyPreview := True;
Это означает, что все события клавы сначала обрабатывает форма, а уж потом все остальные компоненты... Помогаю за Спасибо |
#11
|
|||
|
|||
Так у меня KeyPreview := True;, но вот курсор перемещается, но Escape не срабатывает почему-то и программа не останавливается
|
#12
|
||||
|
||||
Код:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin if Key=#27 then Tag:=1; end; ... button1click... begin while(tag=0) do begin// перемещаю курсор Sleep(3000); // ВНИМАНИЕ! если ты ставишь слип на 3 сек, то даже если человек нажмет esc, то выход произойдет через 3секунды... ... end; .... Помогаю за Спасибо |
#13
|
|||
|
|||
а что, Actions уже отменили?
создешь Action, ставишь ему горячую клавишу Esc и вперед. |
#14
|
|||
|
|||
Цитата:
Правильно, все-таки, будет исходник скинуть, когда домой приду, т.к. дело не в sleep. Я вот думаю (как дилетант), а может она в функциях зацикливается: Mouse_event(MouseEventf_LeftDown,480,200,0,0); Mouse_event(MouseEventf_LeftUp,480,200,0,0); |
#15
|
|||
|
|||
Вот, если есть возможность, подсобите, пожалуйста)
http://data.cod.ru/70357 |