Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
18 / 18 / 7
Регистрация: 20.03.2012
Сообщений: 585

Перетаскивание файлов на форму - не работает по гайду

03.07.2025, 15:29. Показов 2467. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
Пытаюсь реализовать перетаскивание файлов (например, из Проводника) на форму. В Интернете везде предлагается одно и то же решение, как в этом посте:
Добавление в приложение функционала Drag-n-Drop/Drag-n-Dock

На всякий случай выложу свой код как есть:
C++
1
2
3
4
5
6
7
8
9
10
11
12
class TForm1 : public TForm
{
__published:    // IDE-managed Components
    void __fastcall FormCreate(TObject *Sender);
private:    // User declarations
    void __fastcall WMDropFiles(TWMDropFiles &message);
public:     // User declarations
    __fastcall TForm1(TComponent* Owner);
    BEGIN_MESSAGE_MAP
        MESSAGE_HANDLER(WM_DROPFILES,TWMDropFiles,WMDropFiles)
    END_MESSAGE_MAP(TForm);
};
C++
1
2
3
4
5
6
7
8
9
10
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    DragAcceptFiles(this->Handle, true);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::WMDropFiles(TWMDropFiles &message)
{
    ShowMessage(L"Пожалуйста, пусть эта функция вызовется!");  // Не вызывается
}
Но почему-то не работает, обработчик не вызывается. Пробовал DragMode = dmAutomatic. Пробовал на Win 10 и 11. Компилировал, как под 64, так и под 32-bit, и даже пробовал 'classic compiler' (а вдруг). Студия 12 версии.

Наверное, упускаю что-то очевидное. В чем может быть проблема?

Добавлено через 11 минут
Из вышеупомянутого поста скачал готовый архив с примером "dnd_target.7z" - то же самое - обработчик WMDropFiles там тоже не вызывается.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.07.2025, 15:29
Ответы с готовыми решениями:

Перетаскивание на форму несколько файлов и работа через ListBox1
здравствуйте, у меня на форме есть компонент ListBox1 я дропаю один файл и работаю с ним....

Перетаскивание файлов на форму
Всем привет! Появился вопрос, как перетащить несколько файлов на форму, чтобы пути к этим файлам...

Кто знает гайд по заголовочному файлу "string"
Пишу код шифра Цезаря. С массивами работа очень геморная. Код почти готов, но сыроватенький он....

4
Злостный нарушитель
 Аватар для Verevkin
10311 / 5733 / 1269
Регистрация: 12.03.2015
Сообщений: 26,561
03.07.2025, 17:55
Лучший ответ Сообщение было отмечено znseday как решение

Решение

Использование С++Builder прям принципиально? А то я уже дома, у меня тут нету билдера.
Сюда читай.
1
 Аватар для andrey_f
884 / 537 / 228
Регистрация: 21.02.2011
Сообщений: 5,705
04.07.2025, 08:54
так попробуйте
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
class TForm1 : public TForm
{
__published:
    void __fastcall FormCreate(TObject *Sender);
protected:
    virtual void __fastcall WndProc(Messages::TMessage &Message) override;
public:
    __fastcall TForm1(TComponent* Owner);
};
 
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    DragAcceptFiles(this->Handle, true);
}
 
void __fastcall TForm1::WndProc(Messages::TMessage &Message)
{
    if (Message.Msg == WM_DROPFILES)
    {
        // Обработка перетаскивания
        TWMDropFiles dropFiles = *reinterpret_cast<TWMDropFiles*>(&Message);
        int count = DragQueryFile(dropFiles.handle, 0xFFFFFFFF, NULL, 0);
        for (int i = 0; i < count; ++i)
        {
            TCHAR filename[MAX_PATH];
            if (DragQueryFile(dropFiles.handle, i, filename, MAX_PATH))
            {
                ShowMessage(String("Файл: ") + filename);
            }
        }
        DragFinish(dropFiles.handle);
        return; // чтобы сообщение не передавать дальше
    }
    TForm::WndProc(Message);
}
1
18 / 18 / 7
Регистрация: 20.03.2012
Сообщений: 585
04.07.2025, 10:07  [ТС]
Цитата Сообщение от Verevkin Посмотреть сообщение
Использование С++Builder прям принципиально?
Ну а как думаешь, раз в этом разделе тему создал?)
С другими средами редко создаю темы - там всё или по документации понятно или по stackoverflow, а Билдер - это колдунство, где тайные знания передаются из уст в уста...
Цитата Сообщение от Verevkin Посмотреть сообщение
Сюда читай
А за ссылку спасибо - помогло.

Добавлено через 4 минуты
Цитата Сообщение от andrey_f Посмотреть сообщение
так попробуйте
no member named 'handle' in 'Winapi::Messages::TWMDropFiles'
Ну, и если даже закомментить там всё, то обработчик всё равно не вызывается.
Единственное, что помогло, это:
C++
1
2
3
    ChangeWindowMessageFilter(WM_DROPFILES, MSGFLT_ADD);
    ChangeWindowMessageFilter(WM_COPYDATA,  MSGFLT_ADD);
    ChangeWindowMessageFilter(0x0049,       MSGFLT_ADD);
в FormCreate.
0
Злостный нарушитель
 Аватар для Verevkin
10311 / 5733 / 1269
Регистрация: 12.03.2015
Сообщений: 26,561
04.07.2025, 10:07
Цитата Сообщение от znseday Посмотреть сообщение
Ну а как думаешь, раз в этом разделе тему создал?)
Никак не думаю, поэтому и спросил.
Цитата Сообщение от znseday Посмотреть сообщение
Билдер - это колдунство
Ты комсомолец? Не ищешь лёгких путей?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.07.2025, 10:07
Помогаю со студенческими работами здесь

Канал с гайдом по С++ (Visyal Studio)
Подскажите пожалуйста канал на YouTube или где нибудь еще с гайдам по С++ (Visyal Studio). Заранее...

<regex> гайд
Можно ссылку на нормальный урок/инструкцию по std::regex? Сам в интернете так ничего и не нашел, с...

Гайд по сортировке односвязного линейного списка
Посоветуйте пожалуйста толковый гайд по сортировке. Уже столько всего перерыл, прочитал, но понять...

SDK: гайд для чайников
Доброго времени суток. Будте добры, подскажите с чем готовят и как едят SDK к различному...

Нужен гайд по установщику приложений Qt под Windows
Как сделать, что бы программа написанная на Qt, нормально устанавливалась (через установщик) и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru