致:卷兄(0分)

  • 主题发起人 主题发起人 suns
  • 开始时间 开始时间
S

suns

Unregistered / Unconfirmed
GUEST, unregistred user!
我再问这个问题我都觉的不好意思,我的程序快写完了,但到现在一个问题
还没有解决,就是我一打开那个在form的canvas上画东西的模块里还是有问题,
我鼠标移动时本想让它产生一个十子框,但我看了你的解答还是会在鼠标第一次
移动时产生固定的十子框,而第二个才是随鼠标移动的,我想了一些方法,可以
不产生固定的十子框,并且只有一个十子框随鼠标移动,但在鼠标移动时,canvas
上的其它东西会闪动,效果不好,所以还是没有好的方法把它作好,我也尽力拉,
希望您提供思路,谢谢

//这是你的句子
还是这样好~~~

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
x0,y0 :Integer;
begin
with Canvas do
begin
MoveTo(x0-20,y0);
LineTo(x0+20,y0);
MoveTo(x0,y0-20);
LineTo(x0,y0+20);
Pen.Mode :=pmNotXor;
MoveTo(x-20,y);
LineTo(x+20,y);
MoveTo(x,y-20);
LineTo(x,y+20);
end;
x0 :=x;
y0 :=y;
end;
 

你那个做判断标志的也不行的
 
其他朋友来帮我想一下呀!
 
兄弟啊!
我后来修正的那个程序绝对可以的,不明白你是怎么用的。

var
Form1: TForm1;
First :Boolean;
ox,oy :Integer;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
First :=True;
Canvas.Pen.Mode :=pmNotXor;
Canvas.Pen.Color :=clRed;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if not First then
begin
Canvas.MoveTo(ox-50,oy);
Canvas.LineTo(ox+50,oy);
Canvas.MoveTo(ox,oy-50);
Canvas.LineTo(ox,oy+50);
end;
Canvas.MoveTo(x-50,y);
Canvas.LineTo(x+50,y);
Canvas.MoveTo(x,y-50);
Canvas.LineTo(x,y+50);
OX :=X;
OY :=Y;
First :=False;
end;

以上程序不会在一开始就绘制一个十字框,你自己分析就明白;
至于闪烁,这是一个相对来说比较棘手的问题;
但是要看你怎么用,或者你处理消息 :WMERASEBKGND?,
其实也没有必要。
我在D5下用的,根本不存在闪烁现象。
 
d5下验证通过十字架随鼠标移动
 
用鼠标指针不好吗?
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=840391
 
这个我也做过,卷兄的方法是不会闪烁的!
 
后退
顶部