21 / 22 / 5
Регистрация: 14.02.2013
Сообщений: 243
1

Drag Drop файлов

12.01.2014, 12:45. Показов 4607. Ответов 6
Метки нет (Все метки)

Делаю вот так:
[Unit1.h]:
C++
1
2
3
4
5
6
7
8
9
class TForm1 : public TForm
{
private:
void __fastcall WMDropFiles(TWMDropFiles message);
public:
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_DROPFILES,TWMDropFiles,WMDropFiles)
END_MESSAGE_MAP(TForm);
};
[Unit1.cpp]:
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
DragAcceptFiles(Form1->Handle, true); 
}
//---------------------------------------------------------------------------
void __fastcall TForm1::WMDropFiles(TWMDropFiles message)
{
int filecount, length, i;
filecount = DragQueryFile ((HDROP) message.Drop, 0xFFFFFFFF/*-1*/, NULL, 0);
AnsiString filename;
for (i = 0; i < filecount; i++) 
{
filename.SetLength(MAX_PATH);
length = DragQueryFile((HDROP)message.Drop, i, filename.c_str(), filename.Length());
filename.SetLength(length);
ShowMessage(filename);
}
DragFinish ((HDROP) message.Drop);
}
//---------------------------------------------------------------------------
.

Здесь даже сообщение не приходит!
Работаю в RadStudio XE5.

Добавлено через 40 минут
Я уже решил проблему, сообщение приходит, проблема была в том, что я запускал программу от имени администратора, но мне надо и далее запускать от имени администратора, как это сделать(у меня Windows 8, а там на изменение файлов и реестра нужно обладать правами администратора)?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.01.2014, 12:45
Ответы с готовыми решениями:

Drag&drop файлов. Отследить момент перетаскивания.
Юзер перетаскивает файл на форму. Кнопку мыши пока не отпустил. Как определить, что сейчас на...

Drag & Drop файлов из своей программы в проводник/Рабочий стол
Про Drag &amp; Drop в свою программу информации относительно много, а вот про Drag &amp; Drop файлов из...

Drag and drop!
Парни может у кого есть пример или что кодик какой как реализовать drag and drop с заменой. Т.е....

Drag-and-Drop по сетке
Подскажите, как перемещать компоненты по форме с привязкой к сетке?

6
Ушел с форума
Эксперт С++
16457 / 7421 / 1186
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
12.01.2014, 13:13 2
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от Tarik20 Посмотреть сообщение
сообщение приходит, проблема была в том, что я запускал программу от имени администратора, но мне надо и далее запускать от имени администратора, как это сделать(у меня Windows 8, а там на изменение файлов и реестра нужно обладать правами администратора)?
В Vista и выше доставка оконных сообщений может блокироваться UAC-ом, если
сообщение посылается от процесса с низким уровнем целостности (integrity level)
процессу с высоким. Но можно явно разрешить прием сообщений с помощью
функции ChangeWindowMessageFilter (или ChangeWindowMessageFilterEx на Windows 7).

ChangeWindowMessageFilter function
http://msdn.microsoft.com/en-u... 85%29.aspx

ChangeWindowMessageFilterEx function
http://msdn.microsoft.com/en-u... 85%29.aspx

Нужно разрешить сообщения WM_DROPFILES и WM_COPYGLOBALDATA (0x0049),
возможно еще WM_COPYDATA, WM_COMMAND и какие-то другие, связанные с
Drag'n'Drop, сейчас уже не помню точно.

Добавлю, что "открытие дверей" в админский процесс является угрозой безопасности,
т.к. любой код сможет выполнить для него Drag'n'Drop.
5
21 / 22 / 5
Регистрация: 14.02.2013
Сообщений: 243
13.01.2014, 15:31  [ТС] 3
Спасибо, работает!
0
Марсианин)))
713 / 46 / 15
Регистрация: 18.07.2010
Сообщений: 624
13.01.2014, 15:40 4
Цитата Сообщение от Tarik20 Посмотреть сообщение
Спасибо, работает!
А рабочий вариант можно выложить?
0
21 / 22 / 5
Регистрация: 14.02.2013
Сообщений: 243
13.01.2014, 15:44  [ТС] 5
Цитата Сообщение от Xank Посмотреть сообщение
А рабочий вариант можно выложить?
Ок, секунду...
0
21 / 22 / 5
Регистрация: 14.02.2013
Сообщений: 243
13.01.2014, 15:51  [ТС] 6
Вот на RAD XE5:
DD.7z
1
Ушел с форума
Эксперт С++
16457 / 7421 / 1186
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
13.01.2014, 15:57 7
Не забываем, что ChangeWindowMessageFilter на системах до Windows Vista нету.
Если нужна совместимость с Windows XP, то эту функцию следует загружать
динамически (LoadLibrary/GetProcAddress).
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.01.2014, 15:57
Помогаю со студенческими работами здесь

Drag&Drop
Как перенести из TreeView1 текст в Edit1 !?!?!?

не работает Drag and Drop
Мне для программы нужно использовать Drag and Drop я нашёл...

Drag Drop Dock
есть ли толковая литература или интересные статьи по этому методу мне нужно просто реализовать...

Drag&Drop
Здравствуйте:) Уже месяц работаю над текстовым редактором. Встал вопрос: например на рабочем...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru