Доклад: Перетаскивание файлов на форму
Название: Перетаскивание файлов на форму Раздел: Рефераты по информатике, программированию Тип: доклад |
Предводителев Сергей В этой статья я расскажу, как реализовать перетаскивание файлов на форму... Рассмотрим на примере текстового редактора с многооконным интерфейсом, при перетаскивании файлов на главную форму которого будут открываться MDI-окна с уже открытыми в них файлами. Не будем далеко ходить, возьмем текстовый редактор из примеров, которые поставляются вместе с Delphi, и дополним его. Итак, для начала надо зарегистрировать окно для приёма файлов, для этого в обработчике onCreate для главной формы напишем следующий код: DragAcceptFiles(FrameForm.Handle, True); Эта функция оп7исана в библиотеке ShellAPI, поэтому не забудьте его добавить в раздел uses. Первый параметр функции - handle регистрируемого окна, второй параметр - определяет можно перетаскивать файлы (True) или нет (False). Теперь надо обрабатывать сообщение WM_DROPFILES. В разделе private добавим следующую строчку: procedure WMDROPFILES(var Message: TWMDROPFILES); message WM_DROPFILES; И соответственно напишем процедуру обработки сообщения: procedure TFrameForm.WMDROPFILES(var Message: TWMDROPFILES); var Files: Longint; I: Longint; Buffer: array[0..MAX_PATH] of Char; begin Files := DragQueryFile(Message.Drop, $FFFFFFFF, nil, 0); for I := 0 to Files - 1 do begin DragQueryFile(Message.Drop, I, @Buffer, SizeOf(Buffer)); if FileExists(Buffer) then with TEditForm.Create(Self) do Open(Buffer); end; DragFinish(Message.Drop); end; В этой процедуре используется функция DragQueryFile. Вот её описание: DragQueryFile( HDROP hDrop, // handle структуры, перетащенных файлов UINT iFile, // номер нужного файла LPTSTR lpszFile, // буфер для возвращаемого FileName UINT cch // размер буфера для FileName ); Если iFile равен $FFFFFFFF, то функция возвращает количество перетащенных файлов. Итак, в нашей процедуре сначала в переменную Files заносится кол-во перетащенных файлов, а затем мы просматриваем все FileName'ы и если данный файл существует, то открываем его. Примечание. MATH_PATH - константа, которая задаётся в модуле Windows. Это, если я всё правильно понял ;), максимальное количество символов в FileName. Функция DragFinish очищает память, которая использовалась для передачи FileName в приложение. Ну вот и всё... Если что-то непонятно или здесь что-то не так, то пишите... разберёмся ;) Внимание! Запрещается перепечатка данной статьи или ее части без согласования с автором. Если вы хотите разместить эту статью на своем сайте или издать в печатном виде, свяжитесь с автором. |