Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 19.01.2018, 06:42
pANda777 pANda777 вне форума
Прохожий
 
Регистрация: 19.01.2018
Сообщения: 5
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Задание места клика и проверка был ли клик

В общем. В лабеле появляется вопрос. Тыкни куда-то туда. И пользователь клацает. Та вот... Я без понятия как задать куда тыкать и как прописать условия.

Что то типа Кликни туда-то (в проге появляется координата)
Затем пользователь кликает и программа определяет, если он попал на эту координату, то верно иначе не верно.

Среда Delphi 10
Ответить с цитированием
  #2  
Старый 19.01.2018, 07:18
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Верхний левый угол экрана это точка с координатами 0, 0.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 19.01.2018, 11:31
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от pANda777
...пользователь кликает и программа определяет, если он попал на эту координату, то верно иначе не верно...
Код:
var
iX, iY: integer;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
 Label2.Caption:= 'Координато: X ' + IntToStr(X) + ',Y ' + IntToStr(Y);
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 if (iX = X) and (iY = Y) then
  begin
   Label1.Caption:='Попал!';
   iX:= Random(ClientWidth);
   iY:= Random(ClientHeight);
  end else Label1.Caption:= 'Промах...';
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 Label1.Caption:= 'Тыкни: X ' + IntToStr(iX) + ',Y ' + IntToStr(iY);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 Randomize;
 iX:= Random(ClientWidth);
 iY:= Random(ClientHeight);
 Label1.Caption:= 'Тыкни: X ' + IntToStr(iX) + ',Y ' + IntToStr(iY);
end;
Ответить с цитированием
  #4  
Старый 19.01.2018, 20:03
pANda777 pANda777 вне форума
Прохожий
 
Регистрация: 19.01.2018
Сообщения: 5
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
Код:
var
iX, iY: integer;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
 Label2.Caption:= 'Координато: X ' + IntToStr(X) + ',Y ' + IntToStr(Y);
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 if (iX = X) and (iY = Y) then
  begin
   Label1.Caption:='Попал!';
   iX:= Random(ClientWidth);
   iY:= Random(ClientHeight);
  end else Label1.Caption:= 'Промах...';
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 Label1.Caption:= 'Тыкни: X ' + IntToStr(iX) + ',Y ' + IntToStr(iY);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 Randomize;
 iX:= Random(ClientWidth);
 iY:= Random(ClientHeight);
 Label1.Caption:= 'Тыкни: X ' + IntToStr(iX) + ',Y ' + IntToStr(iY);
end;


Допустим, у меня есть картинка футбольного поля. И будет высвечиваться задание "нажмите на центр поля". В центре поля координат больше 20. Этот код будет отлавливать координаты вокруг координат центра поля?
Ответить с цитированием
  #5  
Старый 19.01.2018, 20:11
pANda777 pANda777 вне форума
Прохожий
 
Регистрация: 19.01.2018
Сообщения: 5
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
Код:
var
iX, iY: integer;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
 Label2.Caption:= 'Координато: X ' + IntToStr(X) + ',Y ' + IntToStr(Y);
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 if (iX = X) and (iY = Y) then
  begin
   Label1.Caption:='Попал!';
   iX:= Random(ClientWidth);
   iY:= Random(ClientHeight);
  end else Label1.Caption:= 'Промах...';
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 Label1.Caption:= 'Тыкни: X ' + IntToStr(iX) + ',Y ' + IntToStr(iY);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 Randomize;
 iX:= Random(ClientWidth);
 iY:= Random(ClientHeight);
 Label1.Caption:= 'Тыкни: X ' + IntToStr(iX) + ',Y ' + IntToStr(iY);
end;

Вот мой пример. Только надо сделать так, чтобы в условии было не 1 координата и через or другая, а сразу много. Я думал в массив это всё и через массив сравнивать есть такие коры или нет. Только как это точно записать я не знаю.

Код:
procedure TForm4.Image1Click(Sender: TObject);
var P: TPoint;
begin
GetCursorPos(P);
P := Form4.ScreenToClient(P);
if (P.X=447) AND (P.Y=392) then ShowMessage('Верно! Это центр поля!')
else ShowMessage ('Не верно. Это не центр поля');
end;
Ответить с цитированием
  #6  
Старый 19.01.2018, 22:54
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от pANda777
Допустим, у меня есть картинка футбольного поля. И будет высвечиваться задание "нажмите на центр поля"...
Здесь координато вообще не нужны - поле зелёное, а центр краской отмечен -
если курсор на "краске"- жим в кружке,иначе не попал. Пересмотрите ТЗ, маловато инфы
Ответить с цитированием
  #7  
Старый 20.01.2018, 19:32
pANda777 pANda777 вне форума
Прохожий
 
Регистрация: 19.01.2018
Сообщения: 5
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Какую инфу дать?

Есть футбольное поле. У него есть центр. Цвет ВСЕХ линий на поле - Белый. Остальное поле - Зелёное.

Моя задача: Высвечивается вопрос:"Где находится центр поля?"
При нажатии на центр должно высвечиваться сообщение 'Верно' Иначе 'Не верно'.

Моя проблема: Я не могу(не знаю как) записать все пиксели(координаты) этого кружка (цента поля) в массив и чтобы при нажатии на поле с массива т.е. проверялось if массив с координатами then 'Верно' else 'Не верно'.

Мне предлагали через оператор for выделить квадрат и занести все координаты в массив и там проверить цвет если нажат был белый то верно иначе не верно. Но как этого сделать, я не знаю.

На русском языке, пожалуйста ибо что такое ТЗ я тоже не знаю.
Ответить с цитированием
  #8  
Старый 20.01.2018, 22:57
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
Смех

Цитата:
Сообщение от pANda777
...На русском языке, пожалуйста ибо что такое ТЗ я тоже не знаю.
А, понятно - очередной неофил (перевод: любитель новенького) тогда в вашем случае самое простое решение: бросьте поверх вашего "Есть футбольное поле" пустые имиджы с размерами, совпадающими с габаритами "ВСЕХ линий" и больше для определения жима в районе "этого кружка (цента поля)" ничего и не нужно, событие произойдёт автоматом -)
Ответить с цитированием
  #9  
Старый 24.01.2018, 08:03
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Вот пример, как это делать
Вложения
Тип файла: zip fbpl.zip (168.9 Кбайт, 3 просмотров)
Ответить с цитированием
  #10  
Старый 26.01.2018, 18:06
Аватар для umelii
umelii umelii вне форума
Прохожий
 
Регистрация: 26.01.2018
Сообщения: 2
Версия Delphi: Java 8
Репутация: 10
По умолчанию

я помню у нас давно когда-то была такая лаба в универе. начинали отсчет с левого верхнего угла (0,0) и дальше уже высчитывали
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:49.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter