|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
проблема с массивом TImage
создаю объект типа TImage при каждом нажатии левой кнопки мыши на форме(предварительно щёлкнув на кнопке PAINT),
нажав кнопку 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. |