Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Совместное перемещение форм

5.3K
23 июня 2004 года
denis_orlov
19 / / 23.06.2004
Товарищи!
Кто нибудь в состоянии спокойно и без понтов объяснить, как наладить совместное перемещение двух или нескольких форм по экрану при перемещении одной из них.
Вариант с таймером отпадает - слишком банально.
Буду очень признателен, а может быть и полезен.
Денис.
10
23 июня 2004 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by denis_orlov
Товарищи!
Кто нибудь в состоянии спокойно и без понтов объяснить, как наладить совместное перемещение двух или нескольких форм по экрану при перемещении одной из них.


Проще простого. Завести где-нить список совместно перемещаемых форм, и при перемещении одной из них соответственно пересчитывать координаты для всех остальных. Идея, думаю, понятна.

5.3K
24 июня 2004 года
denis_orlov
19 / / 23.06.2004
Цитата:
Originally posted by smartsoft

Проще простого. Завести где-нить список совместно перемещаемых форм, и при перемещении одной из них соответственно пересчитывать координаты для всех остальных. Идея, думаю, понятна.




А как это выглядит "список совместно перемещаемых форм"? Я о таком списке впервые слышу.
И главное : что значит "перемещаемая форма" , ведь нет такого события в инспекторе формы!

10
24 июня 2004 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by denis_orlov
А как это выглядит "список совместно перемещаемых форм"? Я о таком списке впервые слышу.
И главное : что значит "перемещаемая форма" , ведь нет такого события в инспекторе формы!


Та-а-ак. Сейчас начнутся понты. :)

Например, ты пишешь аналог Winamp. У него есть окно плеера (основное), окно эквалайзера и окно списка (про остальные возможные окна для простоты забудем). Эти три окна по задаче и будут составлять пресловутый "список совместно перемещаемых форм". Соответственно, событие перемещения формы есть физическое перемещение формы пользователем по экрану.

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

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

Надеюсь, доходчиво объяснил. Код привести не могу, уже поздно и спать пора. ;)

5.3K
25 июня 2004 года
denis_orlov
19 / / 23.06.2004
Великолепная статья!
Однако "При возникновении события перемещения "...но что это за событие?!!!
Ты можешь просто написать :

procedure Tform...а дальше то чего?

В момент какой процедуры (или функции) включать пересчёт координат?
Вот в чём вопрос...
10
25 июня 2004 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by denis_orlov
Однако "При возникновении события перемещения "...но что это за событие?!!!


А хрен его знает, если честно. Надо выяснить опытным путем, какое конкретно событие происходит. Навскидку в уставшую голову приходит только:

 
Код:
TMainForm = class...
  ...
  protected
    procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;
end;

Надо будет проверять параметр WParam (или что там его заменяет в TWMSysCommand?).

Координаты, соответственно, пересчитывать каждый раз при обработке сообщения, не забывая записывать результаты для следующего раза.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог