关于桌面绘图的一个小问题!(30分)

  • 主题发起人 紫风逍遥
  • 开始时间

紫风逍遥

Unregistered / Unconfirmed
GUEST, unregistred user!
我在试验书上的一个关于在桌面涂鸦的程序时发现,当我调用颜色对话框获取颜色时,拖动
了对话框的话,虽能使画笔正常得到所需颜色,但对话框的残像依然留在屏幕上,调用
Messagebox时,只要拖动了它,也会出现这样的情况,但我以前看到别人的一个类似程序
却没有这种问题,请问怎么解决。
这个例子很简单,只是调用了lineto() ,moveto(),来绘制线条。没有什么别的,
请各位大侠帮助!!
 
还是看看这个画鸭程序巴:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;

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 }
public
{ Public declarations }
end;

var
Form1: TForm1;
acolor:Tcolor;
flag:bool;
R1:integer;
implementation

{$R *.dfm}

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
R:integer;

// acolor:Tcolor;
begin
flag:=true;
r:=RANDOM(10)+10;
r1:=r;
acolor := RGB(RANDOM(255),RANDOM(255),RANDOM(255));;
canvas.brush.Color:=acolor;//RGB(RANDOM(25),RANDOM(255),RANDOM(255));;
//acolor :=canvas.Brush.Color;
canvas.MoveTo(x,y);
canvas.Ellipse(x-r,y-r,x+r,y+r);
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin

if flag then
begin
canvas.Pen.Color:=acolor;//RGB(RANDOM(255),RANDOM(255),RANDOM(255));
canvas.Pen.Width:=4*r1;
canvas.LineTo(x,y);
end;
end;
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
flag:=false;

end;

end.
 
我的那个程序和这个大同小异,不过是我是调用颜色对话框供选择颜色,也就是这样,
如果拖动对话框,就会出现许多无法消除的残像,连Messagebox函数调用时,拖动了的话,
也会出现这样的情况,不知道是为什么??
 
顶部