Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Drag an Drop на форму


Автор: lamber 9.8.2010, 11:25
Тема в следующем, не получается бросить файлы на форму, дулай как в мануле. (вот манул http://www.compdoc.ru/prog/builder/dragdrop/). Создаю два обработчика для формы OnDragDrop и OnDragOver. Вот код ниже
Код

void __fastcall TForm3::FormOnDragOver(TObject *Sender, TObject *Source, int X,
      int Y, TDragState State, bool &Accept)
{
Accept=true;

}
//---------------------------------------------------------------------------
void __fastcall TForm3::FormOnDragDrop(TObject *Sender, TObject *Source, int X,
      int Y)
{
TStringList* fString= (TStringList*)Source;
Label1->Caption= IntToStr(fString->Count);
}


В свойствах формы также ставлю dkMode:dmAutomatic DragKind:dkDrag

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

Автор: 0x00 9.8.2010, 11:58
при onCreate формы сделай

Код

this->DragMode = dmAutomatic;

Автор: lamber 9.8.2010, 12:07
Я это уже сделал в настройках формы, опечатался не dkMode, а DragMode в первом посте. Щас попробовал и явно указать при создании формы. все равно не помогает.

Автор: 0x00 9.8.2010, 13:06
Цитата(lamber @ 9.8.2010,  12:07)
Я это уже сделал в настройках формы, опечатался не dkMode, а DragMode в первом посте. Щас попробовал и явно указать при создании формы. все равно не помогает.

вот так вроде получилось добавил BEGIN_MESSAGE_MAP
и в конструкторе DragAcceptFiles

Код

//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
//---------------------------------------------------------------------------
class TForm3 : public TForm
{
__published:    // IDE-managed Components
    TLabel *Label1;
    TLabel *Label2;
    void __fastcall WmDropFiles(TWMDropFiles& Message);
private:    // User declarations
public:        // User declarations
    __fastcall TForm3(TComponent* Owner);

    BEGIN_MESSAGE_MAP
        MESSAGE_HANDLER(WM_DROPFILES,TWMDropFiles,WmDropFiles)
    END_MESSAGE_MAP(TForm);

};
//---------------------------------------------------------------------------
extern PACKAGE TForm3 *Form3;
//---------------------------------------------------------------------------
#endif





Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm3 *Form3;
//---------------------------------------------------------------------------
__fastcall TForm3::TForm3(TComponent* Owner):TForm(Owner)
{
    DragAcceptFiles(Handle,true);
}
//---------------------------------------------------------------------------
void __fastcall TForm3::WmDropFiles(TWMDropFiles& Message)
{
    Application->MessageBoxA(L"1", L"1", NULL);
};
//---------------------------------------------------------------------------

Автор: lamber 9.8.2010, 14:46
Я видел такой метод, а не существует более лаконичного чтоб это через IDE сделать а не через Win API ?

Автор: 0x00 9.8.2010, 15:50
Цитата(lamber @ 9.8.2010,  11:25)
Использую Builder 2007 
Проект компилится, но  когда перетаскиваю файл на форму получаю значок запрета перетаскивания.

в конструкторе DragAcceptFiles(Handle, true); изменяет значок, а события через ИДЕ обрабатывай, тебе никто не мешает..

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)