Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.037 c
9-1139484128
pavel_guzhanov
2006-02-09 14:22
2006.12.10
3Dmax и Delphi


2-1164285034
alkin
2006-11-23 15:30
2006.12.10
На форме есть компонент ListView


11-1140168494
tigra
2006-02-17 12:28
2006.12.10
memo1


15-1164106468
zdm
2006-11-21 13:54
2006.12.10
IDSmtp


15-1163791359
Kolan
2006-11-17 22:22
2006.12.10
А бывает китайско-русский переводчик?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский