有一张bmp或者jpg在Image上,想在一些位置标志一些数据,而且数据是动的,例如:在一个管子旁边标志他的实时流量.
解决方法1:用label显示数值,问题是:如果设置stretch为true;那么如果窗体的大小改变时,也就是图象放大或者缩小了,label的位置相对bmp上的一个点位置改变了.解决方法2:用Canvas.TextOut,因为Canvas.TextOut是随着Image放大和缩小的.但是在文字下面有底色,如果设setbkmode(Image1.Canvas.Handle,transparent);这样没有了底色,这样的话,应该是一直在一个点上输出文字,而成了文字叠加,最后形成一个黑条.第一和第二种方法如何解决?

解决方案 »

  1.   

    第一次输出文字时要Copy出底色每次画文字时都是在内存的一bmp 上先放上底再画字然后再把这个bmp copy 到Canvas上去,前提是你的底图不是动态的如果底图是动态的你只要在桌面用透明模式 Canvas上画文字,而不是你的图像或其窗口的Canvas...即可实现
      

  2.   

    如果用textout输出动态信息,而且还要设置他的位置很麻烦.决定用label代替!!
    image 在stretch为true的情况下,如何保证label相对image上的一个点的位置不变呢?
      

  3.   

    可以使用组件
    TCanvasTexthttp://www.codeidea.com/html/components.html
      

  4.   

    用一个图片显示一个设备的示意图,然后标出一些管道等信息的实时信息,不知道到大家熟悉软控的组态图吧,暂时想的实现方式是用label标志出某一个管道的实时数据.但是如果image的strect设为true,在窗体放大缩小时,label相对某一个管子的位置就发生了变化,我想在image的窗体发生变化时,调整label的位置,这个调整的方法应该如何确定呢?  
      

  5.   

    1、首先创建Image_Back:TImage,把原图片复制一份
    2、在Image_Back上写字
    3、把写好字的内存图赋值给Image显示
    4、Image_Back读取原来的图片
    再重复2步骤
      

  6.   

    Canvas.Brush.Bitmap := mybgpic;
     Canvas.FillRect(Rect(0,0,600,100));    Canvas.Font.Size := 12;
        Canvas.Font.style :=[fsbold]   ;
        Canvas.Font.Color:=rgb(255,0,0);
         SetBkMode(Canvas.Handle,TRANSPARENT);//文字透明!
       Canvas.TextOut(0,0,'输出的字符串');
    看看这个有用吗