Program of taskbar & hotkey

这里的人气真是不旺啊,我来添一把柴,希望能够带动大家的编程热情。这是我第一次写教程,不足之处大家多包涵。打算分两次写成一个列于桌面右侧的sidebar(中文名不知道叫什么,好像应该算是任务栏,因为主要灵感来自于Desktop Sidebar)程序,可以从网上读取天气预报,可以显示当前的时钟等基本功能(你可以加入自己的功能)。我的编程环境是Windows 2003 + Delphi 7,其他版本的delphi和windows我想都是没有问题的,演示请看附件。我想读者应该会一点Delphi,分两次主要是照顾一些初学者。OK, Let's go!

//-----------正文开始-------------------

不知到大家注意到没有?其实桌面(Desktop)和form1一样都是窗体(Window),区别在于桌面是在所有窗口的后面,我们完全可以是使我们自己的窗体具有这种性质。

procedure TForm1.FormCreate(Sender: TObject);
var
  hDeskTop:THandle;
begin
  hDeskTop:=FindWindow('Progman', 'Program Manager');
  windows.SetParent(handle,hDeskTop);

end;

按照上面的代码试一试,看看win+D会不会让这个Form1窗体最小化到任务栏?答案当然是否定的,因为它已经具有了和桌面一样的属性。这就是这次教程的技巧之一。

Sidebar应当靠在桌面的右边或者其他什么地方,这在Delphi里是十分简单的。在Object Inspector中设置Form1的BorderStyle为bsNone;Width为195;在FormCreate中加入如下:

procedure TForm1.FormCreate(Sender: TObject);
var
  hDeskTop:THandle;
  r: Trect;
begin
  r:= Screen.DesktopRect;  //读取桌面分辨率
  Self.Top := 0;
  Self.Left := r.Right-r.Left-Self.Width ; //靠右侧
  Self.Height :=  r.Bottom-r.Top;          //与桌面等高

  hDeskTop:=FindWindow('Progman', 'Program Manager');
  windows.SetParent(handle,hDeskTop);

end;

就会建立一个靠右侧的Sidebar(退出时按Alt+F2),很好玩吧。这次就到这里,下次再见。
对于初学者来说,定义系统热键(hotkey)好像是一项很难的技术,实际上在Delphi里,可以很轻松的完成。依本例来说,声明两个atom类型全局变量aF9与aF10。
var
  aF9,aF10  : ATOM;

在Form1上拖放一个WebBrowser控件(在InterNet中),名字为Web1。在form的create事件加入如下代码:
procedure TForm1.FormCreate(Sender: TObject);
begin
  aF9:=GlobalAddAtom('MyhotkeyF9');      //定义元素
  aF10:=GlobalAddAtom('MyhotkeyF10');
  RegisterHotKey(Handle,aF9,MOD_SHIFT,vk_F9);   //注册热键  Shift + F9
  RegisterHotKey(Handle,aF10,MOD_SHIFT,vk_F10); //注册热键  Shift + F10

end;

这样就定义好了热键,还需要相应热键的函数。windows的消息传递机制请参阅相关书籍,我这里只是讲对应于Delphi的手段。在form的public处加入以下
public
procedure WMhotkeyhandle(var msg:Tmessage);message wm_hotkey; //响应敏感键按键消息

在{$R *.dfm}后加入:
procedure TForm1.Wmhotkeyhandle(var msg:Tmessage);
begin
  if (msg.LParamHi=vk_F9) and (msg.LparamLo=MOD_SHIFT) then
    Web1.Navigate('http://appnews.qq.com/cgi-bin/news_qq_search?city=长春')
  else if (msg.LParamHi=vk_F10) and (msg.LparamLo=MOD_SHIFT) then
    Self.Close ;
end;

运行一下试试,按Shift+F9就会连接到天气预报;Shift+F10就会退出。

这样我们的SideBar已经具有雏形了,所欠的还有那个漂亮的时钟。那个bmpclock控件是国人作的,很好的,只是比较费资源,在网上很容易就找到。你也可以用其他的什么时钟或者是LED形式显示数字时钟。

最后一点比较重要的就是需要安装一个透明控件,把它放在Web1的上面,这样才不会有那些讨厌的右键菜单出现。透明控件的源代码如下(我在CSDN中的名字就是yuzhan):

{
   欢迎使用透明控件V1.0    Developed by yuzhan(CSDN)
   继承自TWinControl,主要功能是用来挡住一些不想让别人碰的东西,但是仍然会保持原样。

}
unit Transparent;

interface

uses
  SysUtils, Classes, Controls, Windows;

type
  TTransparent = class(TWinControl)
  private
    { Private declarations }
  protected

  public
    Constructor Create(AOwner: TComponent);override;
    procedure CreateParams(var Params: TCreateParams);override;
  published
    { Published declarations }
  end;

procedure Register;

implementation

constructor TTransparent.Create(AOwner: TComponent);
begin
  ControlStyle := ControlStyle - [csOpaque];
  inherited;
end;

procedure TTransparent.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  with Params do
  begin
  { 完全重画 }
  Style := Style and not WS_CLIPCHILDREN;
  Style := Style and not WS_CLIPSIBLINGS;
  { 增加透明 }
  ExStyle := ExStyle or WS_EX_TRANSPARENT;
  end;
end;

procedure Register;
begin
  RegisterComponents('Win32', [TTransparent]);
end;

end.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值