Jak napisać obsługę „Drag and Drop” ?
Sporo osób zaczynających zabawę z C++Builder’em ma z tym problemy, a przecież jest to proste (wystarczy Google i trochę tłumaczenia, z Delphi (http://delphi.cartall.com.pl/Pytania/pyt103.htm) )

Może zamiast się rozpisywać jak to zrobić, poprostu to zróbmy!

1) Tworzymy nowy projekt (uruchamiamy C++Buildera)
2) Wrzucamy TMemo i TApplicationEvents na formatkę.
3) W zdarzeniach Form1 klikamy na OnCreate i OnDestroy wypełniając je jak poniżej:


void __fastcall TForm1::FormCreate(TObject *Sender)
{
//Akceptuj przyjmowanie zdropowanych plików przez Memo1
DragAcceptFiles (Memo1->Handle, True);
}
 
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
  //Nie akceptuj przyjmowanie zdropowanych plików, przez Memo1
  DragAcceptFiles (Memo1->Handle, False);
}


4) W zdarzeniu TApplicationEvents wybieramy OnMessage i wpisujemy, co poniżej:

void __fastcall TForm1::ApplicationEvents1Message(tagMSG &Msg,
bool &Handled)
{
  DWORD wParam = Msg.wParam;
  switch (Msg.message)
  {
  case WM_DROPFILES:
  {
    //Ilość przesyłanych plików
    int TotalNumberOfFiles = DragQueryFile ((HANDLE)wParam, 0xFFFFFFFF,                                                NULL, 0);
    for(int i=0; i<TotalNumberOfFiles; i++)
    {
    char * buffer;
    int nFileLength=0;
    //Dla każdego z plików pobież jego długość
    nFileLength = DragQueryFile ((HANDLE)wParam, i , NULL, 0)+1;
    buffer = new char[nFileLength];
    //Zapisz nazwe pliku do zmiennej buffer
    DragQueryFile ((HANDLE)wParam , i, buffer, nFileLength);
    Memo1->Lines->Add(buffer);
    delete buffer;
    }
  break;
  }
}
}


Prawda, że proste...


Autorem tekstu jest: Wojciech Bojewski
Materiał dodany przez użytkownika: _hador_