Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
36 / 0 / 1
Регистрация: 18.03.2015
Сообщений: 122
1

Передвижение фигуры при клике на область внутри фигуры

12.07.2016, 02:46. Просмотров 1376. Ответов 5
Метки нет (Все метки)

Есть прямоугольник 100 на 50.
При удерживании мышки фигура передвигается как карта в пасьянсе. При отпуске фиксируется.

Хотел бы чтоб кто-то подтолкнул к решению (а потом уже код.)
Еще лучше ткнуть в ошибку.
Толком не понял делать через move или down и как сделать чтобы после передвижения мув прекратился до следующего щелчка по фигуре. И почему при запуске мув работает сразу?

в начале надо бы сунуть диапазон

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
uses GraphABC;
 
var px1: integer;
var py1: integer;
 
procedure mousemove(x,y,mb: integer); 
begin
clearwindow();
begin
if mb=1 then
line(px1,py1,px1+50,py1);
line(px1,py1+100,px1+50,py1+100);
line(px1,py1,px1,py1+100);
line(px1+50,py1+100,px1+50,py1);
end;
px1 :=x-25;
py1 :=y-50;
end;
 
 
begin
SetWindowTitle('Графическое окно');
Setwindowsize(800,600); //размер окна
 
px1 :=40;
py1 :=60;
 
OnMousemove:=Mousemove;
end.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.07.2016, 02:46
Ответы с готовыми решениями:

Пропадают фигуры при перерисовывании
Вот видео того что происходит. При ходе красные квадратики то и дело пропадают и перерисовываются с...

Программа вычисления местонахождения точки относительно фигуры (лежит ли точка внутри, на контуре или вне фигуры)
Нужно написать программу вычисления местонахождения точки относительно фигуры(лежит ли данная точка...

Динамическое передвижение фигуры
Доброго времени суток. Пытаюсь создать трапецию, которая должна перемещаться, изменяя свой размер...

Передвижение фигуры по экрану
Помогите пожалуйста, нужно символ .model small .stack 100h .data string0 db '###############...

5
1462 / 1170 / 551
Регистрация: 08.01.2012
Сообщений: 4,512
12.07.2016, 04:30 2
патаму чта
Цитата Сообщение от Андрей1926 Посмотреть сообщение
px1 :=x-25; py1 :=y-50;
меняется независимо от
Цитата Сообщение от Андрей1926 Посмотреть сообщение
if mb=1 then
и что делает begin на 9-й строке, почему он не на 11-й?
0
36 / 0 / 1
Регистрация: 18.03.2015
Сообщений: 122
12.07.2016, 06:57  [ТС] 3
Бррр... Да у меня там вообще ошибка на ошибке...
Фигура не имеет своих координат...
Программу где используются мышиные процедуры вообще пишу второй раз...

Цикл должен вроде быть:
маусдаун - жмем
проверка равна ли мышка координатам внутри фигуры
если равна то
clear - стираем экран
маусмув - двигаем мышь при этом рисуется фигура
при прикращении нажатия координаты фигуры записываются

соответственно должно быть 2 описания - клик и мув
обработчик mousemove должен быть в mousedown...
а клик в основном цикле

но как код написать не могу сообразить, и как должно условие нахождения курсора над фигурой тоже
0
Модератор
62498 / 46688 / 32180
Регистрация: 18.05.2008
Сообщений: 112,951
12.07.2016, 10:44 4
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
uses graphABC;
var f:boolean;
    x1,y1,px1,py1,dx,dy:integer;
procedure MouseDown(x,y,mb:integer);
begin
//если курсор на прямоугольнике
if (x>=px1-25)and(x<=px1+25)and(y>=py1-50)and(y<=py1+50) then 
 begin
  f:=true;//вклбчим перемещение
  x1:=x;//начальные координаты
  y1:=y;
 end; 
end;
procedure MouseMove(x,y,mb:integer);
begin
if f then//если вклбчено перемещение
 begin
  clearwindow;//очистим экран
  dx:=x-x1;//приращение по осям
  dy:=y-y1;
  if px1<25 then px1:=25;//границы окна
  if px1>windowwidth-25 then px1:=windowwidth-25;
  if py1<50 then py1:=50;
  if py1>windowheight-50 then py1:=windowheight-50;
  px1:=px1+dx;//новые координаты центра прямоугольника
  py1:=py1+dy;
  rectangle(px1-25,py1-50,px1+25,py1+50);//рисуем
  x1:=x;//меняем исходные координаты
  y1:=y;
  redraw;//перерисовываем
 end;
end;
procedure MouseUp(x,y,mb:integer);
begin
f:=false;//отпустили кнопку, конец перемещения
end;
 
begin
SetWindowTitle('Графическое окно');
Setwindowsize(800,600); //размер окна
CenterWindow;//центр монитора
px1:=windowwidth div 2;
py1:=windowheight div 2;
rectangle(px1-25,py1-50,px1+25,py1+50);
lockdrawing;
onmousedown:=MouseDown;
onmousemove:=MouseMove;
onmouseup:=MouseUp;
end.
1
36 / 0 / 1
Регистрация: 18.03.2015
Сообщений: 122
13.07.2016, 06:30  [ТС] 5
А для 7 строчки через for сделать нельзя?

Добавлено через 27 минут
Ну это так просто как вариант...
0
Модератор
62498 / 46688 / 32180
Регистрация: 18.05.2008
Сообщений: 112,951
13.07.2016, 07:18 6
А при чем здесь цикл for, если рассматриваем условие попадания курсора в прямоугольник?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.07.2016, 07:18

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Передвижение фигуры ± вниз и вправо
Доброго времени суток. Задание такое: ± - подобная фигура перемещается вправо на 60 и вниз на 200...

Передвижение фигуры с нажатием мыши
Подскажите как сделать так, ятоб данная фигура передвигалась на то место где нажали мышкой.Задачи...

Вводить название фигуры, выводить формулу для вычисления площади этой фигуры
Вводить название фигуры (треугольник, квадрат, ромб, прямоугольник) выводить формулу для вычисления...

Наложить чертёж плоской фигуры на проекцию этой фигуры
Стоит задача наложить чертёж земельного участка на фотографию этого участка. Участок обозримого...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.