![]() |
|
|||||||
![]() |
|
|
Опции темы |
|
|
#1 |
|
Новичок
Регистрация: 08.06.2007
Сообщений: 1
Репутация: 10
|
Подскажите пожалуйста, как сделать так, чтобы в любом окне можно было создать Drag&Drop объект, который будет являться копией объекта из моей программы.. Т.е. предположим в моей программе есть квадратик, который можно перемещать, мне надо создать его копию в любом окне, в котором он также сможет перемещаться и после сворачивания/разворачивания чужого окна его координаты оставались бы прежними.. Зараниее спасибо =)
|
|
|
|
|
|
#2 |
|
воин дзена
СуперМодератор
Регистрация: 29.10.2006
Адрес: Где-то рядом....
Сообщений: 2,528
Репутация: 1041
|
в чужом окне нельзя создать какой-либо объект.
|
|
|
|
|
|
#3 |
|
Пользователь
Регистрация: 08.04.2007
Сообщений: 16
Репутация: 72
|
Вы меня удивляете. Имея хэндл чужого окна, можно сделать с ним всё тоже, что и с собственным. Всё, что нужно - это: 1) Написать функцию (обработчик событий) вида LRESULT CALLBACK WindowProc(HWND,UINT,WPARAM,LPARAM) в которой реализуйте Drag n Drop - это достаточно просто. Для этого нужно будет обработать всего два события - WM_LBUTTONDOWN и WM_LBUTTONUP. При реализации этого используйте функцию SetCapture, чтобы при выходе курсора за границы окна во время перетаскивания, перетаскиваемый объект не "падал". В своё время я с этим намучился. 2) Зарегестрируйте свой класс (RegisterWindowClassEx) - в вашем примере, ShiSha_34, это будет чёрное окно без рамки. В качестве соответсвующего параметра (я имею ввиду поле lpfnWndProc структуры WNDCLASSEX) ф-ии RegisterWindowClassEx укажите написанный вами обработчик событий. 3) Получите хэнл окна, в котором вы хотите создать свой чёрный квадрат. Это можно сделать, например, заная имя и (или) класс чужого окна при помощи ф-ии FindWindow. Или же поставить ловушку (SetWindowHook), которая будет срабатывать при клике мышкой на выбраном окне. Метод не важен и здесь о них писали предостаточно. Получив хэндл чужого окна, создайте свой объект при помощи ф-ии CreateWindowEx, в которой в качестве класса укажите зарегестрированный вами клас (пункт 2), а в качестве хэндла родительского окна - полученный хэндл. В результате должно получиться то, что вы описали в вопросе. Для получения более подробно информации воспользуйтесь WIN32 Programmer's Reference.
|
|
|
|
|
|
#4 |
|
воин дзена
СуперМодератор
Регистрация: 29.10.2006
Адрес: Где-то рядом....
Сообщений: 2,528
Репутация: 1041
|
я сомневаюсь......
при создании чего либо на чужом окне и при каких либо действиях с ним сообщение будет посылаться форме чужого приложения, и обрабатывать его будет процедура которую зарегистрировала чужая программа -------------------------- ладно, допустим ты прав приведи пример: сделай два приложения, одно приложение с одной пустой формой, и второе которое будет осуществлять всё приведённые тобою действия |
|
|
|
|
|
#5 | |
|
Студент
Форумчанин
|
To Unnamed:
Цитата:
интересная тема.
__________________
Visita Interiorem Terrae Rectificando Operae Lapidem... |
|
|
|
|
|
|
#6 |
|
Пользователь
Регистрация: 08.04.2007
Сообщений: 16
Репутация: 72
|
Сообщение действительно будет посылаться форме чужого приложения, но обрабатываться будет процедурой, указанной при регистрации класса объекта, которому это сообщение предназначено.
Последний раз редактировалось unnamed; 14.06.2007 в 15:12. |
|
|
|
|
|
#7 | |
|
Пользователь
Регистрация: 08.04.2007
Сообщений: 16
Репутация: 72
|
Цитата:
Вот код первого приложения (пустая форма). Это можно не читать, важно только то, что класс окна и его имя - SIMPLE_WINDOW. Код сгенерирован автоматически средой Code::Blocks. Код:
|
|
|
|
|
|
|
#8 |
|
Пользователь
Регистрация: 08.04.2007
Сообщений: 16
Репутация: 72
|
Вот код второго приложения, которое при запуске находит по имени первое приложение и создаёт в нём синий квадрат. Кварат ведёт себя как родной: его можно перетаскивать в окне мышкой, при сворачивании и разворачивании окна квадрат востанавливается в прежней позиции.
Код:
|
|
|
|
![]() |
| Опции темы | |
|
|
Похожие темы
|
||||
| Тема | Автор | Раздел | Ответов | Последнее сообщение |
| drag $ drop в DBGrid | AlexandrSid | Общие вопросы Delphi | 13 | 21.06.2010 11:55 |
| Помогите с drag-and-drop | Cezar | Win Api | 3 | 19.10.2008 16:48 |
| Drag&Drop в ListBox'ах | MAKEDON | Общие вопросы Delphi | 3 | 21.08.2008 14:12 |
| Drag&Drop | shtuceron | Общие вопросы Delphi | 3 | 09.04.2008 20:04 |
| Drag and Drop | Xardas | Общие вопросы Delphi | 8 | 21.01.2008 00:09 |