求助!桌面显示文本,并且选择或者点击触发相应事件. ( 积分: 200 )

  • 主题发起人 主题发起人 顺顺
  • 开始时间 开始时间

顺顺

Unregistered / Unconfirmed
GUEST, unregistred user!
这样设想:

在桌面上显示一行或者几行文字.文字背景透明.并且点击文字能触发相应事件.
在Win + D <显示桌面>的时候依然可见.并且不影响桌面图标的操作.

现在我有两个想法:
1.在Form里放一个lable.让Form Windows.SetParent(FrmMain.Handle, FindWindow(nil,'Program Manager')); 在lable的事件里作操作.
这样子有几个问题:
a.如果设置Form的AlphaBlend=true, AlphaBlendValue=0,则Label也消失不见.
b.用重画From的方法,label 的Transparent = true, 则label的背景色(透明后的)不是桌面的透明,而是Form的Color.(Label.parentColor).
c.查了一下.Lable没有THandle原因是TLabel不是TWinControl(button是TWinControl),所以不能SetParent到桌面...

2.用TextOUt直接输出,然后Hook MOuse 的事件,如果Mouse的x,y在 TextOut文字的范围内,触发相应事件.TextOUt的输出设bsClear后,可以透明桌面.
但这个方法在桌面刷新的时候就会消失,而且效果不好掌握.

本人不善于表达,可能问题表述得不是很清楚.
希望有兄弟能帮忙.分不多..见谅
 
1.
Label1.Transparent:=True;
Form1.Color:=clRed;
Form1.TransparentColorValue:=clRed;
Form1.TransparentColor:=True;
 
--
无语了,真这么简单。。。。先送你分吧。。
只怪自己太笨!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

其实本没太在意这两个值,就没有去试。。 哎。。
 
还有个方法就是把窗体设置成异形状,我以前用这个做了个桌面时钟

//-------------显示时间函数-------------------------
// FontName :字体
procedure TForm1.ShowTime(wnd:Hwnd;FCanvas:TCanvas;const FontName:string);
begin
form1.Color:=c;
beginpath(Fcanvas.Handle);
setbkmode(Fcanvas.Handle,TRANSPARENT);
Fcanvas.Font.Name:=FontName;
Fcanvas.Font.Size:=Fontsize;
Fcanvas.Font.Style:=[ss];
Fcanvas.TextOut(15,15,timetostr(time));
endpath(Fcanvas.Handle);
setwindowrgn(wnd,pathtoregion(Fcanvas.Handle),true);
end;

在timer里的ontimer里调用就OK了
procedure TForm1.Timer1Timer(Sender: TObject);
begin
showtime(handle,form1.Canvas,Fname);
end;
 
后退
顶部