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