Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2002.09.26;
Скачать: [xml.tar.bz2];

Вниз

коорд. обьектов на рис.(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 вся ветка

Форум: "Media";
Текущий архив: 2002.09.26;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.006 c
1-85529
Демонов Е.В.
2002-09-13 13:26
2002.09.26
DragAllowFiles ???????????


4-85754
Soft(Unpowered Kiborg)
2002-08-10 11:06
2002.09.26
Version Info в Delphi проектах


7-85730
ПВВО
2002-07-08 14:40
2002.09.26
Звук


14-85667
AL2002
2002-08-30 11:00
2002.09.26
Есть у кого-нить прога


1-85557
deleon
2002-09-12 08:29
2002.09.26
Как получить контрольную сумму (CRC) функции?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский