Вниз
Скачать: 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.029 c
2-1163945821
windows
2006-11-19 17:17
2006.12.10
Определеить Handle процесса


2-1163808177
aleko
2006-11-18 03:02
2006.12.10
надстройка в Excel


3-1159945457
Roma L
2006-10-04 11:04
2006.12.10
Проблема с удалением данных в таблице Access


15-1164115777
просто человек
2006-11-21 16:29
2006.12.10
преобразование из pascal в блок-схему


15-1164221198
Beavercrazy
2006-11-22 21:46
2006.12.10
Если сделать полностью Flash сайт?




   Наверх