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

Вниз

Drag & Drop   Найти похожие ветки 

 
Nailspb ©   (2006-01-20 01:25) [0]

Уважаемые Профессионалы,

Как сделать Драг и Дроп простых графических объектов ( например Shape" ов) так, как это сделано в том же самом Делфи с обычными компонентами на форме ? то есть квадратике при фокусе, контрл ц, контрл в и тд? Вообщем так же как и в кореле.

СПАСИБО ВСЕМ ЗА ОТВЕТЫ.


 
Gero ©   (2006-01-21 00:42) [1]

А в чем проблема?


 
Nailspb ©   (2006-01-22 22:51) [2]

Проблема ;))) ?

А как это сделать ????


 
Gero ©   (2006-01-22 23:01) [3]

С помощью Delphi.


 
Gero ©   (2006-01-22 23:03) [4]

Или с помощью других программистов, за деньги, естественно.


 
Nailspb ©   (2006-01-23 21:42) [5]

ну Gero ты просто мозг !!!
А я думаешь кто ?
Просто спрашиваю у кого какие мысли ....


 
Gero ©   (2006-01-23 23:43) [6]

> Просто спрашиваю у кого какие мысли

А я вот как раз отвечаю.


 
Nailspb ©   (2006-01-24 01:41) [7]

Здесь есть ктонибудь кто действительно чтонибудь понимает, а не просто полные чайники ?


 
Gero ©   (2006-01-24 01:44) [8]

http://ln.com.ua/~openxs/articles/smart-questions-ru.html


 
misha_gr   (2006-01-24 10:48) [9]

В Дельфи есть пример, C:\Program Files\Borland\DelphiXXX\Demos\Docking.
Правда работает довольно криво, но для начала хватит.
Ну а как войдешь во вкус, лезь в ShellApi, потом расскажешь, чего достиг )))


 
Nailspb ©   (2006-01-26 16:28) [10]

Хорошо.
Допустим у тебя есть 100 TShape на форме. Как передвигать любой из них по форме ? Не прописывать же 100 раз для каждого Shape все Onmouse... и тд ?


 
grouzd[E]v ©   (2006-01-26 16:33) [11]


> Не прописывать же 100 раз для каждого Shape все Onmouse...
> и тд ?

Присвоить всем один и тот же и почитать про Sender

---
... we are walking on a thin line and you better avoid the risk ...


 
Nailspb ©   (2006-01-29 00:10) [12]

Напишите пожалуйста поподробнее, идея понятно, реализация не очень...


 
Yuraspb   (2006-02-01 14:03) [13]

Как прочитать про Sender ?


 
misha_gr   (2006-02-01 17:02) [14]

Таскание TShape по форме - это не Drag"n"Drop.

Создаешь для одной TShape три события для OnMouse...
для всех остальных TShape назначаются уже существующие события.
это можно сделать в Object Inspertor"е, смотри внимательней. А лучше
любую книжку почитай по Delphi, тогда и подобные вопросы возникать не будут.


 
misha_gr   (2006-02-01 17:06) [15]

Про Sender... из обработчика события ты к компоненту обращаешься не как к Shape1, например, а как к (Sender as TShape), или (Sender as TControl).
Типа так:

procedure TForm1.Shape1MouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
begin
 if FDragComponent then with (Sender as TControl) do begin
   Left := Left - FLastPosition + X;
 end;
end;

Тогда можно смело разным компонентам назначать один обработчик события.


 
Nailspb ©   (2006-02-02 17:28) [16]

Пробовал.
Не пашет.


 
easy ©   (2006-02-03 14:36) [17]

усё пашет.
держи, двигай..

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ExtCtrls;

type
 TForm1 = class(TForm)
   procedure Shape1MouseDown(Sender: TObject; Button: TMouseButton;
     Shift: TShiftState; X, Y: Integer);
   procedure Shape1MouseMove(Sender: TObject; Shift: TShiftState; X,
     Y: Integer);
   procedure FormCreate(Sender: TObject);
   procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
 private
   { Private declarations }
   sLeft, sTop: integer;
   procedure createSapes(const count: integer);
   procedure freeShapes;
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 createSapes(500);
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
 freeShapes;
end;

procedure TForm1.createSapes(const count: integer);
var
 i: integer;
begin
 color := clBlack;
 borderstyle := bsSingle;
 for i := 0 to count do begin
   with TShape.Create(self) do begin
     width := random(30) + 40;
     height := width;
     left := random(self.Width - width);
     top := random(self.Height - width);
     brush.color := RGB(random(255), random(255), random(255));
     shape := stCircle;
     onMouseMove := Shape1MouseMove;
     onMouseDown := Shape1MouseDown;
     parent := self;
   end;
 end;
end;

procedure TForm1.freeShapes;
var
 i: integer;
begin
 for i := ControlCount - 1 downto 0 do begin
   if Controls[i].ClassName = "TShape" then
     (Controls[i] as TShape).Free;
 end;

end;

procedure TForm1.Shape1MouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 sLeft := X;
 sTop := Y;
 (Sender as TShape).BringToFront;
end;

procedure TForm1.Shape1MouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
begin
 if not (ssLeft in Shift) then exit;
 with Sender as TShape do begin
   Left := Left - sLeft + X;
   Top := Top - sTop + Y;
 end;
end;

end.


 
Nailspb ©   (2006-02-03 16:52) [18]

Слушай, неужели это заработает ;)))
Прям не верится ... ;))



Страницы: 1 вся ветка

Текущий архив: 2006.07.16;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.029 c
15-1150282525
dexis
2006-06-14 14:55
2006.07.16
Что-та типа splitterа, раскрывающий/скрывающий панель оним кликом


15-1150355744
DillerXX
2006-06-15 11:15
2006.07.16
Программа для анимирования картинок.


2-1151236718
Gizza
2006-06-25 15:58
2006.07.16
Запуск файла


15-1150388813
Nobody_1988
2006-06-15 20:26
2006.07.16
Стоит ли разбираться в .NET?


2-1151566950
KaLLeKa
2006-06-29 11:42
2006.07.16
Как разместить компонент внутри другого компонента?