![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перемещение с 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?