нажав кнопку DRAG перемещаю каждый выбранный рисунок по форме, но тут то и возникает загвоздочка,
какой бы рисунок я не выбирал перемещение происходит в обратном порядке их появления на форме.
Как можно сделать так чтобы перемещался тот рисунок на которы я клацаю мышкой.
Заранее спасибо.
:?:
Код: Выделить всё
(занести на форму 2 кнопки и поменять caption на PAINT и DRAG соответственно, так же разместить 1 EDIT,
и обязательно 1 пустой Image)
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
a0: TImage;
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
procedure a0MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure a0MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure a0MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormCreate(Sender: TObject);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
X0,Y0:integer;
flag:boolean;
ramka:Trect;
a:array of TImage;
z,n:integer;
i:byte;
implementation
uses StrUtils;
{$R *.dfm}
//процедуры для пустого Imega
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
i:=i-1;//если этого не поставить то возникает ошибка, т.к значение і больше, чем должно быть
if button = mbLeft then
begin
X0 := X;
Y0 :=Y;
ramka := a[i].BoundsRect;
flag := true;
end
end;
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if flag then
begin
Canvas.DrawFocusRect(ramka);
with ramka do
begin
left := left+X-X0;
right := right+X-X0;
top := top+Y-Y0;
bottom := bottom+Y-Y0;
X0 :=X;
Y0:=Y;
end;
Canvas.DrawFocusRect(ramka);
end;
end;
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Canvas.DrawFocusRect(ramka);
with a[i] do
begin
ramka.left:=ramka.left+X-X0;
ramka.top:=ramka.top+Y-Y0;
SetBounds(ramka.left,ramka.top,Width,Height);
BringToFront;
end;
flag := false;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
z:=0;
end;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
If z=1 then
begin
setlength(a,100);
i:=n;
inc(i);
a[i]:=TImage.Create(Form1);
a[i].Parent:=Form1;
a[i].Left:=X;
a[i].Top:=Y;
a[i].Transparent:=true;
a[i].Picture.LoadFromFile('but1.bmp');
a[i].AutoSize:=true;
a[i].Tag:=i;
a[i].Name:='server'+IntToStr(i);
edit1.Text:=a[i].Name;
n:=i;
end;
end;
//для кнопки PAINT
procedure TForm1.Button1Click(Sender: TObject);
begin
z:=1;
end;
//для кнопки DRAG
procedure TForm1.Button2Click(Sender: TObject);
begin
z:=2;
for i:=1 to n do
begin
a[i].OnMouseDown:=Image1MouseDown;
a[i].OnMouseMove:=Image1MouseMove;
a[i].OnMouseUp:=Image1MouseUp;
end;
end;
end.