如题。
我现在的做法是每画一个图形,在一个文件中添加一条记录,在屏幕点击事件中判断光标的x,y,如果在记录的范围内,就算选中了,再根据这个记录在原来的图形的四周画出几个小正方形,表示选中,取消选中的时候,用背景色重画那几个小正方形。
拖动的过程用虚线画出一个矩形区域,随着鼠标的移动,矩形移动,等到达指定位置,擦出原来的图形,在新位置画出图形。如何表现这个矩形跟踪鼠标的过程呢?
要不停的擦除上一个位置,在新的位置画么?
这种方式是不是很浪费资源啊
我现在的做法是每画一个图形,在一个文件中添加一条记录,在屏幕点击事件中判断光标的x,y,如果在记录的范围内,就算选中了,再根据这个记录在原来的图形的四周画出几个小正方形,表示选中,取消选中的时候,用背景色重画那几个小正方形。
拖动的过程用虚线画出一个矩形区域,随着鼠标的移动,矩形移动,等到达指定位置,擦出原来的图形,在新位置画出图形。如何表现这个矩形跟踪鼠标的过程呢?
要不停的擦除上一个位置,在新的位置画么?
这种方式是不是很浪费资源啊
解决方案 »
- madCodeHook.dcu 支持 delphi xe2的版本谁有??
- BusinessSkinForm中的一个小问题
- cxgrid使用ExportGrid4ToEXCEL导出成excel格式时,如何只导出“部分”列?
- 当中途数据库断开时,如何对它重新连接并继续往下执行
- 急急急!!关于SQL SERVER里的IMAGE类型和ORCALE里的BLOBl类型!!!!
- 在调用一个DLL时,出现这样的错误:“Invalid pointer Operation”是什么原因?
- 一个select语句问题!
- 请教各位高手如何设置或编码,在Image中显示一幅图片,当鼠标移到这幅图片上时,鼠标变成手型,图片向左上角移动,鼠标离开后,又恢复回
- 如何理解DataSource控件,与ADOquery,DBgrid有何关联??
- 我要删除GROUPBOX里动态创建的数个GROUPBOX,用下面的方法为什么不行?
- 妈妈呀,愁死了
- 关于将excel保存到本地的问题,立马给分
添加一条记录是为了保存这个图形。比如画一个直线 moveto(x1,y1),lineto(x2,y2),我在文件里保存了x1,y1,x2,y2,这样下次我打开的时候还可以画出这条线。你都是用类来做的么?procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
image1.Canvas.Pen.Mode:=pmxor;
image1.Canvas.Rectangle(x,y,x+100,y+200);
end;这样不行,麻烦你再写点代码给多解释一下吧
THitPos = (htNone, htLeftTop, htTop, htRightTop, htRight, htRightBottom, htBottom, htLeftBottom, htLeft);TBaseShape = class
public
// 判断选中是否选中,虚拟方法,子类继承并且处理之
function HitTest(X, Y: Integer): THitPos; virtual;
end;---------------------------------------------------
用XOR方式擦除:
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
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 }
FIsDrag : Boolean;
FLastPos: TPoint;
FDragPos: TPoint;
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
FIsDrag:= false;
end;procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then
begin
FDragPos:= Point(X, Y);
FLastPos:= FDragPos;
FIsDrag := true;
end;
end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if FIsDrag then
begin
Self.Canvas.Brush.Style:= bsClear;
Self.Canvas.Pen.Color := clRed;
Self.Canvas.Pen.Mode := pmXor;
Self.Canvas.Pen.Style := psSolid; Self.Canvas.Rectangle(FDragPos.X, FDragPos.Y, FLastPos.X, FLastPos.Y);
FLastPos:= Point(X, Y); Self.Canvas.Rectangle(FDragPos.X, FDragPos.Y, X, Y);
end;
end;procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
FIsDrag:= false;
end;end.建议你去搜索一下矢量图形编辑器的代码。网上很多。
这点操作对现在的cpu和显卡构不成任何负担,所以谈不上浪费