Форум: "Начинающим";
Текущий архив: 2006.12.10;
Скачать: [xml.tar.bz2];
ВнизПодмена перетаскиваемого объекта в OnStratDrag Найти похожие ветки
← →
Michael69 (2006-11-23 21:53) [0]Здравствуйте. А как подсунуть при OnStartDrag какой-то свой объект? Например созданный непосредственно при начале перетаскивания.
Другими словами мне надо что-бы пользователь начал перетаскивать TListBox и на другой компонент упал например TPanel.
← →
Michael69 (2006-11-23 23:23) [1]up
← →
KilkennyCat © (2006-11-24 00:25) [2]Забавно. Это игра "Угадай, что тащищь?" ?
← →
Бугага © (2006-11-24 04:22) [3]Тащишь хлеб, получаешь пиво :)
← →
ЮЮ © (2006-11-24 10:26) [4]Ничего подменять не надо. Даже установив у перемещаемого объекта 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.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.12.10;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.049 c