Zireael |
Отправлено: 29 Января, 2022 - 17:51:59
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Сделал. Работает везде.
Если не секрет что нужно было исправить чтобы заработало?
Если возможно, то добавить проверку что перетаскивание было сделано именно в окно кибор, для диалоговых окон не выводить сообщения.
CODE:#define WS_VISIBLE 0x10000000
#define WS_CHILD 0x40000000
#define ES_MULTILINE 0x0004
#define TRUE 1
external(INT, "DragAcceptFiles", "DragAcceptFiles", "Shell32.dll");
external(INT, "DragQueryFile", "DragQueryFileA", "Shell32.dll");
external(INT, "DragFinish", "DragFinish", "Shell32.dll");
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
int static;
createdialog(0);
showdialog(0, "Диалог", 500, 200, 300, 300, 1, 1);
loop()sleep(10);
function getmessage(0, WM_CREATE)
{
DragAcceptFiles(gethwnd(0), TRUE);
static = CreateWindow(0, "STATIC", "В это окно можно перетащить файлы", WS_CHILD | WS_VISIBLE, 80, 100, 150, 150, gethwnd(0), 0, 0, 0);
}
function getmessage(0, WM_DROPFILES)
{
int hDrop = message.wparam;
char path[256];
int count = DragQueryFile(hDrop, -1, address(#path[0]), sizearray(path));
resettextout(1);
messagebox("Всего перенесено файлов: "+format(count));
for(int i=0; i<count; i++) // вывод списка файлов
{
DragQueryFile(hDrop, i, address(#path[0]), sizearray(path));
textout(i, 0, i*20, format(#path[0]), 1);
}
DragFinish(hDrop);
} |
|
|
Kibor |
Отправлено: 29 Января, 2022 - 18:00:50
|
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Zireael пишет: Если не секрет что нужно было исправить чтобы заработало?
CODE:#define WS_VISIBLE 0x10000000
#define WS_CHILD 0x40000000
#define ES_MULTILINE 0x0004
#define TRUE 1
//ДОБАВЛЕНИЕ
#define MSGFLT_ALLOW 1
external(INT, "DragAcceptFiles", "DragAcceptFiles", "Shell32.dll");
external(INT, "DragQueryFile", "DragQueryFileA", "Shell32.dll");
external(INT, "DragFinish", "DragFinish", "Shell32.dll");
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
//ДОБАВЛЕНИЕ
external(INT, "ChangeWindowMessageFilter", "ChangeWindowMessageFilter", "User32.dll" );
int static;
createdialog(0);
showdialog(0, "Диалог", 500, 200, 300, 300, 1, 1);
loop()sleep(10);
function getmessage(0, WM_CREATE)
{
//ДОБАВЛЕНИЕ
ChangeWindowMessageFilter (WM_DROPFILES, MSGFLT_ALLOW);
ChangeWindowMessageFilter (WM_COPYDATA, MSGFLT_ALLOW);
ChangeWindowMessageFilter (0x0049, MSGFLT_ALLOW);
DragAcceptFiles(gethwnd(0), TRUE);
static = CreateWindow(0, "STATIC", "В это окно можно перетащить файлы", WS_CHILD | WS_VISIBLE, 80, 100, 150, 150, gethwnd(0), 0, 0, 0);
}
function getmessage(0, WM_DROPFILES)
{
int hDrop = message.wparam;
char path[256];
int count = DragQueryFile(hDrop, -1, address(#path[0]), sizearray(path));
resettextout(1);
messagebox("Всего перенесено файлов: "+format(count));
for(int i=0; i<count; i++) // вывод списка файлов
{
DragQueryFile(hDrop, i, address(#path[0]), sizearray(path));
textout(i, 0, i*20, format(#path[0]), 1);
}
DragFinish(hDrop);
}
Zireael пишет: Если возможно, то добавить проверку что перетаскивание было сделано именно в окно кибор, для диалоговых окон не выводить сообщения.
Исправлю.
(Добавление)
Zireael пишет: Если возможно, то добавить проверку что перетаскивание было сделано именно в окно кибор, для диалоговых окон не выводить сообщения.
Поправил. |
|
|
|