Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Drag & Dock

4.9K
07 февраля 2004 года
bio
14 / / 07.02.2004
Кто подскажет ? Уже неделю б'юсь...

На форме имеем Image1 и Image2 с разными
Picture->Bitmap (картинками). Вкл. им Drag & Dock св-ва. Необходимо чтобы при перетаскивании Image1 и опускании его над Image2 они обменивались картинками. Вопрос не в том как это сделать, а как найти Image2, ибо при клике на Image1 и его перетаскивании в событии [COLOR=blue]OnEndDock(TObject *Sender, TObject *Target, int X, int Y)[/COLOR]
Sender это Image1, Target это Form1;
в событии [COLOR=blue]ONStartDock(TObject *Sender, TDragDockObject *&DragObject)[/COLOR] тоже нет указателя на Image2 (если можно вкратце, что здесь такое DragObject);
событие [COLOR=blue]ONDragOver(TObject *Sender, TObject *Source, int X, int Y, TDragState State, bool &Accept)[/COLOR] где можно получить указатель на Image2, не наступает вообще ;
[COLOR=blue]OnMouseMove(TObject *Sender, TShiftState Shift, int X, int Y)[/COLOR] тоже не наступает.

Не знаю как и где найти Image2 ????
415
10 февраля 2004 года
SLA
274 / / 08.08.2003
Цитата:
Originally posted by bio
ибо при клике на Image1 и его перетаскивании в событии [COLOR=blue]OnEndDock(TObject *Sender, TObject *Target, int X, int Y)[/COLOR]
Sender это Image1, Target это Form1;



Ну так пусть будет Form1. Ты же получаешь X и Y.

if (X >= Image2->Left && X < Image2->Left + Image2->Width && Y >= Image2->Top && Y < Image2->Top + Image2->Height)
{
// Image1 брошен на Image2.
}

4.9K
16 февраля 2004 года
bio
14 / / 07.02.2004
Цитата:
Originally posted by SLA


Ну так пусть будет Form1. Ты же получаешь X и Y.

if (X >= Image2->Left && X < Image2->Left + Image2->Width && Y >= Image2->Top && Y < Image2->Top + Image2->Height)
{
// Image1 брошен на Image2.
}




Спасибо !!!

Я, наверное, неправильно сформулировал свой вопрос: как обменяться Bitmap-ами
двум Image-ям на форме не вопрос, вернее спасибо за ответ (я и этого не знал) .
Ну а если Image-и создаются динамически и их более 100 штук, то согласно твоему
решению в событии OnEndDock нужно запустить цикл
for (int i=0; i<к-ва Image-ей; i++)
if (X >= Image->Left && X < Image->Left + Image->Width && Y >= Image->Top && Y < Image-> Top + Image->Height)
{
// Image1 брошен на Image.
}
Вроде ясно, но почему так "много" ручной работы.
В технологии Drag-and-Drop все это делать не нужно т.к. в ONDragOver есть указатель на Image. Почему Drag-and-Drop так отличается от
Drag-and-Dock?
//----------------------------------------------
И еще, SLA, может подскажешь, как при перетаскивании мышью Image сделать так, чтобы перетаскивался весь Image с картинкой а не только его рамка как при Drag-and-Dock. Эту задачу я пытался решить так:
void __fastcall TForm1::Image1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
if(Button != mbLeft) return;
X0 = X;
Y0 = Y;
move = true;
Image1 -> BringToFront();
}
//---------------------------------------------
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
if (move)
{
Image1-> SetBounds(Image1->Left + X - X0, Image1->Top + Y - Y0, Image1->Width, Image1->Height);
}
}
//------------------------------------------------
void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
move = false;
}
//-----------------------------------------------
где Х0, Y0 начальные координаты Image1. При таком решении изображение на Image1 довольно сильно мигает. Я слышал, что такие задачи решаются с помощью bitmap в памяти и функций Windows ???

Заранее благодарю, bio.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог