急!急!急!窗体上图形被覆盖后消失了??(200分)

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

chemstar

Unregistered / Unconfirmed
GUEST, unregistred user!
我在编制一个电子云的演示程序时,遇到这样一个问题:
在paintbox中随机的围绕原子核打出很多小点以模拟电子云,但是,在窗口被别的窗口遮住后,上面的图形就消失了。
有资料说:在paint事件中加入同样的绘制图形的代码就可避免这个问题,但是,在我的这个问题中,这样做显然是不合适的,因为上面的小点是随机而且不断的产生的,而且描出一个电子云需要很长的时间,不可能在paint事件中重绘。请教各位高手怎么办???



 
调用Repaint函数重绘一次就应该可以了。
 
把电子云的点的位置记录下来,再重绘就可以了!
 
要不就用 TImage吧,不用重绘】

btw:parintbox是什么?我在控件面板上怎么没见过?
 
用TImage或Repaint;
或者将电子云的图象画到TBitmap中,这样就可以用OnPaint,或用TCanvas.Draw函数
来画TBitmap.(可以用TBitmap.Canvas.SetPix,好象是这个函数画点)
 
在该程序中,需要不停的绘制几万个点,所以不可能采用记录点的位置待其消失
再重画。
若用repaint方法,请说明白一点!!!
急死我了!!
如果谁有兴趣,我可以将它的源代码发给它!!
 
一个简单的方法:将窗体永远置在最上方即可!(form的属性中有)
 
经常保存画好的图形(把Canvas复制到一个TCanvas变量中),刷新的时候再
复制回去
 
请教boo大侠:
能否说明白点??您的思路是非常好的!!!
 
1.var C:TCanvas;c:=TCanvas.Create;
2.如你是在Form上绘制的图像,就用C.CopyRect方法把Form.Canvas复制到C上
 
再次请教boo大侠:
您的方法确实能解决关于重画的一部分问题,但是,我的问题却不只是象我先
前所述这么简单,具体情况是这样的:
我随机取shape控件(形状为一白色小圆点)的坐标,不停的移动其位置,以代表电子,并在shape控件待过的地方画一个同样大小的小绿点以代表轨迹。但结果想必
您也猜到了: 小绿点画不出来!!!很显然,它是被shape控件覆盖掉了!!所以
根本就没有图象!又如何保存?
 
1, paintbox 能解决实时问题,但解决不了重画问题,
image 正好相反
我一直没搞懂。
 
你画小绿点的方法是什么?直接对Canvas作图?
如果动态创建一个绿色的shape放在那个位置就应该可以了吧。
不过这样太耗费资源了。
不知道你对速度的要求如何?如果特别苛刻。那么就在内存中建立一个链表
保存绿色点的位置。每次都对底层图片重绘一次。
 
你只要在Image上画就不会消失了。
 
如果是这样的话,建议用Image.Canvas代替Form.Canvas,Image.Canvas
的好处是不需重画,你甚至可以在Image不可见的时候画,如动态创建一个
Image,全部画好后再显示出来。
 
首先非常感谢各位大侠的热心关注,因为我以前一直用VB编程的,只是近来才
开始学习delphi,很多基本的东西都不会,希望各位不要见笑。
我的电子云是绘在form.paintbox.canvas上的,不是我不想用image,只是不知
怎么回事,我在image上一绘图,不管原来颜色如何,它的颜色就自己变为白色!!!
而我需要将背景色保持黑色!
希望boo或程云大侠帮我!(其实,只要能将image的背景色设为黑色,那我就
什么问题都解决了!)
 
先把 brush.Color 改为 clBlack, 然后
with Image1 do
Canvas.Rectangle(0,0, Width, Height);
 
procedure TForm1.Button1Click(Sender: TObject);
begin
Image1.Canvas.Brush.Color := clBlack;
Image1.Canvas.Brush.Style := bsSolid;
Image1.Canvas.Rectangle(0,0,300,300);
end;
 
我试了2SuperMMX 与 Victortim大侠的方法,但是只要在image上一作图,
它的背景就立即变为白色!!!(我是指整个image的背景)
 
image1.canvas.Brush.color:=0;
image1.Canvas.FillRect(rect(0,0,image1.width,image1.height));
image1.canvas.Brush.color:=clwhite;
 
后退
顶部