做一个画三角形的组件。通过输入三个顶点的坐标,控制三角形的三个顶点的相对位置。
为了描述点的位置,定义了一个TXY类,包括两个字段fx,fy,表示一个点的(x,y)坐标。
在我的三角形控件内,我声明了三个TXY类型的变量fp1,fp2,fp3。
拖入一个三角形控件后,在属性列表里这样显示:
-P1
X
Y
-P2
X
Y
-P3
X
Y
现在问题是更改点的属性后,图形没有更新,如果接着修改其他属性比如left,height,brush,pen等,图形能把修改的点更新,问题在哪里呢?
TXY=class(Tpersistent)
private
Fx:integer;
Fy:integer;
procedure set_x(value:integer);
procedure set_y(value:integer);
public
constructor create;
destructor destroy;override;
published
property X:integer read Fx write set_x ;
property Y:integer read Fy write set_y ;
end;
Imlementation
constructor TXY.create;
begin
Fx:=0;
Fy:=0;
end;
destructor TXY.destroy;
begin
inherited;
end;
procedure TXY.set_x(value:integer);
begin
fx:=value;
end;
procedure TXY.set_y(value:integer);
begin
fy:=value;
end;
为了描述点的位置,定义了一个TXY类,包括两个字段fx,fy,表示一个点的(x,y)坐标。
在我的三角形控件内,我声明了三个TXY类型的变量fp1,fp2,fp3。
拖入一个三角形控件后,在属性列表里这样显示:
-P1
X
Y
-P2
X
Y
-P3
X
Y
现在问题是更改点的属性后,图形没有更新,如果接着修改其他属性比如left,height,brush,pen等,图形能把修改的点更新,问题在哪里呢?
TXY=class(Tpersistent)
private
Fx:integer;
Fy:integer;
procedure set_x(value:integer);
procedure set_y(value:integer);
public
constructor create;
destructor destroy;override;
published
property X:integer read Fx write set_x ;
property Y:integer read Fy write set_y ;
end;
Imlementation
constructor TXY.create;
begin
Fx:=0;
Fy:=0;
end;
destructor TXY.destroy;
begin
inherited;
end;
procedure TXY.set_x(value:integer);
begin
fx:=value;
end;
procedure TXY.set_y(value:integer);
begin
fy:=value;
end;
解决方案 »
- 如何最大限度防止突然停电引起数据库损坏?
- dspack中如何才能更改 preview的解析度?(我指定的影像的解析度为何只能在capture可以,)
- 请教各位如何载取这个字符串的长度
- 字符串Adotable1DESC.VALUE内的值,如果字段内的值有',例如,FRIAN'S ENRCY ,就无法插入ms-sqlserver内的表,请问如何修改??
- 现DBGRID有一个dblclick事件,想把dblclick禁止掉但要DBGRID还是可以拖动浏览,怎么搞?
- 通过 年、月 来计算该年该月总共有什么天的算法
- 一个视频卡的问题
- Delphi7中的问题
- TreeView的主要使用方法...
- VCL中的一个Win32API的声明错误
- 为什么我写的控件的属性没有保存?修改保存后,再打开FORM时又恢复成默认值了?
- 金钱鼓斗志,分分暖人心。200分求十几张ICO图。
SysUtils, Classes, Controls, RectX,MyBasePic;type
TTriangle = class(TRectXY)//TRectXY是自定义的类
private
FP1:TXY;
FP2:TXY;
FP3:TXY;
FOnChange:TNotifyEvent;
procedure setp1(value:TXY);
procedure setp2(value:TXY);
procedure setp3(value:TXY);
{ Private declarations }
protected
procedure paint;override;
procedure DoChange;virtual;
{ Protected declarations }
public
constructor create(Aowner:Tcomponent);override;
{ Public declarations }
published
property P1:TXY read fp1 write setp1;
property P2:TXY read fp2 write setp2;
property P3:TXY read fp3 write setp3;
property OnChange:TNotifyEvent read FOnChange write FOnChange;
{ Published declarations }
end;procedure Register;implementationconstructor TTriangle.create(Aowner:Tcomponent);
begin
inherited create(Aowner);
fp1:=TXY.create;
fp2:=TXY.create;
fp3:=TXY.create;
height:=100;
width:=100;
fp1.X:=50;fp1.Y:=10;
fp2.X:=10;fp2.Y:=90;
fp3.X:=90;fp3.Y:=90;
end;
procedure TTriangle.DoChange;
begin
if assigned(Fonchange)then Fonchange(self);
end;
procedure TTriangle.setp1(value:TXY);
begin
if Assigned(fp1) then
fp1.Free;
fp1:=value;
invalidate;
end;
procedure TTriangle.setp2(value:TXY);
begin
fp2:=value;
refresh;
dochange;
end;
procedure TTriangle.setp3(value:TXY);
begin
fp3:=value;
invalidate;
dochange;
end;procedure TTriangle.paint;
begin
inherited; with canvas do
begin canvas.Polygon([Point(p1.X,p1.Y),Point(p2.X,p2.Y),Point(p3.X,p3.Y)]);
end;
end;
procedure Register;
begin
RegisterComponents('User', [TTriangle]);
end;end.
private
Fx:integer;
Fy:integer;
procedure set_x(value:integer);
procedure set_y(value:integer);
public
constructor create;
destructor destroy;override;
published
property X:integer read Fx write set_x ;
property Y:integer read Fy write set_y ;
end;
Imlementation
constructor TXY.create;
begin
Fx:=0;
Fy:=0;
end;
destructor TXY.destroy;
begin
inherited;end;
procedure TXY.set_x(value:integer);
begin
fx:=value;
invalidate;
end;
procedure TXY.set_y(value:integer);
begin
fy:=value;
invalidate;
end;