Текущий архив: 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.48 MB
Время: 0.009 c