第一次发文,一泻千里的提问题!(100分)

  • 主题发起人 主题发起人 cxfirefox
  • 开始时间 开始时间
C

cxfirefox

Unregistered / Unconfirmed
GUEST, unregistred user!
1、我在画图的时候,实现类似于矢量图的拖拽,是在mouseMove中用pen.mode:=pmNotXor重画,但是对于一些组合图形,比如说两个圆相交而成的一个图形,我在拖动的时候,这两个圆的交点会在画布上留下痕迹,我只能用brush.color:=clwhite,然后FillRect来解决,但是在拖动过程中会仍然会出现一些痕迹,那在处理交点留下的痕迹的时候有没有更好的办法呢?
2、对于Polar Draw,有没有那位大虾用过,能不能给个例子看看?
 
用notXor确实存在你说的问题,我以前做股票分析的K线时也遇到过,后来使用双缓冲,在后台重新绘制,然后再画到前台,效果还可以。
 
to 爱元元的哥哥:能不能举个例子呢?这个前台后台你是采用什么机制呢?
 
很简单,双缓冲

在内存建立一个DC
with tbitmap.create do
try
Canvsa.draw(); // 这里假如你的绘制工作
Bitblt(); // 这里把画好的DC转移到前台
finally
free;
end;
 
但是在图形的拖动中,必须随时显示图形啊,如果先再后台绘制好,在画到前台,可能会失去动态的效果吧?
 
不会的,你试一下就知道了
 
最好建立图层类,每个组件占一个图层,这样可以减少绘画量
 
to 爱元元的哥哥:我在mousemove的时候采用你的方法,但是为什么拖动后的图形看不到了呢?
 
to 爱元元的哥哥:我简单的作了一个试验,发现确实是画不出来,不知道我的错误在那里指点一下吧?

procedure TForm1.Button1Click(Sender: TObject);
begin
with TBitmap.Create do try
canvas.Pen.Color:=clblue;
canvas.Brush.Style:=bsclear;
canvas.Ellipse(rect(100,200,300,400));
canvas.Ellipse(rect(130,230,330,430));
bitblt(Form1.Canvas.Handle,0,0,width,height,canvas.Handle,0,0,srccopy);
finally free;
end;
end;
end.
 
实在不行你用DelphiX试试?
每个图形当成一个Sprite,应该可以实现你的要求。
 
delphiX是什么东东啊?能不能详细解释一下!我是菜鸟!
 
我随便说说的
就是Delphi里使用DirectX的东西。
你说的东西我可从来没做过 :(
 
后退
顶部