Тема: WinApi - Drag&Drop проблема
Маю таку проблему будь ласка допомжіть якщо не важко!
Маю такий код:
Unit1.h
private: // User declarations
void __fastcall WmDropFiles(TWMDropFiles& Message);
public: // User declarations
__fastcall TForm4(TComponent* Owner);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_DROPFILES, TWMDropFiles, WmDropFiles)
END_MESSAGE_MAP(TForm);
Unit1.cpp
void __fastcall TForm4::FormCreate(TObject *Sender)
{
DragAcceptFiles(Form4->Handle,True);
}
void __fastcall TForm4::WmDropFiles(TWMDropFiles& Message)
{
wchar_t *chFileName;
int Count;
Count = DragQueryFile(HDROP (Message.Drop), 0xFFFFFFFF,chFileName,MAXPATH); // число перетащенных файлов
for (int i=0;i<Count;i++)//цикл по файлам
{
DragQueryFile(HDROP (Message.Drop),i,chFileName,MAXPATH); // запрос имени файла
RichEdit1->Lines->Add(chFileName);
}
DragFinish(HDROP (Message.Drop)); // завершение перетаскивания
}
Добре , це функція яка дає змогу вилучати шлях файлів з середовища віндовс при перетягуванні на форму. Все працює, шлях я вилучаю але коли я хочу його записати в RichEdit1 виникає така помилка, на рисунку 13.jpg
----------------------------------------------------------------------------------------------------------------
------------------------------------------------Вирішення помилки далі-----------------------------------------
void __fastcall TForm4::WmDropFiles(TWMDropFiles& Message)
{
char *chFileName = "";
//AnsiString chFileName;
int Count;
Count = DragQueryFileA(HDROP (Message.Drop), 0xFFFFFFFF, chFileName, MAX_PATH);
//Count = DragQueryFile(HDROP (Message.Drop), 0xFFFFFFFF,chFileName.c_str(),MAXPATH);
for (int i=0;i<Count;i++)
{
if ( DragQueryFileA(HDROP (Message.Drop), i, chFileName, MAX_PATH) != 0 )
{
MessageBox( Form4->Handle, "Its allright", "good", MB_OK);
} else
{
MessageBox( Form4->Handle, "Dont good, error", "error", MB_OK);
chFileName = "Error";
}
for (int j=0; j < strlen( chFileName ); j++){
//Тут треба передати шлях у глобальну змінну.
Global = chFileName;
}
}
DragFinish(HDROP (Message.Drop));
}
Також треба зробити заміну "_TChar maps to: wchar_t на Char".Це заходиться у розділі "Опціі проекта".
Програмуваню необхідні знання! Друзі! Ми всі забули про виділення пам'яті!
Ось так повинно бути:
void __fastcall TForm4::WmDropFiles(TWMDropFiles& Message)
{
char *chFileName = "";
int Count;
Count = DragQueryFileA(HDROP (Message.Drop), 0xFFFFFFFF, chFileName, MAX_PATH);
for (int i=0;i<Count;i++)
{
DWORD size = DragQueryFile((HDROP)Message.Drop, i, 0, 0);
chFileName = new char[size + 1];
if ( DragQueryFileA(HDROP (Message.Drop), i, chFileName, MAX_PATH) != 0 )
{
MessageBox( Form4->Handle, "Its allright", "good", MB_OK);
} else
{
MessageBox( Form4->Handle, "Dont good, error", "error", MB_OK);
chFileName = "Error";
}
for (int j=0; j < strlen( chFileName ); j++){
RichEdit1->Lines->Strings[i] = RichEdit1->Lines->Strings[i] + chFileName[j];
//abc = chFileName;
//IcoGen(abc);
}
}
DragFinish(HDROP (Message.Drop));
}
За пам'ятю необхідно слідкувати!)