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