在做的系统中有一个需要,要做到下面的要求
1、在form上画出一个红色的方框,方框大小固定。
2、用鼠标左键选择方框(不松开左键)后可以用鼠标移动到方框任意位置,方框左键以后方框显示在移动后的位置,得到方框左上顶点和form左上顶点的距离(x,y)。
3、移动到适当位置以后可以用输入角度的方式旋转方框(已方框中线为轴)。请问这样的需求该怎么实现呢,要是有好的想法请提供,分数不够再加。
1、在form上画出一个红色的方框,方框大小固定。
2、用鼠标左键选择方框(不松开左键)后可以用鼠标移动到方框任意位置,方框左键以后方框显示在移动后的位置,得到方框左上顶点和form左上顶点的距离(x,y)。
3、移动到适当位置以后可以用输入角度的方式旋转方框(已方框中线为轴)。请问这样的需求该怎么实现呢,要是有好的想法请提供,分数不够再加。
解决方案 »
- 刚开始接触delphi通讯方面,问3个小问题
- 感谢大S、旺崽的帮助,各100
- 请教一个DBGRID的行的高度怎么改变??在线等待。。。
- 难呀,我都几天睡不好了,救救我
- Tubropower中的com控件怎么用?
- 关于C/S的问题!
- Delphi5.0编译成Delphi6.0出现的问题!!(各位大哥帮帮忙)
- delphi+sqlserver在一个数据库的存储过程中能否往另外一个数据库表中插入数据
- 怎样屏蔽掉DBGrid向下方向键的自动Append功能?
- 求delphi 做一個隨機移動的圖片
- ★★★○○○如何同时实现无标题栏且可以拖动还具有PopMenu功能的窗体?○○○★★★
- 请问Pascal以什么形式插入字符串中
由于你第3步要求旋转。
所以建立用一个TShape控件。
然后在from的MouseDown, MouseMove, MouseUp三事件中写代码,即可实现你要求的1,2。
TShape控件也不能旋转呀,
还是直接在Canvas上画吧。
帮忙看看。谢谢!
你参考着改改吧:unit UntCanDrag;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;type
TForm1 = class(TForm)
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
RectDragging : Boolean;
OldRect : TRect;
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
RectDragging := True;
end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if RectDragging then
begin
Canvas.Pen.Width := 2;
if GetRop2(Canvas.Handle) <> R2_NOT then
SetRop2(Canvas.Handle, R2_NOT);
Canvas.Brush.Style := bsClear;
Canvas.Rectangle(OldRect.Left, oldRect.Top, OldRect.Right, OldRect.Bottom);
Canvas.Rectangle(X-20, Y-20, X+20, Y+20);
OldRect := Rect(X-20, Y-20, X+20, Y+20);
end;
end;procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
RectDragging := False;
end;end.