我做了一个小软件。在主窗体中创建了一个panel控件,然后在panel控件上动态添加了十个Image控件(这十个Image控件都有拖放功能)和一个label控件,并且label控件的长宽和panel一样大。我用了
label1.Canvas.MoveTo(a,b);
label1.Canvas.LineTo(c,d);来画线。(画线是用于连接这些Image的)现在问题就在于画完线后,我打开其他的窗体后,打开的窗体(打开的窗体是最大化)就覆盖了画的那些线后,我关闭后这些线就被抹掉了。我想抹掉后,我再画一次就可以拉,所以写了一个画线的过程,然后我在每个窗体的“关闭”按钮中都调用这个过程。从而达到被抹掉的线再次画上。但我运行后,关闭子窗体时,那些线仍然不出来。我又一步一步的运行程序,但我的那个画线的过程又都运行了。我感觉好象是在关闭子窗体以前就执行了这个过程。但我又找不到解决的办法请大家帮我想想。

解决方案 »

  1.   

    这个你走错了方向:
    你可以接获label1的消息,然后在WM_PAINT消息中画。
    截获消息的办法可以采用嫁接的办法。即在label1的WndProc方法上做手脚。你可以在网上找代码。
    我的控件就是采用这种办法的:
    http://www.2ccc.com/article.asp?articleid=1997
      

  2.   

    to  xthmpro_cn(安徽农民*在外打工) 
    能说清楚一点好吗?你说的那个label1的WndProc方法我怎么找不到呢?
      

  3.   

    在Image控件的重画事件再画一次线就行
      

  4.   

    xthmpro_cn(安徽农民*在外打工)说的方法是可行的不过是否可以在窗体的OnPaint中写入你的事件?
    如:
    procedure TForm1.FormPaint(Sender: TObject);
    begin
      Label1.Canvas.MoveTo(0, 0);
      Label1.Canvas.LineTo(Label1.Left + Label1.Width, 
        Label1.Top + Label1.Height);
      inherited;
    end;
      

  5.   

    to  xthmpro_cn(安徽农民*在外打工) 
    ,你把标题写成“标签”吧。完后给你100分
      

  6.   

    to  xthmpro_cn(安徽农民*在外打工) 
    我在线等你呢!