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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.04.2013, 15:40   #1
palyach
 
Регистрация: 01.04.2013
Сообщений: 7
По умолчанию Перемещение объекта мыщью

Здравствуйте как сделать фиксацию и перемещение объекта мышью???
Вот моя программа:

Код:
Program OSWINDOWS;
uses Events,GraphABC;
var x,y:integer;
const a=500;b=500;
//----------------------------------------------------------------------|
procedure osn;{Рабочий стол}
begin
rectangle(a-500,b-500,a+700,b+300);
line(a-500,b+250,a+700,b+250);{---------}
line(1080,750,1080,800);{время}
line(1020,750,1020,800);{язык}
line(200,750,200,800);{пуск}
setfontsize(25);
textout(30,755,' Пуск');
end;
//----------------------------------------------------------------------
procedure yaz1;{Ru}
begin
setfontsize(20);
textout(1030,760,'RU');
end;
procedure yaz2;{En}
begin
setfontsize(20);
textout(1030,760,'EN');
end;

//----------------------------------------------------------------------
procedure yarlik1(xx,yy,c: integer);
begin
setbrushcolor(c);
rectangle(xx,yy,xx+45,yy+45);
end;
//----------------------------------------------------------------------
procedure papkaDOC(c:integer);
begin
setbrushcolor(clwhite);
setpencolor(c);
rectangle(250,200,1000,700);
line(250,225,1000,225);
line(950,200,950,225);
end;
//----------------------------------------------------------------------
procedure otkr1(x,y,mb: integer);{Открывает папку мои документы}
begin
  if (x>=5) and (x<=50)
     and (y>=5) and (y<=50) then papkaDOC(clblack);
  if (x>=950) and (x<=1000)
     and (y>=200) and (y<=225) then papkaDOC(clwhite);
end;
//-------------------------------------------------------------------------
procedure otkrpusk(c:integer);
begin
setbrushcolor(clwhite);
setpencolor(c);
line(0,100,200,100);
lineto(200,750);
line(100,100,100,750);
line(100,700,200,700);
end;
procedure otkr3(x,y,mb: integer);{открывает пуск}
begin
  if (x>=0) and (x<=200)
     and (y>=750) and (y<=800) then otkrpusk(clBlack);
end;
BEGIN
setwindowsize(1200,800);
osn;{рабочий стол}
yaz2;{язык}
yarlik1(5,5,clrandom);{ЯРЛЫК}
OnMouseDown:=otkr1;{открывает папку}
OnMouseUp:=otkr3;{открывает пуск}
redraw;
END.
Мне надо сделать так,чтобы квадратик в левом верхнем углу перемещался при нажатии на него мышкой ,ну как в WINDOWS ,и так же двигалось окно папки.



