Общие вопросы и теория технологии Drag and Drop Delphi — среда быстрой разработки, где в качестве языка программирования используется Object Pascal. На сегодняшний день позволяет разрабатывать ПО для Microsoft Windows, Mac OS, iOS и Android и входит в состав Embarcadero RAD Studio https://delphi-hlp.ru/index.php/peretaskivanie-ob-ektov-drag-and-drop-docking/obshchie-voprosy-i-teoriya-tekhnologii-drag-and-drop.feed 2022-09-13T04:46:03+07:00 Delphi help info@delphi-hlp.ru Joomla! - Open Source Content Management Внутренний интерфейс Drag and Drop 2017-08-09T18:21:41+07:00 2017-08-09T18:21:41+07:00 https://delphi-hlp.ru/index.php/peretaskivanie-ob-ektov-drag-and-drop-docking/obshchie-voprosy-i-teoriya-tekhnologii-drag-and-drop/vnutrennij-interfejs-drag-and-drop.html Super User toto44@inbox.ru <p style="text-align: center;"><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt;"> </span></p> <p style="text-align: center;"><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt;">Для библиотеки VCL фирмой Borland реализована собственная версия интерфейса Drag&amp;Drop (переводится как "перетащить"). Интерфейс этот внутренний — передавать и принимать можно любые управляющие элементы Delphi внутри формы' (кроме самой формы). Он реализован без использования соответствующих функций API Windows — их нужно применять при организации общения с другими задачами путем перетаскивания.</span></p> <p><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt;"> Нажав левую кнопку мыши над элементом управления, мы можем "перетащить" его на любой другой элемент. С точки зрения программиста это означает, что в моменты перетаскивания и отпускания клавиши генерируются определенные события, которыми передается вся необходимая информация — указатель на перетаскиваемый объект, текущие координаты курсора и др. Получателем событий является тот элемент, на котором в данный момент находится курсор. Обработчик такого события должен сообщить системе, принимает ли данньш элемент управления "посылку" или нет. При отпускании кнопки над принимающим элементом управления генерируется еще одно или два события, в зависимости от готовности приемника.</span></p> <p class="feed-readmore"><a target="_blank" href ="/index.php/peretaskivanie-ob-ektov-drag-and-drop-docking/obshchie-voprosy-i-teoriya-tekhnologii-drag-and-drop/vnutrennij-interfejs-drag-and-drop.html">Подробнее...</a></p> <p style="text-align: center;"><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt;"> </span></p> <p style="text-align: center;"><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt;">Для библиотеки VCL фирмой Borland реализована собственная версия интерфейса Drag&amp;Drop (переводится как "перетащить"). Интерфейс этот внутренний — передавать и принимать можно любые управляющие элементы Delphi внутри формы' (кроме самой формы). Он реализован без использования соответствующих функций API Windows — их нужно применять при организации общения с другими задачами путем перетаскивания.</span></p> <p><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt;"> Нажав левую кнопку мыши над элементом управления, мы можем "перетащить" его на любой другой элемент. С точки зрения программиста это означает, что в моменты перетаскивания и отпускания клавиши генерируются определенные события, которыми передается вся необходимая информация — указатель на перетаскиваемый объект, текущие координаты курсора и др. Получателем событий является тот элемент, на котором в данный момент находится курсор. Обработчик такого события должен сообщить системе, принимает ли данньш элемент управления "посылку" или нет. При отпускании кнопки над принимающим элементом управления генерируется еще одно или два события, в зависимости от готовности приемника.</span></p> <p class="feed-readmore"><a target="_blank" href ="/index.php/peretaskivanie-ob-ektov-drag-and-drop-docking/obshchie-voprosy-i-teoriya-tekhnologii-drag-and-drop/vnutrennij-interfejs-drag-and-drop.html">Подробнее...</a></p> Интерфейс переноса Drag-and-Drop 2017-08-09T18:28:56+07:00 2017-08-09T18:28:56+07:00 https://delphi-hlp.ru/index.php/peretaskivanie-ob-ektov-drag-and-drop-docking/obshchie-voprosy-i-teoriya-tekhnologii-drag-and-drop/interfejs-perenosa-drag-and-drop.html Super User toto44@inbox.ru <p><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt;"> </span></p> <p style="margin: 7px 0px; text-align: justify;"><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt;">Интерфейс переноса и приема компонентов появился достаточно давно. Он обеспечивает взаимодействие двух элементов управления во время выполнения приложения. При этом могут выполняться любые необходимые операции. Несмотря на простоту реализации и давность разработки, многие программисты (особенно новички) считают этот механизм малопонятным и экзотическим. Тем не менее использование Drag-and-Drop может оказаться очень полезным и простым в реализации. Сейчас мы в этом убедимся.</span></p> <p><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt;"> </span></p> <p><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt;">Для того чтобы механизм заработал, требуется настроить соответствующим образом два элемента управления. Один должен быть источником (Source), второй — приемником (Target). При этом источник никуда не перемещается, а только регистрируется в качестве такового в механизме.</span></p> <p class="feed-readmore"><a target="_blank" href ="/index.php/peretaskivanie-ob-ektov-drag-and-drop-docking/obshchie-voprosy-i-teoriya-tekhnologii-drag-and-drop/interfejs-perenosa-drag-and-drop.html">Подробнее...</a></p> <p><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt;"> </span></p> <p style="margin: 7px 0px; text-align: justify;"><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt;">Интерфейс переноса и приема компонентов появился достаточно давно. Он обеспечивает взаимодействие двух элементов управления во время выполнения приложения. При этом могут выполняться любые необходимые операции. Несмотря на простоту реализации и давность разработки, многие программисты (особенно новички) считают этот механизм малопонятным и экзотическим. Тем не менее использование Drag-and-Drop может оказаться очень полезным и простым в реализации. Сейчас мы в этом убедимся.</span></p> <p><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt;"> </span></p> <p><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt;">Для того чтобы механизм заработал, требуется настроить соответствующим образом два элемента управления. Один должен быть источником (Source), второй — приемником (Target). При этом источник никуда не перемещается, а только регистрируется в качестве такового в механизме.</span></p> <p class="feed-readmore"><a target="_blank" href ="/index.php/peretaskivanie-ob-ektov-drag-and-drop-docking/obshchie-voprosy-i-teoriya-tekhnologii-drag-and-drop/interfejs-perenosa-drag-and-drop.html">Подробнее...</a></p> Перетаскивание объектов 2017-08-09T18:36:47+07:00 2017-08-09T18:36:47+07:00 https://delphi-hlp.ru/index.php/peretaskivanie-ob-ektov-drag-and-drop-docking/obshchie-voprosy-i-teoriya-tekhnologii-drag-and-drop/peretaskivanie-ob-ektov.html Super User toto44@inbox.ru <p>Автор: Павел</p> <p>Свойства DragMode, DragCursor, методы BeginDrag, OnDragOver, OnDragDrop, OnEndDrag, OnStartDrag, параметр Accept</p> <p>Процесс перетаскивания с помощью мыши информации из одного объекта в другой широко используется в Widows.Можно перемещать файлы между папками, перемещать сами папки и др.</p> <p>Все свойства, методы и события, связанные с процессом перетаскивания, определены в классе TControl, являющегося прародителем всех визуальных компонентов Delphi. Поэтому они являются общими для всех компонентов.</p> <p>Начало перетаскивания определяется свойством DragMode, которое может устанавливаться в процессе проектирования или программно равным dmManual или dmAutomatic. Значение dmAutomatic (автоматическое) определяет автоматическое начало процесса перетаскивания при нажатии пользователем кнопки мыши над компонентом. Однако в этом случае событие OnMouseDown, связанное с нажатием пользователем кнопки мыши, для этого компонента вообще не наступает.</p> <p> </p> <p class="feed-readmore"><a target="_blank" href ="/index.php/peretaskivanie-ob-ektov-drag-and-drop-docking/obshchie-voprosy-i-teoriya-tekhnologii-drag-and-drop/peretaskivanie-ob-ektov.html">Подробнее...</a></p> <p>Автор: Павел</p> <p>Свойства DragMode, DragCursor, методы BeginDrag, OnDragOver, OnDragDrop, OnEndDrag, OnStartDrag, параметр Accept</p> <p>Процесс перетаскивания с помощью мыши информации из одного объекта в другой широко используется в Widows.Можно перемещать файлы между папками, перемещать сами папки и др.</p> <p>Все свойства, методы и события, связанные с процессом перетаскивания, определены в классе TControl, являющегося прародителем всех визуальных компонентов Delphi. Поэтому они являются общими для всех компонентов.</p> <p>Начало перетаскивания определяется свойством DragMode, которое может устанавливаться в процессе проектирования или программно равным dmManual или dmAutomatic. Значение dmAutomatic (автоматическое) определяет автоматическое начало процесса перетаскивания при нажатии пользователем кнопки мыши над компонентом. Однако в этом случае событие OnMouseDown, связанное с нажатием пользователем кнопки мыши, для этого компонента вообще не наступает.</p> <p> </p> <p class="feed-readmore"><a target="_blank" href ="/index.php/peretaskivanie-ob-ektov-drag-and-drop-docking/obshchie-voprosy-i-teoriya-tekhnologii-drag-and-drop/peretaskivanie-ob-ektov.html">Подробнее...</a></p> Преобразование координат в параметрах событий OnDragOver и OnDragDrop, в координаты формы 2017-08-09T18:38:33+07:00 2017-08-09T18:38:33+07:00 https://delphi-hlp.ru/index.php/peretaskivanie-ob-ektov-drag-and-drop-docking/obshchie-voprosy-i-teoriya-tekhnologii-drag-and-drop/preobrazovanie-koordinat-v-parametrakh-sobytij-ondragover-i-ondragdrop-v-koordinaty-formy.html Super User toto44@inbox.ru <p><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt;"> </span></p> <p style="margin: 7px 0px; text-align: justify;"><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt;">Автор: Neil</span></p> <p><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt;">Поверьте, достаточно просто преобразовать X,Y координаты, передаваемые в параметрах событий OnDragOver и OnDragDrop, в координаты формы.</span></p> <p><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt;"> </span></p> <p><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt;">Работайте со свойствами Left и Top компонента, над которым перемещается курсор. Приведу простой пример. Поместите на форму компонент Memo и присвойте свойству Align значение alTop. Поместите на форму панель, также присвойсте свойству Align значение alTop и задайте небольшое значение свойству Height, скажем 6 или 7 пикселей. Установите DragMode на dmAutomatica и DragCursor на crVSplit. Поместите другой Memo-компонент и установите Align на alClient. Одновременно выберите оба Memo-компонента, панель и создайте общий обработчик события OnDragOver как показано ниже:</span></p> <p><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt;"> </span></p> <p class="feed-readmore"><a target="_blank" href ="/index.php/peretaskivanie-ob-ektov-drag-and-drop-docking/obshchie-voprosy-i-teoriya-tekhnologii-drag-and-drop/preobrazovanie-koordinat-v-parametrakh-sobytij-ondragover-i-ondragdrop-v-koordinaty-formy.html">Подробнее...</a></p> <p><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt;"> </span></p> <p style="margin: 7px 0px; text-align: justify;"><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt;">Автор: Neil</span></p> <p><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt;">Поверьте, достаточно просто преобразовать X,Y координаты, передаваемые в параметрах событий OnDragOver и OnDragDrop, в координаты формы.</span></p> <p><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt;"> </span></p> <p><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt;">Работайте со свойствами Left и Top компонента, над которым перемещается курсор. Приведу простой пример. Поместите на форму компонент Memo и присвойте свойству Align значение alTop. Поместите на форму панель, также присвойсте свойству Align значение alTop и задайте небольшое значение свойству Height, скажем 6 или 7 пикселей. Установите DragMode на dmAutomatica и DragCursor на crVSplit. Поместите другой Memo-компонент и установите Align на alClient. Одновременно выберите оба Memo-компонента, панель и создайте общий обработчик события OnDragOver как показано ниже:</span></p> <p><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt;"> </span></p> <p class="feed-readmore"><a target="_blank" href ="/index.php/peretaskivanie-ob-ektov-drag-and-drop-docking/obshchie-voprosy-i-teoriya-tekhnologii-drag-and-drop/preobrazovanie-koordinat-v-parametrakh-sobytij-ondragover-i-ondragdrop-v-koordinaty-formy.html">Подробнее...</a></p> Функции и процедуры для работы с drag-and-drop операциями 2017-08-09T18:25:05+07:00 2017-08-09T18:25:05+07:00 https://delphi-hlp.ru/index.php/peretaskivanie-ob-ektov-drag-and-drop-docking/obshchie-voprosy-i-teoriya-tekhnologii-drag-and-drop/funktsii-i-protsedury-dlya-raboty-s-drag-and-drop-operatsiyami.html Super User toto44@inbox.ru <p><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt;"> </span></p> <p><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt;"><span style="color: #000000; font-weight: bold;">CancelDrag</span><span style="color: #000000;"> Отменяет текущую drag-and-drop или drag-and-dock операцию. </span></span></p> <p><span style="color: #000000; font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt;"> </span></p> <p><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt;"><span style="color: #000000;">Функция </span><span style="color: #000000; font-weight: bold;">FindDragTarget</span><span style="color: #000000;"> (</span><span style="color: #000000; font-weight: bold;">const</span><span style="color: #000000;"> Pos: </span><span style="color: #000000; font-style: italic;">TPoint</span><span style="color: #000000;">;AllowDisabled: </span><span style="color: #000000; font-style: italic;">Boolean</span><span style="color: #000000;"> ): </span><span style="color: #000000; font-style: italic;">TControl</span><span style="color: #000000;">;</span></span></p> <p><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt;"><span style="color: #000000;">Функция возвращает объект базового класса </span><span style="color: #000000; font-style: italic;">TControl</span><span style="color: #000000;">, к которому относится позиция экрана с координатами, определенными параметром Pos. Данная функция используется для определения потенциального получателя drag-and-drop или drag-and-dock операции. Если для указанной позиции не существует никакого оконного средства управления, то функция возвращает </span><span style="color: #000000; font-weight: bold;">nil</span><span style="color: #000000;">. Параметр AllowDisabled определяет, будут ли учитываться заблокированные (disabled) объекты. </span></span></p> <p><span style="color: #000000; font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt;"> </span></p> <p><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt;"><span style="color: #000000;">Функция </span><span style="color: #000000; font-weight: bold;">IsDragObject</span><span style="color: #000000;">( Sender: </span><span style="color: #000000; font-style: italic;">TObject </span><span style="color: #000000;">): </span><span style="color: #000000; font-style: italic;">Boolean</span><span style="color: #000000;">;</span></span></p> <p><span style="font-size: 12pt;"><span style="font-family: tahoma,arial,helvetica,sans-serif;"><span style="color: #000000;">Функция определяет, является ли объект, определенный в параметре Sender, потомком класса </span><span style="color: #000000; font-style: italic;">TDragObject</span><span style="color: #000000;">. Данную функцию можно использовать в качестве параметра Source в обработчиках событий OnDragOver и OnDockOver для того, чтобы определить будет ли принят перетаскиваемый объект. Также функцию </span><span style="color: #000000; font-weight: bold;">IsDragObject</span></span><span style="color: #000000; font-family: 'Times New Roman';"><span style="font-family: tahoma,arial,helvetica,sans-serif;"> можно использовать в качестве параметра Source в обработчиках событий OnDragDrop и OnDockDrop для того, чтобы правильно интерпретировать перетаскиваемый объект.</span> </span></span></p> <p><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt;"> </span></p> <p><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt;"><span style="color: #000000; font-weight: bold;">CancelDrag</span><span style="color: #000000;"> Отменяет текущую drag-and-drop или drag-and-dock операцию. </span></span></p> <p><span style="color: #000000; font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt;"> </span></p> <p><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt;"><span style="color: #000000;">Функция </span><span style="color: #000000; font-weight: bold;">FindDragTarget</span><span style="color: #000000;"> (</span><span style="color: #000000; font-weight: bold;">const</span><span style="color: #000000;"> Pos: </span><span style="color: #000000; font-style: italic;">TPoint</span><span style="color: #000000;">;AllowDisabled: </span><span style="color: #000000; font-style: italic;">Boolean</span><span style="color: #000000;"> ): </span><span style="color: #000000; font-style: italic;">TControl</span><span style="color: #000000;">;</span></span></p> <p><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt;"><span style="color: #000000;">Функция возвращает объект базового класса </span><span style="color: #000000; font-style: italic;">TControl</span><span style="color: #000000;">, к которому относится позиция экрана с координатами, определенными параметром Pos. Данная функция используется для определения потенциального получателя drag-and-drop или drag-and-dock операции. Если для указанной позиции не существует никакого оконного средства управления, то функция возвращает </span><span style="color: #000000; font-weight: bold;">nil</span><span style="color: #000000;">. Параметр AllowDisabled определяет, будут ли учитываться заблокированные (disabled) объекты. </span></span></p> <p><span style="color: #000000; font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt;"> </span></p> <p><span style="font-family: tahoma,arial,helvetica,sans-serif; font-size: 12pt;"><span style="color: #000000;">Функция </span><span style="color: #000000; font-weight: bold;">IsDragObject</span><span style="color: #000000;">( Sender: </span><span style="color: #000000; font-style: italic;">TObject </span><span style="color: #000000;">): </span><span style="color: #000000; font-style: italic;">Boolean</span><span style="color: #000000;">;</span></span></p> <p><span style="font-size: 12pt;"><span style="font-family: tahoma,arial,helvetica,sans-serif;"><span style="color: #000000;">Функция определяет, является ли объект, определенный в параметре Sender, потомком класса </span><span style="color: #000000; font-style: italic;">TDragObject</span><span style="color: #000000;">. Данную функцию можно использовать в качестве параметра Source в обработчиках событий OnDragOver и OnDockOver для того, чтобы определить будет ли принят перетаскиваемый объект. Также функцию </span><span style="color: #000000; font-weight: bold;">IsDragObject</span></span><span style="color: #000000; font-family: 'Times New Roman';"><span style="font-family: tahoma,arial,helvetica,sans-serif;"> можно использовать в качестве параметра Source в обработчиках событий OnDragDrop и OnDockDrop для того, чтобы правильно интерпретировать перетаскиваемый объект.</span> </span></span></p>