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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.07.2013, 14:21   #1
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию Действие при нажатии

Я новичек в delphi, помогите разобраться.
Нужно сделать так, чтобы при нажатии кнопки происходило какое-то действие, а именно нужно взять координаты с экрана.
Открыв гугл прочитал про событие OnKeyDown, но не смог разобраться как его использовать. Координаты взятые с экрана должны выводиться в форму Memo. Сама функция эта должна работать просто при включенной программе ( без кнопки ). Я попробовал это все осуществить и для формы memo я написал вот такое событие:

Код:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
  var Point:TPoint;
begin
if key=VK_RETURN then
begin
GetCursorPos(Point);
Memo1.Lines.Add('(X=' + IntToStr(Point.X)+ ',Y='+ IntToStr(Point.Y));
end;
end;

end.
Оно ничего не работает, что не так?
Praud вне форума Ответить с цитированием
Старый 31.07.2013, 16:22   #2
spirit-ua
Форумчанин
 
Аватар для spirit-ua
 
Регистрация: 04.06.2009
Сообщений: 351
По умолчанию

Цитата:
Сообщение от Praud Посмотреть сообщение
Я новичек в delphi, помогите разобраться.
Нужно сделать так, чтобы при нажатии кнопки происходило какое-то действие, а именно нужно взять координаты с экрана.
Открыв гугл прочитал про событие OnKeyDown, но не смог разобраться как его использовать. Координаты взятые с экрана должны выводиться в форму Memo. Сама функция эта должна работать просто при включенной программе ( без кнопки ). Я попробовал это все осуществить и для формы memo я написал вот такое событие:

Код:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
  var Point:TPoint;
begin
if key=VK_RETURN then
begin
GetCursorPos(Point);
Memo1.Lines.Add('(X=' + IntToStr(Point.X)+ ',Y='+ IntToStr(Point.Y));
end;
end;

end.
Оно ничего не работает, что не так?
Если "при включеной программе" значит нужно:
1. Кинуть на форму таймер
2. Выставить нужный интервал (в милисек)
3. В событии таймера прописать ваш код
Код:
GetCursorPos(Point);
Memo1.Lines.Add('(X=' + IntToStr(Point.X)+ ',Y='+ IntToStr(Point.Y));
4. Запустить таймер
Мне разрешено открывать только одну страницу - about :blank. Сперва было скучно, но потом я втянулся. Теперь у меня там живет 2 виртуальных друга, и я слышу голоса из розетки!
spirit-ua вне форума Ответить с цитированием
Старый 31.07.2013, 16:32   #3
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Таймер не нужен, мне нужно чтобы координаты брались только после нажатия кнопки
Praud вне форума Ответить с цитированием
Старый 31.07.2013, 16:39   #4
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

Код:
Form1.KeyPreview := True;
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 31.07.2013, 17:01   #5
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Где это писать?
Praud вне форума Ответить с цитированием
Старый 31.07.2013, 17:13   #6
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

разобрался, спасибо
Praud вне форума Ответить с цитированием
Старый 31.07.2013, 18:00   #7
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Еще один вопрос. Как сделать так, чтобы действие при нажатии на кнопку выполнялось только 3 раза? Допустим если кнопка нажата 4 раза, то уже ничего не случится
Praud вне форума Ответить с цитированием
Старый 31.07.2013, 18:05   #8
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
По умолчанию

Цитата:
Сообщение от Praud Посмотреть сообщение
Еще один вопрос. Как сделать так, чтобы действие при нажатии на кнопку выполнялось только 3 раза? Допустим если кнопка нажата 4 раза, то уже ничего не случится
Использовать глобальную переменную типа byte.
Код:
var
  Form1: TForm1;
  Click_count: Byte = 0;
При каждом нажатии проверять < 3, увеличивать на 1, записывать координаты в memo.
Lime вне форума Ответить с цитированием
Старый 31.07.2013, 20:23   #9
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Понял, спасибо.
А вот такой вопрос.

При нажатии пробела нужно чтобы записывались координаты в разные объекты.
Код:
if key=VK_SPACE then
  begin


    GetCursorPos(Point[1]);
    Memo1.Lines.Add('(X=' + IntToStr(Point[1].X)+ ',Y='+ IntToStr(Point[1].Y)+')');
Как сделать так чтобы когда я нажал еще раз на пробел уже записало в Point[2]?
Praud вне форума Ответить с цитированием
Старый 01.08.2013, 18:19   #10
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Это осуществимо вообще?
Praud вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выполнить действие при нажатии на слово в тексте belkeandrey Общие вопросы Delphi 3 06.03.2013 12:18
ормируется объект размером 30х30 и он должен при нажатии на клавишу,двигаться в 8ми направлениях..а при н Krasoto4ka Помощь студентам 0 22.05.2010 17:41
Действие при нажатии на определненный Balloon KoBRaAndrey Общие вопросы Delphi 5 22.11.2009 04:53
действие при обновлении webbrowser Niklan Общие вопросы Delphi 6 07.11.2009 20:45
Действие при простои программы Volkogriz Общие вопросы Delphi 4 26.11.2008 13:35