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

Вниз

коорд. обьектов на рис.(Polygon) как в выводить надпись над ними   Найти похожие ветки 

 
PSYS ©   (2002-05-27 01:38) [0]

Есть координаты обьектов на рисунке(Canvas.Polygon) как в выводить надпись над ними когда на них кликаешь мышкой?

Можно сказать по другому как опредилть что я в нужной выделенной области?


 
MBo ©   (2002-05-27 06:34) [1]

PtInRegion


 
PSYS ©   (2002-05-27 13:20) [2]

в хелпе по делфям ненашел.


 
MBo ©   (2002-05-27 13:25) [3]

WinSDK help
но надо будет создавать region для каждого polygon.
Есть формулы/функции для определения, лежит ли точка внутри многоугольника, но, если не ошибаюсь, только для выпуклых.


 
PSYS ©   (2002-05-27 23:09) [4]

эх нету winsdl helpА, куплю где-нить.
а пример не можешь изнего кинуть?


 
MBo ©   (2002-05-28 07:46) [5]

хелп SDK входит в поставку Delphi, скорее всего, ты его просто не установил, либо у тебя урезанный комплект. online- msdn.microsoft.com . с примерами там туго.

вот еще нашел.

Can anyone help me with detecting if the screen coordinates that a user has clicked on lies within a defined polygon?


The code below is from Wm. Randolph Franklin with some minor modifications for speed. It returns 1 for strictly interior points, 0 for strictly exterior, and 0 or 1 for points on the boundary.



function PointInPolygonTest(x, y: Integer; aList: Array of TPoint): Boolean;
var
L, I, J: Integer;

function xp(aVal: Integer): Integer;
begin
Result := PPoint(@aList[aVal]).X;
end;

function yp(aVal: Integer): Integer;
begin
Result := PPoint(@aList[aVal]).Y;
end;

begin
Result := False;
L := Length(aList) ;
if L = 0 then
exit;
J := L - 1;
for I := 0 to L - 1 do
begin
if ((((yp(I) <= y) and (y < yp(J))) or ((yp(J) <= y) and (y < yp(I)))) and
(x < (xp(J) - xp(I)) * (y - yp(I)) / (yp(J) - yp(I)) + xp(I))) then
Result := not Result;
J := I;
end;
end;

Tip by John Hutchings


 
MBo ©   (2002-05-28 08:24) [6]

пример использования rgn
procedure TForm1.Button1Click(Sender: TObject);
var rgn:hRgn;
br:TBrush;
pts:array[0..6] of TPoint;
x1,y,x2,deltax,deltay:integer;
begin
x1:=100;
x2:=400;
y:=200;
deltax:=5;
deltay:=100;
pts[0].x:=x1; pts[0].y:=y;
pts[1].x:=x1+deltax; pts[1].y:=y-deltay;
pts[2].x:=x2-deltax; pts[2].y:=y-2*deltay;
pts[3].x:=x2; pts[3].y:=y;
pts[4].x:=x2-deltax; pts[4].y:=y+2*deltay;
pts[5].x:=x1+deltax; pts[5].y:=y+deltay;
pts[6].x:=x1; pts[6].y:=y;

BeginPath(canvas.Handle);
PolyBezier(canvas.Handle,pts,7);
EndPath(canvas.Handle);
rgn:=PathToRegion(Canvas.Handle);
Canvas.brush.Color:=clRed;
FillRgn(Canvas.handle,Rgn,Canvas.Brush.Handle);
DeleteObject(rgn);
end;


 
PSYS ©   (2002-05-29 02:06) [7]

буду пробовать. большой сенкс.



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

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

Наверх




Память: 0.48 MB
Время: 0.011 c
1-85564
3asys
2002-09-13 14:59
2002.09.26
Проблема с TPopupMenu на TRxRichEdit


3-85335
borg
2002-09-04 13:06
2002.09.26
bd


14-85699
EAlexander
2002-08-29 16:13
2002.09.26
Delphi 7 можно скачать с Borland.com


3-85385
nick_vstu
2002-09-05 10:41
2002.09.26
TDBGrid. Отключить возможность редактирования какого-то столбца?


1-85548
ЮРИЙ_К
2002-09-12 10:21
2002.09.26
Формирование документа по шаблону форы