Форум: "Начинающим";
Текущий архив: 2016.07.24;
Скачать: [xml.tar.bz2];
Внизприлипание Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c