●●●求在TImage中移动Rectangle的示例●●● 就是在Timage中画了个矩形,然后移动它,我无法擦除移动时的阴影,而且在移动时,鼠标动一下,图像移动比例很大,而不是1:1的距离。分不够另外给。谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用Xor来擦除。var X:integer;procedure TForm1.Timer1Timer(Sender: TObject);begin Image1.Canvas.Rectangle(X,100,X+100,200); inc(X,10); Image1.Canvas.Rectangle(X,100,X+100,200);end;procedure TForm1.FormActivate(Sender: TObject);begin Image1.Canvas.Pen.Color:=clRed; Image1.Canvas.Pen.Mode:=pmXor; Image1.Canvas.Brush.Style:=bsClear ; Image1.Canvas.Rectangle(X,100,X+100,200);end; 有没有在MouseMove中进行处理的 跟随Mouse 的位置吗?想要Rectangle和鼠标的位置有什么关系呢? 就是鼠标移动时,Rectangle也跟着移动我用你的代码试了下,还是有点问题,你可以试下procedure TfrmMain.FormActivate(Sender: TObject);begin imgTime.Canvas.Pen.Color:=clRed; imgTime.Canvas.Pen.Mode:=pmXor; imgTime.Canvas.Brush.Color := clRed; //imgTime.Canvas.Brush.Style:=bsClear; imgTime.Canvas.Rectangle(0,100,100,200); OldPoint := Point(0,100);end;procedure TfrmMain.imgTimeMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);begin if IsDraw then begin imgTime.Canvas.Pen.Color:=clRed; imgTime.Canvas.Pen.Mode:=pmXor; imgTime.Canvas.Brush.Color := clRed; imgTime.Canvas.Rectangle(OldPoint.X,100,OldPoint.X+100,200); OldPoint := Point(X,Y); imgTime.Canvas.Rectangle(OldPoint.X,100,OldPoint.X+100,200); end;end;procedure TfrmMain.imgTimeMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begin imgTime.Canvas.Brush.Color := clWhite; imgTime.Canvas.Pen.Color:=clWhite; imgTime.Canvas.Pen.Mode:=pmCOPY; imgTime.Canvas.Rectangle(0,100,100,200); OldPoint := Point(0,100); IsDraw := True;end;procedure TfrmMain.imgTimeMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begin IsDraw := False;end; 是你的逻辑有一点点乱,把你的代码改一改,看看是否满足你的要求:procedure TForm1.imgTimeMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begin imgTime.Canvas.Pen.Color:=clRed; imgTime.Canvas.Pen.Mode:=pmXor; imgTime.Canvas.Brush.Color := clRed; imgTime.Canvas.Rectangle(OldPoint.X,OldPoint.Y,OldPoint.X+100,OldPoint.Y+100); OldPoint := Point(X,Y); imgTime.Canvas.Rectangle(OldPoint.X,OldPoint.Y,OldPoint.X+100,OldPoint.Y+100); IsDraw := True;end;procedure TForm1.imgTimeMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begin IsDraw := False;end;procedure TForm1.imgTimeMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);begin if IsDraw then begin imgTime.Canvas.Rectangle(OldPoint.X,OldPoint.Y,OldPoint.X+100,OldPoint.Y+100); OldPoint := Point(X,Y); imgTime.Canvas.Rectangle(OldPoint.X,OldPoint.Y,OldPoint.X+100,OldPoint.Y+100); end;end;procedure TForm1.FormActivate(Sender: TObject);begin imgTime.Canvas.Pen.Color:=clRed; imgTime.Canvas.Pen.Mode:=pmXor; imgTime.Canvas.Brush.Color := clRed; OldPoint := Point(0,100); imgTime.Canvas.Rectangle(OldPoint.X,OldPoint.Y,OldPoint.X+100,OldPoint.Y+100);end; 可以做一个缓冲,就是背景图作一个缓冲,每次刷到Image上去的时候就用背景图和方框合成一下。鼠标运动可以强制Image刷新,合成刷图的程序放在image的onpaint事件立面处理。 读取二进制字段值 控件闪烁的解决方案 如何打乱一个数组的顺序?在线等待... 急:spcomm的问题 TDBGrid中如何只显示时间? delphi中如何取得当前活动窗口的标题! 在我的程序中要实现对一SQL server数据库备份与恢复,我该怎么做呢? 请教,下面的函数如何调用,初学! 如何在程序启动时显示一个logo窗体 送分题,快点啊。 我用的delphi上面没有了菜单,怎么才能修好啊? 转载:一首诗。大家进来看看。
X:integer;procedure TForm1.Timer1Timer(Sender: TObject);
begin
Image1.Canvas.Rectangle(X,100,X+100,200);
inc(X,10);
Image1.Canvas.Rectangle(X,100,X+100,200);
end;procedure TForm1.FormActivate(Sender: TObject);
begin
Image1.Canvas.Pen.Color:=clRed;
Image1.Canvas.Pen.Mode:=pmXor;
Image1.Canvas.Brush.Style:=bsClear ;
Image1.Canvas.Rectangle(X,100,X+100,200);
end;
想要Rectangle和鼠标的位置有什么关系呢?
我用你的代码试了下,还是有点问题,你可以试下
procedure TfrmMain.FormActivate(Sender: TObject);
begin
imgTime.Canvas.Pen.Color:=clRed;
imgTime.Canvas.Pen.Mode:=pmXor;
imgTime.Canvas.Brush.Color := clRed;
//imgTime.Canvas.Brush.Style:=bsClear;
imgTime.Canvas.Rectangle(0,100,100,200);
OldPoint := Point(0,100);
end;procedure TfrmMain.imgTimeMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if IsDraw then
begin
imgTime.Canvas.Pen.Color:=clRed;
imgTime.Canvas.Pen.Mode:=pmXor;
imgTime.Canvas.Brush.Color := clRed;
imgTime.Canvas.Rectangle(OldPoint.X,100,OldPoint.X+100,200);
OldPoint := Point(X,Y);
imgTime.Canvas.Rectangle(OldPoint.X,100,OldPoint.X+100,200);
end;
end;procedure TfrmMain.imgTimeMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
imgTime.Canvas.Brush.Color := clWhite;
imgTime.Canvas.Pen.Color:=clWhite;
imgTime.Canvas.Pen.Mode:=pmCOPY;
imgTime.Canvas.Rectangle(0,100,100,200);
OldPoint := Point(0,100);
IsDraw := True;
end;procedure TfrmMain.imgTimeMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
IsDraw := False;
end;
Shift: TShiftState; X, Y: Integer);
begin
imgTime.Canvas.Pen.Color:=clRed;
imgTime.Canvas.Pen.Mode:=pmXor;
imgTime.Canvas.Brush.Color := clRed;
imgTime.Canvas.Rectangle(OldPoint.X,OldPoint.Y,OldPoint.X+100,OldPoint.Y+100);
OldPoint := Point(X,Y);
imgTime.Canvas.Rectangle(OldPoint.X,OldPoint.Y,OldPoint.X+100,OldPoint.Y+100);
IsDraw := True;
end;procedure TForm1.imgTimeMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
IsDraw := False;
end;procedure TForm1.imgTimeMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if IsDraw then
begin
imgTime.Canvas.Rectangle(OldPoint.X,OldPoint.Y,OldPoint.X+100,OldPoint.Y+100);
OldPoint := Point(X,Y);
imgTime.Canvas.Rectangle(OldPoint.X,OldPoint.Y,OldPoint.X+100,OldPoint.Y+100);
end;
end;procedure TForm1.FormActivate(Sender: TObject);
begin
imgTime.Canvas.Pen.Color:=clRed;
imgTime.Canvas.Pen.Mode:=pmXor;
imgTime.Canvas.Brush.Color := clRed;
OldPoint := Point(0,100);
imgTime.Canvas.Rectangle(OldPoint.X,OldPoint.Y,OldPoint.X+100,OldPoint.Y+100);
end;