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

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

Подмена перетаскиваемого объекта в OnStratDrag [D7, XP]


Michael69 ©   (2006-11-23 21:53:00) 

Здравствуйте. А как подсунуть при OnStartDrag какой-то свой объект? Например созданный непосредственно при начале перетаскивания.

Другими словами мне надо что-бы пользователь начал перетаскивать TListBox и на другой компонент упал например TPanel.


ЮЮ   (2006-11-24 10:26:00) [1]

Ничего подменять не надо. Даже установив у перемещаемого объекта DragMode = dmAutomatic не получишь автоматического его переноса, если это не реализовано в самом компоненте.
Достатоточно
 1) установить DragMode = dmAutomatic для запуска механизма Drag&Drop. Теперь при попытке потащить узреешь значок "нельзя поместить"
 2) Написать обработчики OnDragOver у компонентов, которые могут "принять" объект
 3) В обработчике OnDragDrop сделать то, что хотел, хоть переместить исходный объект (Source), коть создать его копию или ещё чего:

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ExtCtrls;

type
 TForm1 = class(TForm)
   Panel1: TPanel;
   procedure FormCreate(Sender: TObject);
   procedure Panel1StartDrag(Sender: TObject;
     var DragObject: TDragObject);
   procedure FormDragOver(Sender, Source: TObject; X, Y: Integer;
     State: TDragState; var Accept: Boolean);
   procedure FormDragDrop(Sender, Source: TObject; X, Y: Integer);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 Panel1.Caption := 'Утащи меня отсюда :)';
 Panel1.DragMode := dmAutomatic;
end;

procedure TForm1.Panel1StartDrag(Sender: TObject;
 var DragObject: TDragObject);
begin
 Caption := 'Panel1StartDrag';
end;

procedure TForm1.FormDragOver(Sender, Source: TObject; X, Y: Integer;
 State: TDragState; var Accept: Boolean);
begin
 Accept := Source = Panel1;
end;

procedure TForm1.FormDragDrop(Sender, Source: TObject; X, Y: Integer);
var
 p: TPanel;
begin
 p := TPanel.Create(Self);
 p.Parent := Self;
 p.Left := x;
 p.Top := y;
 p.Caption := IntToStr(Tag);
 Tag := Tag + 1;
 Caption := Source.ClassName +  ' ' + Sender.ClassName;
end;

end.
 


Бугага   (2006-11-24 04:22:00) [2]

Тащишь хлеб, получаешь пиво :)


KilkennyCat   (2006-11-24 00:25:00) [3]

Забавно. Это игра "Угадай, что тащищь?" ?


Michael69   (2006-11-23 23:23:00) [4]

up


Наверх

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