Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.25;
Скачать: CL | DM;

Вниз

Drag&Drop на WinAPI   Найти похожие ветки 

 
DennisLNC ©   (2004-02-26 15:36) [0]

Помогите организовать Drag&Drop между двумя компонентами ListView
на  форме на WinAPI


 
Игорь Шевченко ©   (2004-02-26 16:02) [1]

В чем проблемы ?


 
DennisLNC ©   (2004-02-27 12:39) [2]

Какие сообщения нужно послать чтобы соседний ListView принял информацию при киданий на него ?


 
Игорь Шевченко ©   (2004-02-27 12:47) [3]

В разделе "статьи" на сайте есть хорошая статья про Drag-and-drop, с примерами. Там можно посмотреть, какие действия выполняются. Затем, по исходникам VCL определить, каким вызовам функций соответвуют действия.

Удачи


 
DVM ©   (2004-02-27 14:21) [4]


> Какие сообщения нужно послать чтобы соседний ListView принял
> информацию при киданий на него ?

Все не так просто как кажется. Все очень даже сложно. Чтобы сделать это придется реализовать как минимум 3 вещи:

1) Научится отправлять информацию "в полет". В самом общем случае это делается через реализацию интерфейсов IDropSource и IDataObject и иже с ними, тогда перетаскивать можно будет и в другие программы. Если только между двумя конкретными ListView, то можно придумать что-то попроще, скажем при начале перетаскивания просто запоминать какой итем "летит", чтобы потом при отпускании кнопки мыши вставить его в другой ListView.
Если интересует же сообщение которое надо послать ListView, чтобы он принял информацию, то есть только одно такое сообщение WM_DROPFILES, которое позволяет передать окну список строк (файлов). Обычно его посылает оболочка, но можно и самому послать. Но ListView сам ничего делать не будет в ответ на это сообщение. Его надо поймать и обработать (возможно при этом добавив итемы).

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

В простейшем случае при отпускании кнопки мыши над ListView в него надо поместить итем с данными взятыми из итема первого ListView, который мы запомнили в 1) при начале перетаскивания.

3) Научится создавать изображение перетаскиваемого итема. У ListView для этого есть специальные средства. Он может предоставить изображение перетаскиваемого итема, которое надо будет положить в ImageList и ImageList может из него создать полупрозрачное изображение перетаскиваемого итема, которое и будет двигаться за указателем мыши.

Вообще вопрос настолько объемный, что займет страниц 100 не меньше, если все детально описывать.

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


> Затем, по исходникам VCL определить, каким вызовам функций
> соответвуют действия.

Теоретически можно конечно, но практически там все завернуто так, что концы искать придется очень долго. К тому же там используется несколько другой подход к реализации претаскивания.



Страницы: 1 вся ветка

Текущий архив: 2004.04.25;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.052 c
3-1080633337
Innokenty
2004-03-30 11:55
2004.04.25
Умножение или деление. Что быстрее.


3-1080637571
Марат
2004-03-30 13:06
2004.04.25
Курсор в DBGrid


3-1080593571
Heet
2004-03-30 00:52
2004.04.25
Подключение к таблице Interbase на сетевом новеловском диске


1-1081630447
Klopan
2004-04-11 00:54
2004.04.25
сохранение/загрузка ListView в/из файл.


3-1080750989
ZSergey
2004-03-31 20:36
2004.04.25
Как правильно передать параметру в запросе строку ...?