在线等待画直线,曲线,矩形等的轨迹问题
我用Canvas画直线时,mousemove是无法显示轨迹,只有当mouseup时画出直线,但这样达不到要求,求mousemove时怎么处理?
我尝试过鼠标移动过程中把pen.mode设置成pmxor或pmnot把旧的线条给覆盖掉,但这样问题又出现了,我画矩形时自动用与底色相反的颜色填充,可我的填充色可以随意变换或者选择不填充.
[解决办法]
用一个标记值,当鼠标down的时侯,iTag=1,鼠标Up时,iTag=0
当iTag=1的时候,只要move就画线,当然要把先前的线擦掉。鼠标Up后,刚好留下最后的那根线。
至于后面的问题,可以再设置一下线形。
[解决办法]
用异或的方式画一条线,再用异或的方式画次,该线就会消失了。
[解决办法]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
type
TForm1 = class(TForm)
Image1: TImage;
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
startX, startY: integer;
endX, endY: integer;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
startX := X;
startY := Y;
endX := X;
endY := Y;
end;
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
//清除掉原来的
(Sender as TImage).Canvas.Pen.Color := clWhite;//切换到背景色对原来的线进行擦除
(Sender as TImage).Canvas.MoveTo(startX, startY);
(Sender as TImage).Canvas.LineTo(endX, endY);
//画出现在的
(Sender as TImage).Canvas.Pen.Color := clBlack;
(Sender as TImage).Canvas.MoveTo(startX, startY);
(Sender as TImage).Canvas.LineTo(X, Y);
//更新结束位置
endX := X;
endY := Y;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
image1.Canvas.Brush.Style := bsClear;
image1.Canvas.Pen.Color := clBlack;
end;
end.
[解决办法]
operfume(橘子香水)
用异或的方式画一条线,再用异或的方式画次,该线就会消失了。
----------------------------------------------
同意楼主!