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

Вниз

Организация массива точек   Найти похожие ветки 

 
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 вся ветка

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

Наверх




Память: 0.47 MB
Время: 0.045 c
9-1099502958
FRick
2004-11-03 20:29
2005.02.06
GLScene + скрипты!


3-1105203859
opoloXAI
2005-01-08 20:04
2005.02.06
Обновление данных в таблице при подключении через TADOTAble.


3-1105169378
Dell3r
2005-01-08 10:29
2005.02.06
Скролинг


3-1103385020
Piter
2004-12-18 18:50
2005.02.06
Скорость выборки


3-1105078026
Yurisimus
2005-01-07 09:07
2005.02.06
Как перехватить значение с GeneratorField