Учись программированию на C++ Builder бесплатно!

Описание


Событие OnDragDrop наступает в момент отпускания перетаскиваемого компонента над данным компонентом. В обработчике события надо описать, что в этот момент должно произойти. Параметр Source соответствует перетаскиваемому объекту, а параметр Sender - объекту, над которым объект был отпущен. Параметры X и Y содержат координаты позиции курсора мыши над компонентом в системе координат клиентской области этого компонента.

Классы


TControl

Определение


typedef void (__closure *TDragDropEvent)(System:TObject* Sender, System::TObject* Source, int X, int Y);
__property TDragDropEvent OnDragDrop

Пример


Пусть на форме имеется несколько списков типа TListBox и нужно позволить пользователю перемещать строки из одного списка в другой. Это можно сделать следующим образом.
Во всех списках задаются значения свойств DragMode равные dmAutomatic. Это обеспечивает автоматическое начало перетаскивания.
Далее для одного из списков пишется обработчик события OnDragOver:

void __fastcall TForm1::ListBox1DragOver(TObject *Sender,TObject *Source, int X, int Y, TDragStatS State, bool SAccept)
{
Accept = Source->ClassNameIs("TListBox");
}

Этот обработчик указывает, что на данный компонент можно перетаскивать объекты типа TListBox.
Во всех остальных списках в событии OnDragQver указывается этот же обработчик.
Далее для одного из списков пишется обработчик события OnDragDrop:

void __fastcall TForm1::ListBox1DragDrop(TObject *Sender,TObject *Source, int X, int Y)
{
TListBox *S = (TListBox *)Source;
((TListBox*)Sender)->Items->Add(S->Items->Strings[S->ItemIndex]);
S->Items->Delete(S->ItemIndex);
}

Первые два оператора обработчика добавляют в список строку, выделенную в списке-источнике. Если пишется не универсальный обработчик, а предназначенный только для данного компонента, то первый оператор можно удалить, а во втором ((TListBox*)Sender) и S заменить на имя компонента ListBox1. Третий оператор удаляет перенесенную строку из источника (если требуется не перенос, а только копирование строк из одного списка в другой, то этот оператор не нужен).

Во всех остальных списках в событии OnDragDrop указывается этот же обработчик. После этого, заполнив списки, можно запускать приложение. Пользователь сможет перетаскивать строки между любыми имеющимися списками.


Поиск по сайту