人真是少啊,看第一部分的人寥寥无几,这是人气凋零啊!牢骚发完了。OK,续上贴。
对于初学者来说,定义系统热键(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.