|
Вопрос # 1 339/ вопрос открыт / |
|
Приветствую, уважаемые эксперты!Как сделать чтобы программа выходила либо при движении курсора, либо при нажатии клавиши Esc ?
 |
Вопрос задал: Аксион (статус: 4-ый класс)
Вопрос отправлен: 14 февраля 2008, 17:39
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Dron
Здравствуйте, Блазер!
1. Закрытие программы при движении курсора можно запрограммировать разными способами. Можно обрабатывать событие формы OnMouseMove(), но это не лучший вариант, ведь курсор может находиться и вне формы. Вот ещё один способ.
Заведём глобальные переменные X и Y с начальными значениями -1:
var
Form1: TForm1;
X: Integer = -1;
Y: Integer = -1;
А во время работы программы по таймеру будем проверять, не изменились ли координаты курсора. У таймера (TTimer, System) следует установить Interval меньше секунды - например 100 мс. А обработчик прост - если позиция курсора изменилась, закрываем программу:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if (Mouse.CursorPos.X <> X) and (X <> -1) then
Close
else
X:=Mouse.CursorPos.X;
if (Mouse.CursorPos.Y <> Y) and (Y <> -1) then
Close
else
Y:=Mouse.CursorPos.Y
end;
Значения -1 введены только как стартовые. Значения переменным X и Y можно присвоить и во время запуска программы.
2. Выход при нажатии Escape - проще простого. У формы ставим KeyPreview = True и обрабатываем событие OnkeyDown():
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = VK_ESCAPE then
Close
end;
Удачи!
 |
Ответ отправил: Dron (статус: Студент)
Время отправки: 14 февраля 2008, 20:49
Оценка за ответ: 5
Комментарий к оценке: Спс
|
Мини-форум вопроса
Всего сообщений: 5; последнее сообщение — 2 марта 2008, 19:53; участников в обсуждении: 3.
|
Nikolas (статус: Посетитель), 16 февраля 2008, 16:41 [#1]:
Привет ВСЕМ. Могу посоветовать еще один способ решения проблемы
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
case key of
#27:form1.Close;
end;
end;
#27 - является аналогом "VK_ESCAPE".
|
|
Dron (статус: Студент), 16 февраля 2008, 17:26 [#2]:
Nikolas: а зачем делать case ради одного значения? И лучше всё же не код (27) писать, а именно VK_ESCAPE - потом проще будет понять...
С уважением.
|
|
Nikolas (статус: Посетитель), 17 февраля 2008, 17:57 [#3]:
согласен.
|
|
Вадим К (статус: Академик), 17 февраля 2008, 23:46 [#4]:
Цитата:
#27 - является аналогом "VK_ESCAPE".
Не совсем правильно сказано. Просто нужно посмотреть объявление
const
VK_ESCAPE = #27;
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Nikolas (статус: Посетитель), 2 марта 2008, 19:53 [#5]:
Странно, зачем из-за этого затевать такую дискуссию.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|