12 个解决方案
#1
去找一个delphi 图像热点应用的例子吧.
#2
不规则图形的建立:
procedure TForm1.FormCreate(Sender: TObject);
var
thepoint:array [1..8] of tpoint;//存储多边形顶点坐标
count:integer;
pointnum:array [1..2] of integer;
begin
//四边形顶点坐标,首末点封闭
thepoint[1]:=point(135,99);
thepoint[2]:=point(105,183);
thepoint[3]:=point(129,201);
thepoint[4]:=point(188,92);
thepoint[5]:=point(135,99);
count:=5;//四边形顶点数目,首末点为一点
fourE_rgn:=CreatePolygonRgn(thepoint,count,ALTERNATE);//生成四边形(多边)区域,
form1.Canvas.Brush.Color:=clgreen; //api 具体看msdn
//form1.Canvas.Pen.Color:=clred;
//FrameRgn(getdc(0),foure_rgn,form1.Canvas.Brush.Handle,100,100);
paintrgn(getdc(form1.Handle),foure_rgn);
elli_rgn:=CreateEllipticRgn(64,221,231,263);// 生成椭圆形区域
//第一个三角形顶点坐标
thepoint[1]:=point(118,67);
thepoint[2]:=point(32,28);
thepoint[3]:=point(17,90);
thepoint[4]:=point(118,67);
//第二个三角形顶点坐标
thepoint[5]:=point(155,44);
thepoint[6]:=point(202,91);
thepoint[7]:=point(277,44);
thepoint[8]:=point(155,44);
pointnum[1]:=4;//第一个三角形顶点数目
pointnum[2]:=4;//第二个三角形顶点数目
count:=2;//三角形数目
//生成由两个三角形构成的三角形区域
tri_rgn:=CreatePolyPolygonRgn(thepoint,pointnum,count,WINDING);
end;
//判断鼠标位置
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
dc:hdc;
flag1,flag2,flag3:boolean;
begin
//三个标志变量以判明鼠标没有击中热点
flag1:=false; flag2:=false; flag3:=false;
//热点的判断
if ptinregion(Elli_rgn,x,y) then label1.caption:='椭圆' //api函数 具体看msdn
else flag1:=true;
if ptinregion(tri_rgn,x,y) then label1.caption:='三角形'
else flag2:=true;
if ptinregion(fourE_rgn,x,y) then
begin
label1.caption:='四边形';
dc:=getdc(form1.Handle);
canvas.Brush.Color:=clred-15;
fillrgn(dc,foure_rgn,canvas.Brush.Handle);
//canvas.FillRect(foure_rgn);
end
else flag3:=true;
if (flag1 and flag2 and flag3) then label1.caption:='鼠标没有击中热点';
procedure TForm1.FormCreate(Sender: TObject);
var
thepoint:array [1..8] of tpoint;//存储多边形顶点坐标
count:integer;
pointnum:array [1..2] of integer;
begin
//四边形顶点坐标,首末点封闭
thepoint[1]:=point(135,99);
thepoint[2]:=point(105,183);
thepoint[3]:=point(129,201);
thepoint[4]:=point(188,92);
thepoint[5]:=point(135,99);
count:=5;//四边形顶点数目,首末点为一点
fourE_rgn:=CreatePolygonRgn(thepoint,count,ALTERNATE);//生成四边形(多边)区域,
form1.Canvas.Brush.Color:=clgreen; //api 具体看msdn
//form1.Canvas.Pen.Color:=clred;
//FrameRgn(getdc(0),foure_rgn,form1.Canvas.Brush.Handle,100,100);
paintrgn(getdc(form1.Handle),foure_rgn);
elli_rgn:=CreateEllipticRgn(64,221,231,263);// 生成椭圆形区域
//第一个三角形顶点坐标
thepoint[1]:=point(118,67);
thepoint[2]:=point(32,28);
thepoint[3]:=point(17,90);
thepoint[4]:=point(118,67);
//第二个三角形顶点坐标
thepoint[5]:=point(155,44);
thepoint[6]:=point(202,91);
thepoint[7]:=point(277,44);
thepoint[8]:=point(155,44);
pointnum[1]:=4;//第一个三角形顶点数目
pointnum[2]:=4;//第二个三角形顶点数目
count:=2;//三角形数目
//生成由两个三角形构成的三角形区域
tri_rgn:=CreatePolyPolygonRgn(thepoint,pointnum,count,WINDING);
end;
//判断鼠标位置
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
dc:hdc;
flag1,flag2,flag3:boolean;
begin
//三个标志变量以判明鼠标没有击中热点
flag1:=false; flag2:=false; flag3:=false;
//热点的判断
if ptinregion(Elli_rgn,x,y) then label1.caption:='椭圆' //api函数 具体看msdn
else flag1:=true;
if ptinregion(tri_rgn,x,y) then label1.caption:='三角形'
else flag2:=true;
if ptinregion(fourE_rgn,x,y) then
begin
label1.caption:='四边形';
dc:=getdc(form1.Handle);
canvas.Brush.Color:=clred-15;
fillrgn(dc,foure_rgn,canvas.Brush.Handle);
//canvas.FillRect(foure_rgn);
end
else flag3:=true;
if (flag1 and flag2 and flag3) then label1.caption:='鼠标没有击中热点';
#3
gis
#4
gis具体怎么做
#5
to baiduan(-_-小猩猩 @_@ 大金刚-_-) :
fourE_rgn ,tri_rgn 没有定义类型,请问应该是什么类型!
fourE_rgn ,tri_rgn 没有定义类型,请问应该是什么类型!
#6
可以放小方块,有级缩放。
#7
一般地图控件都有这个功能,我用过MO控件,在MouseUP事件里边得到TrackingRect就可以了
#8
sorry,忘了
这样:
var
Form1: TForm1;
elli_rgn,fourE_rgn,tri_rgn:hrgn;//指向椭圆形、四边形、三角形的区域变量
//
这样:
var
Form1: TForm1;
elli_rgn,fourE_rgn,tri_rgn:hrgn;//指向椭圆形、四边形、三角形的区域变量
//
#9
用delphi编写这种程序,支持性好不好?
#10
怎么才能看到鼠标的划图轨迹
#11
implementation
var
x1,y1:integer;//存储前次鼠标位置
{$R *.dfm}
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if (x<>x1) or (y<>y1) then//如果鼠标移动,划出轨迹
begin
self.Canvas.Pen.Color:=clred;
self.Canvas.MoveTo(x1,y1);
self.Canvas.LineTo(x,y);
x1:=x;
y1:=y;
end;
end;
//是这个吗?
var
x1,y1:integer;//存储前次鼠标位置
{$R *.dfm}
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if (x<>x1) or (y<>y1) then//如果鼠标移动,划出轨迹
begin
self.Canvas.Pen.Color:=clred;
self.Canvas.MoveTo(x1,y1);
self.Canvas.LineTo(x,y);
x1:=x;
y1:=y;
end;
end;
//是这个吗?
#12
baiduan(-_-小猩猩 @_@ 大金刚-_-):
首先感谢你的回答。
我的意思是在一张image里用鼠标画不规则的闭合多边形,而且能看到鼠标画动时的痕迹,就好像windows里的画笔功能!谢谢
首先感谢你的回答。
我的意思是在一张image里用鼠标画不规则的闭合多边形,而且能看到鼠标画动时的痕迹,就好像windows里的画笔功能!谢谢
#1
去找一个delphi 图像热点应用的例子吧.
#2
不规则图形的建立:
procedure TForm1.FormCreate(Sender: TObject);
var
thepoint:array [1..8] of tpoint;//存储多边形顶点坐标
count:integer;
pointnum:array [1..2] of integer;
begin
//四边形顶点坐标,首末点封闭
thepoint[1]:=point(135,99);
thepoint[2]:=point(105,183);
thepoint[3]:=point(129,201);
thepoint[4]:=point(188,92);
thepoint[5]:=point(135,99);
count:=5;//四边形顶点数目,首末点为一点
fourE_rgn:=CreatePolygonRgn(thepoint,count,ALTERNATE);//生成四边形(多边)区域,
form1.Canvas.Brush.Color:=clgreen; //api 具体看msdn
//form1.Canvas.Pen.Color:=clred;
//FrameRgn(getdc(0),foure_rgn,form1.Canvas.Brush.Handle,100,100);
paintrgn(getdc(form1.Handle),foure_rgn);
elli_rgn:=CreateEllipticRgn(64,221,231,263);// 生成椭圆形区域
//第一个三角形顶点坐标
thepoint[1]:=point(118,67);
thepoint[2]:=point(32,28);
thepoint[3]:=point(17,90);
thepoint[4]:=point(118,67);
//第二个三角形顶点坐标
thepoint[5]:=point(155,44);
thepoint[6]:=point(202,91);
thepoint[7]:=point(277,44);
thepoint[8]:=point(155,44);
pointnum[1]:=4;//第一个三角形顶点数目
pointnum[2]:=4;//第二个三角形顶点数目
count:=2;//三角形数目
//生成由两个三角形构成的三角形区域
tri_rgn:=CreatePolyPolygonRgn(thepoint,pointnum,count,WINDING);
end;
//判断鼠标位置
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
dc:hdc;
flag1,flag2,flag3:boolean;
begin
//三个标志变量以判明鼠标没有击中热点
flag1:=false; flag2:=false; flag3:=false;
//热点的判断
if ptinregion(Elli_rgn,x,y) then label1.caption:='椭圆' //api函数 具体看msdn
else flag1:=true;
if ptinregion(tri_rgn,x,y) then label1.caption:='三角形'
else flag2:=true;
if ptinregion(fourE_rgn,x,y) then
begin
label1.caption:='四边形';
dc:=getdc(form1.Handle);
canvas.Brush.Color:=clred-15;
fillrgn(dc,foure_rgn,canvas.Brush.Handle);
//canvas.FillRect(foure_rgn);
end
else flag3:=true;
if (flag1 and flag2 and flag3) then label1.caption:='鼠标没有击中热点';
procedure TForm1.FormCreate(Sender: TObject);
var
thepoint:array [1..8] of tpoint;//存储多边形顶点坐标
count:integer;
pointnum:array [1..2] of integer;
begin
//四边形顶点坐标,首末点封闭
thepoint[1]:=point(135,99);
thepoint[2]:=point(105,183);
thepoint[3]:=point(129,201);
thepoint[4]:=point(188,92);
thepoint[5]:=point(135,99);
count:=5;//四边形顶点数目,首末点为一点
fourE_rgn:=CreatePolygonRgn(thepoint,count,ALTERNATE);//生成四边形(多边)区域,
form1.Canvas.Brush.Color:=clgreen; //api 具体看msdn
//form1.Canvas.Pen.Color:=clred;
//FrameRgn(getdc(0),foure_rgn,form1.Canvas.Brush.Handle,100,100);
paintrgn(getdc(form1.Handle),foure_rgn);
elli_rgn:=CreateEllipticRgn(64,221,231,263);// 生成椭圆形区域
//第一个三角形顶点坐标
thepoint[1]:=point(118,67);
thepoint[2]:=point(32,28);
thepoint[3]:=point(17,90);
thepoint[4]:=point(118,67);
//第二个三角形顶点坐标
thepoint[5]:=point(155,44);
thepoint[6]:=point(202,91);
thepoint[7]:=point(277,44);
thepoint[8]:=point(155,44);
pointnum[1]:=4;//第一个三角形顶点数目
pointnum[2]:=4;//第二个三角形顶点数目
count:=2;//三角形数目
//生成由两个三角形构成的三角形区域
tri_rgn:=CreatePolyPolygonRgn(thepoint,pointnum,count,WINDING);
end;
//判断鼠标位置
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
dc:hdc;
flag1,flag2,flag3:boolean;
begin
//三个标志变量以判明鼠标没有击中热点
flag1:=false; flag2:=false; flag3:=false;
//热点的判断
if ptinregion(Elli_rgn,x,y) then label1.caption:='椭圆' //api函数 具体看msdn
else flag1:=true;
if ptinregion(tri_rgn,x,y) then label1.caption:='三角形'
else flag2:=true;
if ptinregion(fourE_rgn,x,y) then
begin
label1.caption:='四边形';
dc:=getdc(form1.Handle);
canvas.Brush.Color:=clred-15;
fillrgn(dc,foure_rgn,canvas.Brush.Handle);
//canvas.FillRect(foure_rgn);
end
else flag3:=true;
if (flag1 and flag2 and flag3) then label1.caption:='鼠标没有击中热点';
#3
gis
#4
gis具体怎么做
#5
to baiduan(-_-小猩猩 @_@ 大金刚-_-) :
fourE_rgn ,tri_rgn 没有定义类型,请问应该是什么类型!
fourE_rgn ,tri_rgn 没有定义类型,请问应该是什么类型!
#6
可以放小方块,有级缩放。
#7
一般地图控件都有这个功能,我用过MO控件,在MouseUP事件里边得到TrackingRect就可以了
#8
sorry,忘了
这样:
var
Form1: TForm1;
elli_rgn,fourE_rgn,tri_rgn:hrgn;//指向椭圆形、四边形、三角形的区域变量
//
这样:
var
Form1: TForm1;
elli_rgn,fourE_rgn,tri_rgn:hrgn;//指向椭圆形、四边形、三角形的区域变量
//
#9
用delphi编写这种程序,支持性好不好?
#10
怎么才能看到鼠标的划图轨迹
#11
implementation
var
x1,y1:integer;//存储前次鼠标位置
{$R *.dfm}
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if (x<>x1) or (y<>y1) then//如果鼠标移动,划出轨迹
begin
self.Canvas.Pen.Color:=clred;
self.Canvas.MoveTo(x1,y1);
self.Canvas.LineTo(x,y);
x1:=x;
y1:=y;
end;
end;
//是这个吗?
var
x1,y1:integer;//存储前次鼠标位置
{$R *.dfm}
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if (x<>x1) or (y<>y1) then//如果鼠标移动,划出轨迹
begin
self.Canvas.Pen.Color:=clred;
self.Canvas.MoveTo(x1,y1);
self.Canvas.LineTo(x,y);
x1:=x;
y1:=y;
end;
end;
//是这个吗?
#12
baiduan(-_-小猩猩 @_@ 大金刚-_-):
首先感谢你的回答。
我的意思是在一张image里用鼠标画不规则的闭合多边形,而且能看到鼠标画动时的痕迹,就好像windows里的画笔功能!谢谢
首先感谢你的回答。
我的意思是在一张image里用鼠标画不规则的闭合多边形,而且能看到鼠标画动时的痕迹,就好像windows里的画笔功能!谢谢