Пример использования TDragObject.Компилятор: C++ Builder Этот пример демонстрирует возможность перетаскивания (drag & drop) из ListBox1 в Edit1. Создайте форму : Form1 Установите dragMode в dmAutomitic у ListBox, Edit и Form. Вставьте несколько строк в ListBox1. В Imagelist установите Width и Height в 32x32. Загрузите в него один битмап. В файле .h (Unit1.h) формы добавьте следующее: //----------------------------------------------------------------------
class TMyDragObject : public TDragObject
{
TCustomImageList* __fastcall GetDragImages(void);
public:
String Valeur;
__fastcall TMyDragObject(void);
};
//----------------------------------------------------------------------
В файл cpp добавьте следующий код: //----------------------------------------------------------------------
__fastcall TMyDragObject::TMyDragObject(void)
{
TDragObject();
}
//----------------------------------------------------------------------
TCustomImageList* __fastcall TMyDragObject::GetDragImages(void)
{
return(Form1->ImageList1);
}
В событие FormCreate добавьте следующий код: //----------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
ControlStyle << csDisplayDragImage;
Edit1->ControlStyle << csDisplayDragImage;
ListBox1->ControlStyle << csDisplayDragImage;
}
//----------------------------------------------------------------------
У списка StartDrag должно выглядеть следующим образом: //----------------------------------------------------------------------
void __fastcall TForm1::ListBox1StartDrag(TObject *Sender,
TDragObject *&DragObject)
{
TListBox *tlb;
TMyDragObject *tm;
tlb = dynamic_cast<TListBox *>(Sender);
if (tlb != NULL) {
if (tlb->ItemIndex != -1) {
tm = new TMyDragObject();
tm->Valeur = tlb->Items->Strings[tlb->ItemIndex];
DragObject = tm;
}
}
}
//----------------------------------------------------------------------
У окошка редактирования Drag Over должно выглядеть следующим образом: //----------------------------------------------------------------------
void __fastcall TForm1::Edit1DragOver(TObject *Sender, TObject *Source,
int X, int Y, TDragState State, bool &Accept)
{
Accept = true;
}
//----------------------------------------------------------------------
Событие Edit1DragDrop будет: //----------------------------------------------------------------------
void __fastcall TForm1::Edit1DragDrop(TObject *Sender, TObject
*Source, int X,
int Y)
{
TMyDragObject *tmydrag;
tmydrag = dynamic_cast<TMyDragObject *>(Source);
if (tmydrag) {
Edit1->Text = tmydrag->Valeur;
}
}
|