Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Перемещение с PageControl на Frame2 [D7, WinXP]


Viktop ©   (2004-12-04 10:05:00) 

В своём приложении я перемещаю рисунки по форме с помощью следующих процедур:
implementation
{$R *.DFM}
var
 Form1: TForm1;
 x0, y0: integer;
 move: boolean;
 rec: TRect; //хранит параметры картинки

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
 if button<>mbLeft then
   move:=false
 else
 begin
   move:=true;
   x0:=x;
   y0:=y;
   rec:=image1.BoundsRect; //запоминаем контур картинки
 end;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
 if move then
 begin
   Form1.Canvas.DrawFocusRect(rec); //рисуем рамку
   with rec do
   begin
     left:=Left+x-x0;
     top:=Top+y-y0;
     right:=right+x-x0;
     bottom:=bottom+y-y0;
     x0:=x;
     y0:=y; // изменяем координаты
   end;
   Form1.Canvas.DrawFocusRect(rec); // рисуем рамку на новом месте
 end;
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
 Form1.Canvas.DrawFocusRect(rec);
 with image1 do begin
   setbounds(rec.left+x-x0,rec.top+y-y0,width,height); //перемещаем картинку
   move:=false;
 end;
end;

А теперь возникла необходимость перемещать компоненты с PageControl на Frame2. Подскажите, что надо изменить в коде.


KSergey   (2004-12-10 11:22:00) [1]

Чтобы сделать визуальное перемещение между WinControl'ами - надо фактически создать окно в размер перемещаемого объекта (TWinControl или какой-нибудь его наследник, панель, например - у нее как раз бордюра нет), лежащее поверх всех, с копией перемещаемого объекта на нем. Его уже и двигать (Left/Top) за мышкой, а не просто на канве рисовать, т.к. это разные окна, канва у них - разная. Ну и в конце окно это прятать, объект - переносить.


Viktop   (2004-12-10 11:02:00) [2]

to Sun bittern
А что там (в примере %Delphi%\Demos\Docking) ещё делается?
Если выставить все эти свойства, то:
1. Перемещение происходит не визуально (как указано выше)
2. Картинка перемещается только в левый верхний угол панели
3. Если картинку попробовать кинуть на форму, а не на Panel, то она [картинка] появится в отдельном окне, которое можно закрыть, что не есть хорошо.


Sun bittern   (2004-12-09 17:45:00) [3]

>> Это не подходит! В примере там просто фон меняется.

Очень заблужаетесь :)

У всех компонент выставить DragMode = dmAutomatic
У компонент которые могут принимать картинку DockSite = True
У TImage.DragKind = dkDock.

Все!


Viktop   (2004-12-06 17:48:00) [4]

Может вопрос непонятен? Могу и попроще. На форме имеются 2 панели (Panel1 и Panel2). На одной из них находится объект Image1. Надо визуально перетащить этот рисунок на другую панель.


Viktop   (2004-12-06 04:56:00) [5]

Это не подходит! В примере там просто фон меняется. А мне надо осуществить Drag&Drop с одного компонента формы на другой


Sun bittern   (2004-12-04 17:31:00) [6]

В принципе ДА! drag&drop.

Тогда гляньте примеры: %Delphi%\Demos\Docking


Viktop   (2004-12-04 11:06:00) [7]

Попробуте этот код и увидите как должно происодить перемещение (точнее у меня будет копирование, но это не столь важно).
В принципе ДА! drag&drop.


Sun bittern   (2004-12-04 10:20:00) [8]

>> перемещать компоненты с PageControl на Frame2
Не совсем ясно чего нужно. drag&drop?


Наверх

Титульная страница Поиск, карта сайта Написать письмо