![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Здравствуйте, помогите, пожалуйста, разобраться, как мне сделать так, чтобы при нажатии кнопки 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 |