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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 31.10.2009, 10:52   #1
AbekIn3D
 
Регистрация: 31.10.2009
Сообщений: 9
Восклицание Вопросы с перемещением объектов по форме

У меня есть форма, в которой находятся 2 панели. Каждой из них я прописал следующее:

Код:
procedure TForm1.Panel2MouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
const sc_dragmove = $f012; 
begin
releasecapture;
Menu.Perform(wm_syscommand, sc_dragmove, 0);
end;
Теперь их можно свободно перемещать их по форме нажав на них мышкой.

Первый вопрос:
Что и где нужно написать, чтобы при перемещении панелей они не выходили за границы формы и ктому же чтобы они (панели) сталкивались между собой.

Второй вопрос:
Что нужно сделать, чтобы объекты прилипали друг к другу и к краям самой формы.

Если кто не понял, что я имел в виду, то мне нужно сделать наподобие окон в фотошопе (инструменты, навигация, слои).
Пробовал с MDI, но там много заморочек.

Заранее спасибо за понимание и поддержку!
AbekIn3D вне форума
Старый 31.10.2009, 13:15   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Пример решения "в лоб", "по-крестьянски":
Код:
procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
const sc_dragmove = $f012;
var p1,p2: TPanel;
begin
releasecapture;
if (Sender as TPanel).Name='Panel1' then
begin
p1:=Panel1;
p2:=Panel2;
end else
begin
p1:=Panel2;
p2:=Panel1;
end;
(Sender as TPanel).Perform(wm_syscommand, sc_dragmove, 0);
if p1.Top<5 then
p1.Top:=0;//прилипание к верхнему краю
if p1.Left<5 then
p1.Left:=0;//прилипание к левому краю
if p1.Top+p1.Height+1>p2.Top then
p1.Top:=p2.Top-p1.Height-1;//прилипание к верхнему краю другой панельки
//и так далее - остальные проверки
end;
Обратите внимание - процедура одна, но назначена обеим панелям.
mihali4 вне форума
Старый 31.10.2009, 15:02   #3
AbekIn3D
 
Регистрация: 31.10.2009
Сообщений: 9
По умолчанию

mihali4
Спасибо большое!
Но как сделать прилипание к низу и справа? И еще чтобы при перемещении панели, она не перемещалась за границы, а не возвращалась на нулевую позицию?
AbekIn3D вне форума
Старый 31.10.2009, 15:42   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Да что ж тут сложного? Неужели самому неинтересно подумать?
Код:
if Height-p1.Top-p1.Height-1<5 then
p1.Top:=Height-p1.Height-1;//прилипание к нижнему краю
if Width-p1.Left-p1.Width-1<5 then
p1.Left:=Width-p1.Width-1;//прилипание к правому краю
Аналогично - по вопросу слипания панелей между собой. Думайте, думайте - это полезно...
mihali4 вне форума
Старый 16.11.2010, 10:45   #5
Drax
Пользователь
 
Регистрация: 28.07.2010
Сообщений: 19
По умолчанию

Хороший пример, то что надо, а подскажите как заставить запоминать позиции панелек после перетаскивания?
Drax вне форума
Старый 16.11.2010, 10:58   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Кого заставлять будем ?
В ини-файле или в реестре...
mihali4 вне форума
Старый 16.11.2010, 11:06   #7
Drax
Пользователь
 
Регистрация: 28.07.2010
Сообщений: 19
По умолчанию

заставлять будим саму программу))
наверно лучше в ини
Так как все-таки сохранять позиции панелек используя ini файл?

Последний раз редактировалось Drax; 16.11.2010 в 14:18.
Drax вне форума
Старый 16.11.2010, 15:39   #8
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Работа с ini файлами много раз обсуждалась на форуме - для этого существует поиск.
Можно проще - посмотреть примеры работы с ними в штатном хэлпе.
mihali4 вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перемещение графических объектов на форме bush007 Помощь студентам 3 05.04.2009 17:43
Перемещение объектов по форме jocry Общие вопросы Delphi 6 06.02.2009 15:41
Положение объектов на форме Port 111 Общие вопросы Delphi 8 12.01.2009 22:11
Перемещение графических объектов по форме Klyacksa Общие вопросы Delphi 15 20.06.2008 12:58