Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
288 / 229 / 27
Регистрация: 13.06.2010
Сообщений: 744
1

Drag'n'drop папки в TListBox

12.10.2011, 16:41. Показов 2238. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток.
Подскажите пожалуйста как реализовать drag'n'drop папки в TListBox (кидаем папку, получаем ее содержимое)

Файлы принимаю так:
C++
1
2
3
4
5
6
7
8
9
10
11
void __fastcall TMainForm::WMDropFiles(TWMDropFiles &Message)
{
    wchar_t path[MAX_PATH];
    HDROP drop=(HDROP)Message.Drop;
    UINT nFiles = DragQueryFile(drop,0xFFFFFFFF,NULL,MAX_PATH);
    for(int i=0;i<nFiles;++i){
        DragQueryFile(drop,i,path,sizeof(path));
        ListBox1->Items->Add(path);
    }
    DragFinish(drop);
}
В попытках найти информацию по данному вопросу нашел такой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
HRESULT __stdcall CDropTarget::Drop(IDataObject *pDataObject, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect)
{
FORMATETC fm = {0};
fm.cfFormat = CF_HDROP;
fm.tymed = TYMED_HGLOBAL;
fm.dwAspect = DVASPECT_CONTENT;
STGMEDIUM stg = {0};
HDROP drop = {0};
WCHAR szBuffer[MAX_PATH] = {0};
 
pDataObject->GetData(&fm, &stg);
drop = (HDROP)GlobalLock(stg.hGlobal);
int count = DragQueryFile(drop, 0xFFFFFFFF, NULL, 0);
for (int i=0; i < count; i++)
{
DragQueryFile(drop, i, szBuffer, MAX_PATH);
MessageBox(0, szBuffer, 0, 0);
}
GlobalUnlock(std.hGlobal);
ReleaseStgMedium(&stg);
return S_OK;
}
Большую часть кода понять не удалось, да и параметры спугнули,
но так как у Message (TWMDropFiles) тоже 4 параметра, я попытался преобразовать их в требуемые, но ничего не вышло.
Надеюсь на вашу помощь.
Заранее благодарен за ответы.
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.10.2011, 16:41
Ответы с готовыми решениями:

Drag&Drop выделенного текста между компонентами TMemo, TListBox и TEdit
Здраствуйте. У меня такое вот задание: Используя Drag&amp;Drop, сделать возможным перетягивание...

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

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

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

3
518 / 306 / 58
Регистрация: 30.07.2008
Сообщений: 607
12.10.2011, 16:57 2
*.h
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
//---------------------------------------------------------------------------
 
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <FileCtrl.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
    TFileListBox *FileListBox1;
private:    // User declarations
public:     // User declarations
    __fastcall TForm1(TComponent* Owner);
    void __fastcall WmDropFiles(TWMDropFiles& Message);
    BEGIN_MESSAGE_MAP
        MESSAGE_HANDLER(WM_DROPFILES, TWMDropFiles, WmDropFiles)
    END_MESSAGE_MAP(TForm)
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
*.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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    DragAcceptFiles(FileListBox1->Handle , true);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::WmDropFiles(TWMDropFiles& Message)
{
    char buffX[MAX_PATH];
    HDROP hDrop = (HDROP)Message.Drop;
    //int numFiles = DragQueryFile(hDrop, -1, NULL, NULL); // количество
 
        DragQueryFile(hDrop, 0, buffX, sizeof(buffX)); // берем нулевой элемент
        if(DirectoryExists(buffX))
        {
 
            FileListBox1->Directory = (buffX);
            FileListBox1->Update();
        }
 
    DragFinish(hDrop);
 
}
//---------------------------------------------------------------------------
1
LK
Заблокирован
12.10.2011, 17:03 3
я бы оставил это vc в покое и почитал Примеры использования Drag and Drop для различных визуальных компонентов, обратите внимание на
Pascal
1
2
3
4
5
6
7
// дана реализация для одного файла, а 
  //если предполагается принимать группу файлов, то можно добавить:
  //num:=DragQueryFile(h,Dword(-1),nil,0);
  //for i:=0 to num-1 do begin
  //  DragQueryFile(h,i,pchr,maxlen);
  //...обработка каждого
  //end;
1
288 / 229 / 27
Регистрация: 13.06.2010
Сообщений: 744
12.10.2011, 18:28  [ТС] 4
Цитата Сообщение от Gremlin Посмотреть сообщение
C++
1
if(DirectoryExists(path))
Спасибо! И как же я сразу не догадался...
самый верный способ - проверять дирриктория ли это))
А там уже FindFirstFile, FindSecondFile
0
12.10.2011, 18:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.10.2011, 18:28
Помогаю со студенческими работами здесь

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

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

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

Drag Drop файлов
Делаю вот так: : class TForm1 : public TForm { private: void __fastcall...

Перестал работать Drag'n'Drop
После переустановки Win32 to Win64 появилась куча проблем. Почти все решил, вот появилась еще...

Drag & Drop file
Подскажите как используя DRAG &amp; DROP перетащить файл на RichEdit чтобы он открылся в RichEdit?


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru