Форум — Ответы ( К темам )
? | Art: Кто знает, как сделать форму приёмником внешнего Drag-and-Drop'а? (31-03-2003 19:00:41) |
Конкретная задача: получить значение ячейки MS Excel, которая была "перетащена" (dragged-and-dropped) в разработанное приложение. Если кто знает, как реализуется внешний drag-and-drop, или где про это прочитать, подскажите, пожалуйста. | |
ACD (01-04-2003 03:36:43) | |
В конструкторе формы — DragAcceptFiles(Handle,true); В хеддере , например так public: void __fastcall onDropFl(TWMDropFiles& Message); BEGIN_MESSAGE_MAP MESSAGE_HANDLER(WM_DROPFILES,TWMDropFiles,onDropFl); END_MESSAGE_MAP(TForm) Далее , в реализуешь это в .cpp void __fastcall TForm1::onDropFl(TWMDropFiles& Message) { char path[MAX_PATH]; HWND hw; int nFiles; HDROP drop=(HDROP)Message.Drop; nFiles=DragQueryFile(drop,-1,NULL,NULL); for(int i=0;i<nFiles;i++) {DragQueryFile(drop,i,path,sizeof(path)); ...;} DragQueryPoint(drop,&point); DragFinish(drop); } В коде может быть что-то лишнее — просто скопировал кусок из одного проекта и удалил не относящееся к вопросу. | |
ACD (01-04-2003 03:41:16) | |
Хотя если перетаскивать ячейку Excel то не знаю , что будет в path , и что вообще вернет DragQueryFile.
| |
Art (01-04-2003 11:12:29) | |
ACD, cпасибо, конечно, но это не помогает. Ты предлагаешь зарегистрировать приложение как приёмник сообщения WM_DROPFILES функцией DragAcceptFiles, а затем повестить на это сообщение свой обработчик. Это здорово, но мне файлы не нужны (компоненты-приёмники/источники dragged-and-dropped URL, BMP, файлов и папок созданы ещё для Delphi 4 — правда они коряво портируются в C++ Builder 5.0), а нужен мне ЛЮБОЙ DragOver/DragDrop из других приложений. В WinSigth есть Message wm_dropObject — прямо по соседству с WM_DROPFILES. Одна проблема: я не знаю как зарегистрировать приложение на получение этого сообщения! HELP!!!! | |
ACD (03-04-2003 03:10:34) | |
Смотрел в MSDN WM_DROPOBJECT не нашел. Что то есть по IDropTarget Interface : RegisterDragDrop(),RevokeDragDrop()... но как это все применить в билдере не известно. | |
Art (03-04-2003 12:06:22) | |
ACD, большое спасибо за такое участие! Я уже нашёл нужный компонент TTextDropTarget — поставляется с 6-м Builder'ом. Excel при начале Drag'а создаёт свой мультиинтерфейсный DragObject, который в том числе поддерживает CF_TEXT. Теперь экспериментирую, как получить из этого DragObject'а все поддерживаемые им форматы: должно получиться как в офисном PasteSpecial. Ещё раз спасибо. ;-) |