Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2016.07.24;
Скачать: CL | DM;

Вниз

прилипание   Найти похожие ветки 

 
Mass ©   (2014-10-10 16:36) [0]

Всем привет. Хочу организовать движение 4 картинок по форме и "прилипание" к "ячейкам". Картинки двигаются, но прилипание не работает.

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, jpeg, ExtCtrls, Math, StdCtrls, Mask;

type
 TForm1 = class(TForm)
   img1: TImage;
   lbl1: TLabel;
   img2: TImage;
   img3: TImage;
   img4: TImage;
   bvl1: TBevel;
   bvl2: TBevel;
   bvl3: TBevel;
   bvl4: TBevel;

   procedure img1MouseDown(Sender: TObject; Button: TMouseButton;
     Shift: TShiftState; X, Y: Integer);
   procedure img1MouseUp(Sender: TObject; Button: TMouseButton;
     Shift: TShiftState; X, Y: Integer);
   procedure img1MouseMove(Sender: TObject; Shift: TShiftState; X,
     Y: Integer);
   procedure FormCreate(Sender: TObject);



 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 k:Boolean;
 x0,y0:Integer;
 Pic: array[1..4] of TImage;
 b:array[1..4] of TBevel;
 p:byte;

implementation

{$R *.dfm}

procedure TForm1.img1MouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
k:=True;
x0:=X;
y0:=Y;
end;

procedure TForm1.img1MouseUp(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 k:=False;
end;

procedure TForm1.img1MouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
var j:Byte;
begin

 if k=True then
 begin
  (Sender as TImage).Left:=(Sender as TImage).Left+x-x0;
  (Sender as TImage).Top:=(Sender as TImage).Top+y-y0;
  for p:=1 to 4 do
  begin
  if (((Sender as TImage).Left-b[p].Left) div 10=1) and (((Sender as TImage).Top-b[p].Top) div 10=1) then
  begin
    k:=False;
    (Sender as TImage).Left:=b[p].Left;
    (Sender as TImage).Top:=b[p].Top;
  end;
  end;
 end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var i:byte;
begin
For i:=0 To Form1.ComponentCount-1 Do
If (Form1.Components[i] Is TImage) Then
begin
Pic[i]:=(Form1.Components[i] As TImage);
Pic[i].OnMouseDown:=img1MouseDown;
Pic[i].OnMouseMove:=img1MouseMove;
Pic[i].OnMouseUp:= img1MouseUp;
end
else
if (Form1.Components[i] Is TBevel) Then
 b[p]:=(Form1.Components[i] as TBevel);
end;
end.


 
Советник ©   (2014-10-10 17:28) [1]

>> b[p]:=(Form1.Components[i] as TBevel);
переменная p чему равна?


 
Советник ©   (2014-10-10 17:29) [2]

ПС
куда подевалось цитирование?


 
Mass ©   (2014-10-10 18:46) [3]


> переменная p чему равна?

заменил b[p] на b[i]. т.к. p никакой функции не выполняет. в результате картинки прилипают друг к другу, а не к ячейкам.

> куда подевалось цитирование?

виноват


 
Советник ©   (2014-10-11 12:43) [4]

i не годится
инициализируй p где-нибудь в начале процедуры (p:=1)
и увеличивай значение после каждого присваивания


 
Mass ©   (2014-10-11 13:46) [5]

Спасибо за помощь, проблему решил немного по-другому
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, jpeg, ExtCtrls, Math, StdCtrls, Mask;

type
 TForm1 = class(TForm)
   img1: TImage;
   lbl1: TLabel;
   img2: TImage;
   img3: TImage;
   img4: TImage;
   bvl1: TBevel;
   bvl2: TBevel;
   bvl3: TBevel;
   bvl4: TBevel;

   procedure img1MouseDown(Sender: TObject; Button: TMouseButton;
     Shift: TShiftState; X, Y: Integer);
   procedure img1MouseUp(Sender: TObject; Button: TMouseButton;
     Shift: TShiftState; X, Y: Integer);
   procedure img1MouseMove(Sender: TObject; Shift: TShiftState; X,
     Y: Integer);
   procedure FormCreate(Sender: TObject);



 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 k:Boolean;
 x0,y0:Integer;
 Pic: array[1..4] of TImage;
 b:array[1..4] of TBevel;

implementation

{$R *.dfm}

procedure TForm1.img1MouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
k:=True;
x0:=X;
y0:=Y;
end;

procedure TForm1.img1MouseUp(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 k:=False;
end;

procedure TForm1.img1MouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
var p:Byte;
begin
 if k=True then
 begin
  (Sender as TImage).Left:=(Sender as TImage).Left+x-x0;
  (Sender as TImage).Top:=(Sender as TImage).Top+y-y0;
  for p:=0 to 4-1 do
  begin
  if (((Sender as TImage).Left-b[p].Left) div 10=1) and (((Sender as TImage).Top-b[p].Top) div 10=1) then
  begin
    k:=False;
    (Sender as TImage).Left:=b[p].Left;
    (Sender as TImage).Top:=b[p].Top;
  end;
  end;
 end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var i,p:byte;
begin
For i:=0 To Form1.ComponentCount-1 Do
If (Form1.Components[i] Is TImage) Then
begin
Pic[i]:=(Form1.Components[i] As TImage);
Pic[i].OnMouseDown:=img1MouseDown;
Pic[i].OnMouseMove:=img1MouseMove;
Pic[i].OnMouseUp:= img1MouseUp;
end;
for p:=0 To Form1.ComponentCount-1 do
if (Form1.Components[p] Is TBevel) Then
  b[p]:=(Form1.Components[p] as TBevel);

end;
end.




Страницы: 1 вся ветка

Текущий архив: 2016.07.24;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.014 c
2-1414065182
Kettle
2014-10-23 15:53
2016.07.24
Присвоение свойству OLE объекта значения NULL


2-1413879971
Alex_C
2014-10-21 12:26
2016.07.24
Своя отрисовка TMemo


15-1441978253
Torry
2015-09-11 16:30
2016.07.24
torry.net


2-1412950706
AntonArm
2014-10-10 18:18
2016.07.24
Xe7 и Thread


15-1445020595
K-1000
2015-10-16 21:36
2016.07.24
Direct3D в Delphi