Пример использования TDragObject.
Компилятор: C++ Builder
Этот пример демонстрирует возможность
перетаскивания (drag & drop) из ListBox1 в Edit1.
Создайте форму : Form1
Добавьте список : ListBox1
добавьте EditBox : Edit1
и TImageList: ImageList1.
Установите 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;
}
}
|