我想做一个在桌面上可以显示滚动文字的窗体,滚动文字我可以做到,
但是想把文字后面的窗体设为透明的能看到的只有桌面和文字, 
    beginpath(bmp.canvas.Handle);
    setbkmode(bmp.canvas.Handle,Transparent);
    DrawText(bmp.Canvas.Handle,pchar(SItem[i]),-1,R1,Dt_Center or Dt_Top);
    StrokeAndFillPath(bmp.Canvas.Handle);
    endpath(bmp.canvas.Handle);
    rgn:=pathtoregion(bmp.canvas.Handle);
    setwindowrgn(handle,rgn,true);
这是我的一段程序rgn是hrgn类的,bmp是TBitMap类的我自已画的,SItem是TstringList类里面是我要显示的文字
这样好像可以实现后面窗体透明但是显示不正常一直在闪而且字体看不完全有些看不见,请问各位能人高手
有没有更好的办法.请多多指教,本人不胜感激.

解决方案 »

  1.   

    闪动是因为刷新显示造成的。如果闪得厉害,只能说明你的程序刷新的太厉害了。
    如果想消除闪动,最好将刷新显示的程序改变算法,使得它只有在需要的情况下才刷新,否则不刷新即可。
    当然如果将窗体或显示等部分设置上DoubleBuffered在某些情况下能够减少闪动,但不能从根本上消除。
      

  2.   

    这个不仅公是闪的问题噢,一篇文字几能显示几行.
    要是我不加beginpath(bmp.canvas.Handle); 
        setbkmode(bmp.canvas.Handle,Transparent); 
        StrokeAndFillPath(bmp.Canvas.Handle); 
        endpath(bmp.canvas.Handle); 
        rgn:=pathtoregion(bmp.canvas.Handle); 
        setwindowrgn(handle,rgn,true); 
    就不闪而且显示很正常,就是字体窗体不会透明.跟这个有关系统吗.
      

  3.   

    放个label,把label的color设置为clblue
    把form的transparentcolor设置为true
    transparentcolorvalue设置为clBlue不知道会不会和你其他的需求冲突
      

  4.   

    用它这个方法试试?
    不要用label或者Bitmap直接用form的canvas写文字,form上不放弃他控件,把窗体颜色改成和窗体透明色一样的颜色
    borderStyle改成None位置StayOnTop
      

  5.   

    procedure TForm1.FormCreate(Sender: TObject);
    begin
      BorderStyle   :=   bsNone;
      Brush.Style   :=   bsClear;
    end;
    这样试试