Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.11.2005, 16:33
eagle_ua eagle_ua вне форума
Прохожий
 
Регистрация: 22.11.2005
Сообщения: 3
Репутация: 10
Вопрос проблема с массивом 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.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:45.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter