我在画拓扑图,现画好了线(Canvas)然后在相应的的方动态创建timage对象,显示bmp图,可bmp图显示后,把原来的线擦掉了,在画一遍线还是那样,请问如何解决?谢谢!

解决方案 »

  1.   

    先画BMP图,再画线,画BMP图时不需要另外创建TImage对象,直接画在一起
      

  2.   

    xzhifei(饭桶超人(抵制日货)) ,谢谢,但是我的bmp图要响应鼠标事件,还要有Hint提示,全画出来是不行的,所以我建了个timage数组来动态创建,现在基本上实现了,就是线被挡住了,请问可以解决吗?
      

  3.   

    这个好办,把BMP图的大小与位置记录下来,用数组,然后根据鼠标MOVE的XY值循环运算出当前的需要响应的BMP图,循环时应该从大到小
      

  4.   

    type
      BmpGroup=record
        aRect:TRect;//Bmp的大小
        Hint:string;//提示
        Pos:TPoint;//显示的XY坐标
      end;var
      BmpArray:Array of BmpGroup;//定义一个动态数组保存相关数据
      

  5.   

    各位高手不知到我理解的对不,你们意思是bmp图还是用绘的,然后根据鼠标MOVE的XY值循环运算出当前的需要响应的BMP图,循环时应该从大到小?可Hint怎么出来,还有我以经画好了,这样几乎要重作,改的太多了,传个图
    http://www.zlkj.com/bbs/dispbbs.asp?boardid=4&id=33
      

  6.   

    现在又发现一个问题,如果最小化窗体后在还原后,线不见了,只有bmp图了,我在Form的OnPaint里重化了线,没反映,我晕,是不是线也要作成组件啊?
      

  7.   

    显示Hint可以自己控件的:
    var
      h : THintWindow;
    begin
      h := THintWindow.Create( Self );
      with h do
      begin
        Color := clRed;
        ActivateHint( r, 'hi there!' );
        MessageBox( 0, 'Press any key to close the '
                    + 'hint window', 'THintWindow', MB_OK );
        ReleaseHandle;
        Free;
      end;还有,发现你的基础不行,特别是图像这方面,建议多看书
      

  8.   

    http://www.zlkj.com/bbs/dispbbs.asp?boardid=4&id=34
    xzhifei(饭桶超人(抵制日货)) 非常感谢!!
    再麻烦你一下,我想做出图上的效果,主机到远程的及器中还要画上路由bmp,到时点击即可用snmp查看其信息,所以想请问一下画图的实现方式,如何才能让线不被遮住,并且能一直存在,是不是不用创建timage 
    的确如你所说,我基础不行,我第一次用Delphi作程序,只看过几天书,因为项目赶的紧没办法,我以前用过几天bcb,一直找不到学习的资料,所以水平一般,很多东西只有自己取猜着试,所以..还请指点!!谢谢!!!  ^Q^
      

  9.   

    这是现在作的图:
    http://zlkj.com/bbs/dispbbs.asp?boardid=4&id=35
    我找到了原因,timage在动态创建时,Width 和 Height 值为默认值,比较大,所以...
    用了个笨办法解决了 ,但觉得不是很好,请问,我是从Timage继承了个tpImage组件来画图,如何修改
    动态创建tpImage时 它的默认Width  Height值,我试着重新发布这两个属性,没成功,不知应怎样改?
    tpImage[i]:=TtpImage.Create(Self);
    tpImage[i].Width:=bmp.Width;
    tpImage[i].Height:=bmp.Height;
    这样不行,还是先有原来的值,因为还要画好多路由器的图,所以能解决了最好!
    另外,xzhifei(饭桶超人(抵制日货)) 的方法是要在我画图的Panel里的OnMouseMove事件里循环检查吗,这样会不会变慢?
    水平有限,各位大虾不要嫌烦!!   ~~Q~~
      

  10.   

    从Timage继承了个tpImage组件,有没有将AutoSize设置为True,如果是,那就不能手动设置其大小了
    看了你发的图,感觉可以用你原来的方式解决问题,保存线条的方法就是每改一步(添加或减少线条时)就要保存下来,以便于重绘时需要(OnPaint事件)
    保存的方法就是先声明一个全局的TBitMap变量:
    Bmp:TBitMap;
    然后在窗口创建事件中创建此对象,画线时,先画在Bmp中,如:
    Bmp.Canvas.Lineto(100,100);
    画好后再画到目地画布上,如画到当前窗口上:
    Canvas.Draw(0,0,Bmp);
    就行了,在重绘时也要画:
    procedure TForm1.FormPaint(Sender: TObject);
    begin
    Canvas.Draw(0,0,Bmp);
    end;
    这样就保证线条不会丢失!
      

  11.   

    xzhifei(饭桶超人(抵制日货)) ,你好,首先谢谢你不耐烦的帮我!!
    我现在的问题是重画时,先画到bmp中在画到画布时什么都没有,另建一个工程测试也是什么都没有,我那里错了?
    var
      Form1: TForm1;
      Bmp:TBitmap;
    implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
      Bmp.Canvas.Pen.Color:=clRed;
      Bmp.Canvas.Lineto(200,100);
      Form1.Canvas.Draw(10,10,Bmp);
    end;procedure TForm1.FormPaint(Sender: TObject);
    begin
    Form1.Canvas.Draw(0,0,Bmp);
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
    Bmp:=TBitmap.Create;
    end;
      

  12.   

    问题解决了,是bmp大小没给定,xzhifei(饭桶超人(抵制日货)) 谢谢你!!!