我想做一个在桌面上可以显示滚动文字的窗体,滚动文字我可以做到,
但是想把文字后面的窗体设为透明的能看到的只有桌面和文字,
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类里面是我要显示的文字
这样好像可以实现后面窗体透明但是显示不正常一直在闪而且字体看不完全有些看不见,请问各位能人高手
有没有更好的办法.请多多指教,本人不胜感激.
但是想把文字后面的窗体设为透明的能看到的只有桌面和文字,
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类里面是我要显示的文字
这样好像可以实现后面窗体透明但是显示不正常一直在闪而且字体看不完全有些看不见,请问各位能人高手
有没有更好的办法.请多多指教,本人不胜感激.
如果想消除闪动,最好将刷新显示的程序改变算法,使得它只有在需要的情况下才刷新,否则不刷新即可。
当然如果将窗体或显示等部分设置上DoubleBuffered在某些情况下能够减少闪动,但不能从根本上消除。
要是我不加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);
就不闪而且显示很正常,就是字体窗体不会透明.跟这个有关系统吗.
把form的transparentcolor设置为true
transparentcolorvalue设置为clBlue不知道会不会和你其他的需求冲突
不要用label或者Bitmap直接用form的canvas写文字,form上不放弃他控件,把窗体颜色改成和窗体透明色一样的颜色
borderStyle改成None位置StayOnTop
begin
BorderStyle := bsNone;
Brush.Style := bsClear;
end;
这样试试