Предводителев Сергей
В этой статья я расскажу, как реализовать перетаскивание файлов на форму... Рассмотрим на примере текстового редактора с многооконным интерфейсом, при перетаскивании файлов на главную форму которого будут открываться 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 в приложение.
Ну вот и всё... Если что-то непонятно или здесь что-то не так, то пишите... разберёмся ;)
Внимание! Запрещается перепечатка данной статьи или ее части без согласования с автором. Если вы хотите разместить эту статью на своем сайте или издать в печатном виде, свяжитесь с авто
Похожие работы
... Z можно отбросить. 2.1.6 Алгоритм Z-буфера После получения треугольников ландшафта (триангуляции равномерной сетки) и проецирования их на экранную плоскость следует построение изображения ландшафта. В процессе его построения для удаления невидимых поверхностей используется алгоритм Z-буфера. Это один из простейших алгоритмов удаления невидимых поверхностей. Работает этот алгоритм в ...
... средств на сегодняшний день является файловый менеджер Windows Commander (в последствии Total Commander). В отличии от стандартной системы, ограничивающейся в целом лишь функциями работы с файлами и папками, Total Commander представляет на суд пользователя широкий выбор многочисленных дополнительных опций и необходимых инструментов, объединенных (в отличии от "Проводника") в единую оболочку и ...
... -e[x,n,s] =Изменить метод сжатия -<p|P> = История пути | p=recursed into | P=specified & recursed into -<w|W><H,S> = | w=include | W=don't include | Показывает ход работы -<j|J><H,S,R> = | j=mask | J=don't mask | Hidden/System/Readonly attributes -v[b,c,d,e,n,p,s,r,t] = Просмотр архива Date/Ext/Name/Percentage/Size/sort Reverse/Technical (long) listing] ...
... ». Кроме традиционно выпускаемой продукции, завод может производить капремонт двигателей А-01М, Д-240, ЯМЗ-236, ЯМЗ-238 и др., отечественного производства экскаваторов ЭО-4124 и гидроузлов к ним, готов организовать сервисный цех по тракторной технике и а/м «Татра», организовать участок по капремонту УДС-114. Завод имеет возможности изготовления агрегатов для перевозки штанг и агрегатов для ...
0 комментариев