4. Технология Drag-and-Drop (Разработка многомодульных интегрированных SDI-приложений), страница 2
Описание файла
Файл "4. Технология Drag-and-Drop" внутри архива находится в папке "Разработка многомодульных интегрированных SDI-приложений". Документ из архива "Разработка многомодульных интегрированных SDI-приложений", который расположен в категории "". Всё это находится в предмете "проектирование программного обеспечения автоматизированных систем" из 9 семестр (1 семестр магистратуры), которые можно найти в файловом архиве НИУ «МЭИ» . Не смотря на прямую связь этого архива с НИУ «МЭИ» , его также можно найти и в других разделах. Архив можно найти в разделе "остальное", в предмете "проектирование по автоматизированных систем" в общих файлах.
Онлайн просмотр документа "4. Технология Drag-and-Drop"
Текст 2 страницы из документа "4. Технология Drag-and-Drop"
// координаты точки (0,0) приводятся в соответствие с координатами экрана
p=Image1->ClientToScreen(Point(0,0));
temp.Left=p.x;
temp.Top=p.y;
// координаты точки (200,120) приводятся в соответствие с координатами экрана
p=Image1->ClientToScreen(Point(200,120));
temp.Right=p.x;
temp.Bottom=p.y;
// перевести компонент Image1 в состояние плавающего окна
Image1->ManualFloat(temp);
// встроить Image1 в Form1
Image1->ManualDock(Form1,NULL,alLeft);
// перевести компонент Image2 в состояние плавающего окна
Image2->ManualFloat(Rect(Form1->Left+25,Form1->
Top+40,Form1->Left+125,Form1->Top+140));
// встроить Image2 в Form1
Image2->ManualDock(Form1,NULL,alLeft);
}
События возникающие при перетаскивании и встраивании объектов
Событие OnGetSiteInfo возникает в начале процесса перемещения и сообщает всем приемникам о том, какой именно управляющий элемент перемещается (параметр Tcontrol *DockClient), TRect &InfluenceRect – прямоугольник рамки перетаскиваемого объекта. В логическую переменную CanDock приемник может поместить свое решение о принятии объекта.
Например, форма разрешает работу только с конкретной панелью Panel1:
void __fastcall TForm1::FormGetSiteInfo(TObject *Sender,
TControl *DockClient, TRect &InfluenceRect, TPoint &MousePos,
bool &CanDock)
{
CanDock= DockClient == Panel1;
}
Событие OnDockOver возникает и повторяется, когда в поле приемника входит курсор мыши, буксирующий клиента. Параметр Source типа TDragDockObject определяет перетаскиваемый компонент, логическая переменная Accept (по умолчанию true) сигнализирует о необходимости приема. Свойство DockRect объекта Source описывает перемещаемую рамку, ею можно управлять, например, изменяя ее размеры.
Событие OnDockDrop возникает в момент окончания перетаскивания клиента и определяет размещение объект Source в приемнике.
Событие OnEndDock сообщает клиенту об окончании процесса его перемещения.
Задание
Разработать два приложения, которые позволяют освоить технологию Drag-and-Drop:
-
Расположить на форме несколько компонент Shape, придать им форму всевозможных геометрических фигур. При перемещении фигуры в некоторую область на форме должны производиться вычисления ее площади и периметра, а также проявляться имя перемещенного компонента (Name), свойство Shape, имя класса объекта, имя его родительского класса.
-
Расположить на форме два компонента Memo (Memo1 и Memo2) и две кнопки (Button1,Button2). Организовать передачу информации между Memo1 Memo2 тремя разными способами: через буфер обмена, копированием информации между Memo-компонентами, с использованием Drog-and_Drop. Проверить будет ли работать передача информации, если компоненты расположены на двух разных формах одного и того же приложения.
Для знакомства с технологией Drag-and-Doc:
-
Проделайте упражнения рассмотренные ранее в этой главе над формой с панелью Panel1 и двумя картинками Image1 Image2.
-
Создайте новое приложение с двумя формами. На первую форму поместите кнопки Button1 и Button2. Пусть по щелчку на Button2 открывается вторая форма:
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Form2->Show();
}
Кнопкe Button1 сделайте перемещаемым клиентом, а вторую форму контейнером. Протестируйте приложение и последите за поведением кнопки. На рисунке представлено подобное приложени в момент, когда кнопка стала плавающим окном.
В обработчик события кнопки был при этом помещен следующий код:
void __fastcall TForm1::Button1Enter(TObject *Sender)
{
Form1->Canvas->Brush->Color=RGB(random(255),random(255),random(255));
Form1->Canvas->Ellipse(30,30,150,120);
}