Совместное перемещение форм
Кто нибудь в состоянии спокойно и без понтов объяснить, как наладить совместное перемещение двух или нескольких форм по экрану при перемещении одной из них.
Вариант с таймером отпадает - слишком банально.
Буду очень признателен, а может быть и полезен.
Денис.
Товарищи!
Кто нибудь в состоянии спокойно и без понтов объяснить, как наладить совместное перемещение двух или нескольких форм по экрану при перемещении одной из них.
Проще простого. Завести где-нить список совместно перемещаемых форм, и при перемещении одной из них соответственно пересчитывать координаты для всех остальных. Идея, думаю, понятна.
Проще простого. Завести где-нить список совместно перемещаемых форм, и при перемещении одной из них соответственно пересчитывать координаты для всех остальных. Идея, думаю, понятна.
А как это выглядит "список совместно перемещаемых форм"? Я о таком списке впервые слышу.
И главное : что значит "перемещаемая форма" , ведь нет такого события в инспекторе формы!
А как это выглядит "список совместно перемещаемых форм"? Я о таком списке впервые слышу.
И главное : что значит "перемещаемая форма" , ведь нет такого события в инспекторе формы!
Та-а-ак. Сейчас начнутся понты. :)
Например, ты пишешь аналог Winamp. У него есть окно плеера (основное), окно эквалайзера и окно списка (про остальные возможные окна для простоты забудем). Эти три окна по задаче и будут составлять пресловутый "список совместно перемещаемых форм". Соответственно, событие перемещения формы есть физическое перемещение формы пользователем по экрану.
В основной форме создается список, в котором хранятся все формы, которые должны перемещаться вместе с основной. Если перемещение может инициировать любая форма, в других формах придется хранить ссылку на основную форму, чтобы можно было воспользоваться ее списком. Согласись, было бы глупо дублировать список в каждой форме.
Далее, для каждой формы в списке придется хранить их текущее положение на экране. При возникновении события перемещения форма, вызвавшая групповое перемещение, находится в списке, высчитывается разность между старым и новым положением формы, после чего все формы, кроме перемещаемой пользователем, перемещаются на полученную разницу в координатах.
Надеюсь, доходчиво объяснил. Код привести не могу, уже поздно и спать пора. ;)
Однако "При возникновении события перемещения "...но что это за событие?!!!
Ты можешь просто написать :
procedure Tform...а дальше то чего?
В момент какой процедуры (или функции) включать пересчёт координат?
Вот в чём вопрос...
Однако "При возникновении события перемещения "...но что это за событие?!!!
А хрен его знает, если честно. Надо выяснить опытным путем, какое конкретно событие происходит. Навскидку в уставшую голову приходит только:
...
protected
procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;
end;
Надо будет проверять параметр WParam (или что там его заменяет в TWMSysCommand?).
Координаты, соответственно, пересчитывать каждый раз при обработке сообщения, не забывая записывать результаты для следующего раза.