Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.034 c
15-1163744578
@Ujin
2006-11-17 09:22
2006.12.10
Кто-нибудь натыкался на исходники paxScript?


6-1152805949
Георгий А.
2006-07-13 19:52
2006.12.10
Как заставить перегрузиться сетевую карту


1-1161710150
7D7
2006-10-24 21:15
2006.12.10
Как узнать объем памяти для данных?


15-1163766793
MikePetrichenko
2006-11-17 15:33
2006.12.10
gmail


15-1163983409
Ру
2006-11-20 03:43
2006.12.10
Он-лайн переводчики сайтов. С русского на инглиш Подскажите?




   Наверх