Форум: "Media";
Текущий архив: 2005.02.06;
Скачать: [xml.tar.bz2];
ВнизОрганизация массива точек Найти похожие ветки
← →
LicProd (2004-10-25 23:12) [0]Суть программы состоит в привязке некоторой точки[GPImX,GPImY], находящейся на перемещаемой картинке (TMoveImage - компонетн для перемещания изображения), к точке[pnt1x,pnt1y] расположенной на экране. Привязка происходит когда точка[GPImX,GPImY] находится в квадрате точки[pnt1x,pnt1y] размеры квадрата = Stka
Вот код программы!unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, MoveImage, StdCtrls;
type
TForm1 = class(TForm)
Im: TMoveImage;
Shape1: TShape;
Label1: TLabel;
procedure ImMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormCreate(Sender: TObject);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
pnt1x,pnt1y,GPImX,GPImY,GPImX2,GPImY2,stka:integer;
implementation
{$R *.dfm}
procedure TForm1.ImMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
begin
//Первая липкая точка
if ((im.Left+GPImX)<pnt1x+stka)and(im.Top+GPImY<pnt1y+stka)
and((im.Left+GPImX)>pnt1x-stka)and(im.Top+GPImY>pnt1y-stka)
then begin
im.Left:=pnt1x-GPImX;
im.Top:=pnt1y-GPImY;
end;
//Вторая липкая точка
if ((im.Left+GPImX2)<pnt1x+stka)and(im.Top+GPImY2<pnt1y+stka)
and((im.Left+GPImX2)>pnt1x-stka)and(im.Top+GPImY2>pnt1y-stka)
then begin
im.Left:=pnt1x-GPImX2;
im.Top:=pnt1y-GPImY2;
end;
im.Canvas.Pixels[GPImX,GPImY]:=clred;
im.Canvas.Pixels[GPImX2,GPImY2]:=clred;
form1.Canvas.Pixels[pnt1x,pnt1y]:=clblue;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
stka:=8;
pnt1x:=250;pnt1y:=250;
form1.Canvas.Pixels[pnt1x,pnt1y]:=clred;
GPImX:=1;GPImY:=13;
GPImX2:=87;GPImY2:=13;
end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if (x<pnt1x+3)and(y<pnt1y+3)
and(x>pnt1x-3)and(y>pnt1y-3)
then begin
label1.Top:=y+25;
label1.Left:=x+10;
label1.Caption:="Точка: ["+inttostr(pnt1x)+", "+inttostr(pnt1y)+"]";
end;
end;
end.
Этот код программы реализует в цикле выполнение просчёта координат одной точки или 2-х и т.д., но от этого программа не будет автоматизирована и будет очень большой, тем более, что точки на картинке должен задавать пользователь.
(Программа РАБОЧАЯ! Сам делал, сам проверял! застрал только на этом вот вопросе)
А теперь вопрос!
Как мне с помощью массива точек реализовать более простой способ данной процедуры? Или может есть более конструктивные предложения!?
← →
LicProd (2004-10-25 23:23) [1]Заранее сделаю оговорку!
Вот такой код не предлагать! Тормоза страшные, хотя и работает.for i:=1 to 1000 do begin
if ((im.Left+GPImX[i])<pntx[i]+stka)and(im.Top+GPImY[i]<pnty[i]+stka)
and((im.Left+GPImX[i])>pntx[i]-stka)and(im.Top+GPImY[i]>pnty[i]-stka)
then begin
im.Left:=pntx[i]-GPImX[i];
im.Top:=pnty[i]-GPImY[i];
end;
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2005.02.06;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.043 c