Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблема с массивом TImage 
:(
    Опции темы
eagle_ua
  Дата 22.11.2005, 15:50 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











создаю объект типа 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.


smile smile smile
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0498 ]   [ Использовано запросов: 19 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.