Вопрос: Как перетащить файл на мою форму?
Ответ :
В хедере формы в private пишем:
code:
--------------------------------------------------------------------------------
void __fastcall WmDropFiles(TWMDropFiles & Message);
--------------------------------------------------------------------------------
в public прописываем:
code:
--------------------------------------------------------------------------------
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_DROPFILES, TWMDropFiles, WmDropFiles)
END_MESSAGE_MAP(TForm)
--------------------------------------------------------------------------------
в cpp-модуле формы пишем такой обработчик:
code:
--------------------------------------------------------------------------------
void __fastcall TMyForm::FormCreate(TObject *Sender)
{
DragAcceptFiles(Handle, true);
}
--------------------------------------------------------------------------------
Так мы сообщаем системе, что можем принемать файлы.
Дальше там же (в cpp) пишем тело нашей функции:
code:
--------------------------------------------------------------------------------
void __fastcall TMуForm::WmDropFiles(TWMDropFiles & Message)
{
char path[256];
String str;
HDROP hDrop = (HDROP)Message.Drop;
int nFiles = DragQueryFile(hDrop, -1, NULL, NULL);//количество файлов,
//ведь можно перетаскивать один файл, а можно сразу несколько.
for (int i = 0; i < nFiles; i++)
{
DragQueryFile(hDrop, i, path, sizeof(path));
str = path;// полное имя перетсакиваемого на форму файла (включая путь)
//Дальше делаем с ним чего угодно, например приводим название к нижнему регистру
if (!RenameFile(str, ExtractFilePath(str) + ExtractFileName(str).LowerCase()))
Application->MessageBox(("Unable rename file: " + str).c_str(), "Error",
MB_OK + MB_ICONERROR);
}
DragFinish(hDrop);
}
--------------------------------------------------------------------------------
Вот так, например, работает маленькая программка, для того, чтобы быстренько "причесывать" названия файлов к одному виду.
(c) 2003 Borland X Portal
|