form上有若干个Image控件,表示若干台设备。要在两个控件间画线,表示为设备添加连接。希望的效果是:用户单击一个控件,拖动鼠标,此时就有一条线段跟着鼠标而移动,两个端点分别是那个控件的中心位置和鼠标的当前位置(这部分本人已经实现)。当放开鼠标后,如果当前的鼠标位置在另一个控件上,则在这两个控件之间画线;如果当前的位置只是在form上,则什么都不做,原来的那条线也消失。现在的问题是,当我放开鼠标后,怎么判断当前的鼠标是否落在另一个控件上?我为每个Image控件写了MouseUP事件,但鼠标UP了以后只是触发了起点Image的UP事件,而不是终点的。所以没法判断线条的终点是否在另一个Image上。我该怎么做呢?请各位指点。多谢!
解决方案 »
- delphi中TdxTreeList控件使用
- 如何判断黑白图片的某点是黑色还是白色
- idhttp 发送文件已流方式发送快?
- 惊天地! 泣鬼神!
- CSDN是怎么搞的,得了290分,就只加了10分,我能不郁闷吗?大家出来评评!
- 请问如何把文件删除到回收站中
- BDE转换为Ado中的问题,给50分,有哪位来拿啊?
- 好久没来,分太多了!大家帮忙花吧。
- delphi导excel表,页面的连接
- how to crack vcl
- 急问: query控件怎么知道当前记录号
- 急!Row cannot be located for updating.Some values may have bee changed since
MouseUp只(x,y)在image中的判断是:
(Image.left<x<Image.left+image.width) and (Image.top<y<Image.left+image.Height)
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, jpeg;type
TForm1 = class(TForm)
Image1: TImage;
Image2: TImage;
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormCreate(Sender: TObject);
procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}var
started:boolean;
op,lp,cp:TPoint; //op orignal point lp:last point cp:current point
hdc:THandle;
cvs:TCanvas;
correct:boolean;procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
started:=true;
getcursorPos(op);
lp.X:=op.X;
lp.Y:=op.Y;
end;procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);begin
if started then
begin
getcursorpos(cp);
cvs.MoveTo(op.X,op.Y);
cvs.LineTo(cp.X,cp.Y);
cvs.MoveTo(op.X,op.Y);
cvs.LineTo(lp.X,lp.Y);
end;
lp.X:=cp.X; lp.Y:=cp.Y;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
cvs:=TCanvas.create;
cvs.Handle:=getdc(0);
cvs.Pen.Color:=clred;
cvs.Pen.Mode:=pmnot;
end;procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
started:=false; getCursorPos(cp);
if (cp.X>form1.Left+image2.Left) and (cp.Y>form1.Top+image2.Top) and
(cp.X<form1.Left+image2.Left+image2.Width) and (cp.Y<form1.Top+image2.Top+image2.Height) then
begin
correct:=true;
end
else
correct:=false; if not correct then
begin
cvs.MoveTo(op.X,op.Y);
cvs.LineTo(lp.X,lp.Y);
end;
end;procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
started:=false;
cvs.MoveTo(op.X,op.Y);
cvs.LineTo(lp.X,lp.Y);
end;end.