________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(это кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось palyach; 01.05.2013 в 12:35.
palyach вне форума Ответить с цитированием
Старый 30.04.2013, 16:20   #2
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Для того, чтобы перемещать изображение по экрану, нужен цикл.
В этом цикле должна быть предусмотрено изменение состояния (например, посредством клавиатуры или мыши - чем мы собираемся перемещать), а также отрисовка нового состояния (возможно, с восстановлением фона).
Цикл "крутится" в течении всего времени работы программы.

А дальше начинается разница в реализации специфичная для разных ОС:
- в DOS этот цикл нужно организовывать в самой программе, и в этом цикле выполняются все необходимые действия
- в Windows нужен отдельно цикл обработки сообщений и отдельно оконная процедура, производящая все остальные действия.
s-andriano вне форума Ответить с цитированием
Старый 30.04.2013, 21:57   #3
palyach
 
Регистрация: 01.04.2013
Сообщений: 7
По умолчанию

а приблизительно как будет выглядеть цикл?
Просто если подключать модуль ABCObjects, то в нем есть стандартные фигуры которые можно передвигать мышью,но в эти фигуры нельзя вносить изменения

Код:
uses ABCObjects,Events;

var
  r: RectangleABC;
begin
  r:=CreateRectangleABC(100,70,120,180,clWhite);
  r.BorderWidth:=3;
  r.BorderColor:=clBlack;
  OnMouseDown:=ABCMouseDown;
  OnMouseMove:=ABCMouseMove;
  OnMouseUp:=ABCMouseUp;
end.
с помощью этой программы можно передвигать прямоугольник,но как внести изменения в прямоугольник?Добавить например во внутрь еще один прямоугольник.



________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(это кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Stilet; 01.05.2013 в 17:19.
palyach вне форума Ответить с цитированием
Старый 01.05.2013, 10:31   #4
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от palyach Посмотреть сообщение
а приблизительно как будет выглядеть цикл?
Просто если подключать модуль ABCObjects, то в нем есть стандартные фигуры которые можно передвигать мышью,но в эти фигуры нельзя вносить изменения
palyach, еще раз - специально для Вас: телепатов здесь нет, поэтому прежде, чем задавать вопросы, нужно привести информацию, достаточную для того, чтобы на эти вопросы можно было ответить.
Вопрос об используемой ОС так и остался без ответа. Без него двигаться дальше нельзя.
Кроме того, цикл может явно или неявно подразумевать среда программирования. Например, в Delphi этот цикл создается автоматически при создании проекта. Организовано ли это в Вашей среде программирования, и если реализовано, то как, - я не знаю.

Я излагаю общие принципы, Вы должны проверить, чем располагаете именно Вы и, исходя из сопоставления информации, которую я привожу, и информации, которая у Вас есть по поводу Вашей среды программирования, сделать нужные выводы.
Либо снабдить меня информацией по поводу Вашей среды разработки, которой у меня нет, тогда я, возможно, что-то смогу Вам посоветовать.

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

Последний раз редактировалось s-andriano; 01.05.2013 в 10:33.
s-andriano вне форума Ответить с цитированием
Старый 01.05.2013, 12:33   #5
palyach
 
Регистрация: 01.04.2013
Сообщений: 7
По умолчанию

Это моя курсовая работа на Pascal ABC. Я хочу сделать в этом языке, программу, которая бы примерно повторяла рабочий стол windows. В исходнике ,который я выложил , нарисован рабочий стол,и папка при нажатии на которую открывается оконо. Вот эту папку и окно я хочу передвигать как в windows.Воот
На скринах покажу:
Изображения
Тип файла: jpg Безымянный.jpg (13.3 Кб, 160 просмотров)

Последний раз редактировалось palyach; 01.05.2013 в 12:35.
palyach вне форума Ответить с цитированием
Старый 01.05.2013, 15:38   #6
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Вы хотите сами передвигать окно или реализовать передвижение средствами WinAPI?
s-andriano вне форума Ответить с цитированием
Старый 01.05.2013, 19:10   #7
palyach
 
Регистрация: 01.04.2013
Сообщений: 7
По умолчанию

Передвигать сам, в Pascal
palyach вне форума Ответить с цитированием
Старый 01.05.2013, 20:07   #8
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Тогда принцип общий: когда нужно что-то переместить, восстанавливаете фон под перемещаемым объектом, после чего рисуете его по новой в нужном месте.

Кстати, Вы думали над моим советом просто заменить объект RectangleABC на свой - обладающий нужными свойствами?
s-andriano вне форума Ответить с цитированием
Старый 01.05.2013, 22:48   #9
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Заранее извиняюсь, если мой совет немного не по теме, но
Цитата:
когда нужно что-то переместить, восстанавливаете фон под перемещаемым объектом, после чего рисуете его по новой в нужном месте.
Перемещение объектов я бы советовал сделать так.
1. Закрасить объект цветом фона.
2. Нарисовать объект в новом месте (координаты x+dx и y+dy)

Эти два действия выполнять в цикле...
Вадим Мошев вне форума Ответить с цитированием
Старый 01.05.2013, 22:55   #10
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Вадим Мошев Посмотреть сообщение
1. Закрасить объект цветом фона.
В общем случае фон может не иметь одного определенного цвета, а быть, скажем, картинкой.
Поэтому "закрасить цветом фона" может быть невозможно в принципе.
s-andriano вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перемещение граффического объекта по форме нажатием стрелок. Blaaa Windows Forms 0 01.03.2012 20:54
Перемещение объекта по форме.(Управление с клавиатуры) gralex10 Помощь студентам 1 28.03.2011 15:57
перемещение объекта за курсором мышки eu8cc Общие вопросы Delphi 2 28.09.2009 22:48
С помощью методов и свойств объекта осуществляется управление терминалом. Имя (идентификатор) объекта User>lia Общие вопросы Delphi 4 16.01.2009 16:37