Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.032 c
14-1105709784
*Pavel
2005-01-14 16:36
2005.02.06
Из "Искры" возгорелось пламя :(


3-1104828677
Гость
2005-01-04 11:51
2005.02.06
SQL server 2000


1-1106656658
Leon1
2005-01-25 15:37
2005.02.06
Паненель с иконками окошек?


14-1105821763
pika
2005-01-15 23:42
2005.02.06
API и PHP !!!


1-1106469959
Эдди
2005-01-23 11:45
2005.02.06
richedit цвет строки




   Наверх