unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
t1,t2,t3,t4:Tpoint;//
x1,y1,a,b:integer; //作为全局变量放在这里,如果你想做成空间的话
function drawdown(x1,y1,a,b:integer;cs:Tcanvas):boolean;
function newdown(x2,y2,a2,b2:integer;cs:Tcanvas):boolean;
end;
var
Form1: TForm1;
implementation
var
dragflag:boolean; //托动标志,如果做成空间,也要放在上边才好
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
x1:=100;
y1:=100;
a:=10;
b:=50;
self.Canvas.Pen.Color:=clblack;
self.drawdown(x1,y1,a,b,form1.Canvas);
end;
function TForm1.drawdown(x1,y1, a, b: integer; cs: Tcanvas): boolean;
var
i:integer;
begin
try
t1.X:=x1-a;
t1.Y:=y1;
t2.X:=x1;
t2.Y:=y1-b;
t3.X:=x1+a;
t3.Y:=y1;
t4.X:=x1;
t4.Y:=y1+b;
cs.MoveTo(t1.X,t1.Y);
cs.LineTo(t2.X,t2.y);
cs.LineTo(t3.X,t3.y);
cs.LineTo(t4.X,t4.y);
cs.LineTo(t1.X,t1.Y);
except
{出错处理}
result:=false;
end;
result:=true;
end;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if ((x>=t1.X-5) or (x <t1.X+5) ) and ((y>=t1.y-5) or (y<t1.Y+5)) then
begin
dragflag:=true;
exit;
end;
end;
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
dragflag:=false;
end;
function TForm1.newdown(x2, y2, a2, b2: integer; cs: Tcanvas): boolean;
begin
self.Canvas.Pen.Mode:=pmnotxor;//这里擦出模式没选好,忘了
self.drawdown(x2,y2,a2,b2,form1.Canvas);//擦出模式
end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if dragflag then //假如是托动的话
begin
self.newdown(x1,y1,a,b,self.Canvas);//擦出
self.Canvas.Pen.Mode:=pmBlack; //标定画笔模式
self.drawdown(x1,y1,x1-x,b,self.Canvas); //重新划入菱形
a:=x1-x; //更改全局变量,方便下次擦出
end;
end;
end.
//=========
form上1个按钮,代码copy过去
这就是个力气活,如果做成空间需要接受鼠标消息。
我这里直接就用form的鼠标方法了,
这个例子,只能托动菱形左边的t1点,
剩下的点同理可得。