Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.10;
Скачать: CL | DM;

Вниз

Подмена перетаскиваемого объекта в 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.033 c
1-1162197747
Andrewk88
2006-10-30 11:42
2006.12.10
Подключение dll созданной в VS2k3


15-1163378672
Джо
2006-11-13 03:44
2006.12.10
Анимэ. "То" и "это".


15-1164028744
Prohodil Mimo
2006-11-20 16:19
2006.12.10
как настроить доступ к каталогам в MS Server 2003 ?


9-1140081963
Древолаз
2006-02-16 12:26
2006.12.10
GL Scene Холм и Танк


15-1164191127
miek
2006-11-22 13:25
2006.12.10
WinXP: запретить выход в инет