请问用什么法子能使,画出的线成为一个对象,并有事件可以触发?(100分)

  • 主题发起人 主题发起人 linwq
  • 开始时间 开始时间
L

linwq

Unregistered / Unconfirmed
GUEST, unregistred user!
[:(]我在作一个关于流程配置的程序,我想使,各各流程之间的连线都具有象Button一种的
Click之类的事件,请问有什么方法来实现?
 
试试从Tshape继承一个你需要的连线对象来,
在使用时,生成连线的时候,把自己的那个连线对象放上去,
或者完全你自己写一个需要的连线对象。
 
呵,画完线后,就在该处生成一个控件,当有事件时就响应该控件的事件!
 
to 天真,
如果那个对象位置变了呢?我的方法也是这样,在需要画线的地方动态生成一个panel和
image对象,再在image.canvas中画线,这样就有那个属性了,但这样就不好控制位置了,想得知
更好的方法.
 
不对,是记住你画线的所有Point,然后在鼠标或键盘事件中分析是否在某线的位置上。
 
如果是简单的线,比访说直线,折线之类,可用一种结构描述,也不需要所有的点.
 
请问KKYY,我做的线是一个由三段直线组成的,请问用什么样的结构来描述
 
用数据表保存,进行搜索!然后进行操作!
 
做个判断,当mousedown所在的坐标点到直线两端的距离之和等于直线的长度时候则
表示点在直线上,此时触发相应事件
 
linwq:四个TPoint啊,分析点是否在两点的连线上,应该会吧?
 
给你个框架,详细代码看Mastering Delphi6,我就不浪费这里的空间了。
type
TMdWArrowDir = (adUp, adLeft, adDown, adRight);

TMdWArrow = class (TCustomControl)
private
fDirection: TMdWArrowDir;
fArrowHeight: Integer;
fFilled: Boolean;
fPen: TPen;
fBrush: TBrush;
fArrowDblClick: TNotifyEvent;
fArrowPoints: array [0..3] of TPoint;
procedure ComputePoints;
procedure SetDirection (Value: TMdWArrowDir);
procedure SetArrowHeight (Value: Integer);
procedure SetFilled (Value: Boolean);
procedure SetPen (Value: TPen);
procedure SetBrush (Value: TBrush);
procedure RepaintRequest (Sender: TObject);
procedure WMLButtonDblClk (var Msg: TWMLButtonDblClk);
message wm_LButtonDblClk;
protected
procedure Paint; override;
procedure ArrowDblClick; dynamic;
public
constructor Create (AOwner: TComponent); override;
destructor Destroy; override;
procedure SetBounds (ALeft, ATop, AWidth, AHeight: Integer); override;
published
property Width default 50;
property Height default 20;
property Direction: TMdWArrowDir
read fDirection write SetDirection default adRight;
property ArrowHeight: Integer
read fArrowHeight write SetArrowHeight default 10;
property Filled: Boolean
read fFilled write SetFilled default False;
property Pen: TPen
read fPen write SetPen;
property Brush: TBrush
read fBrush write SetBrush;
property OnClick;
property OnDragDrop;
property OnDragOver;
property OnEndDrag;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnArrowDblClick: TNotifyEvent
read fArrowDblClick write fArrowDblClick;
end;
 
To: Savenight大侠
借空间问一个相关问题。我怎样给TShape加一个鼠标双击事件?谢谢!
 
goodfox2002:

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
procedure MyDblClick(Sender: TObject);
public
{ Public declarations }
end;
TMyShape=class(TShape)
public
property OnDblClick;
end;
//....
procedure TForm1.MyDblClick(Sender: TObject);
begin
showmessage('hello,this is your friend savenight');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
myShape :=TMyShape.Create(self);
myShape.Parent :=form1;
myShape.OnDblClick :=MyDblClick;
end;
 
谢谢,savenight!It's Ok!
 
直接把函数名(实际是指针)赋给OnDblClick就行了,其他事件也是一样。
 
正在研究中……
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部