DELPHI怎么设置老板键?

kayoo 2012-03-01 02:21:25
比如按一下F2,窗体隐藏,再按一下F2,窗体重现。
我用了RzTrayIcon这个控件,要求把它的托盘小图标也一起隐藏。恢复的时候一起恢复,请问怎么做到?另外我的程序可能有时候开好几个,能不能做到一起隐藏和一起重现呢?
假如RzTrayIcon没办法隐藏托盘图标的话请告知更好的方案,谢谢。
另外,我又用CoolTrayIcon测试了一下,隐藏的时候将icon的visible设置为false,但是还原的时候却发现最小化按钮失效了,不知道何故,还请解答。
...全文
228 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
kayoo 2012-03-02
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 funxu 的回复:]
既然LZ愿意接受批评,那我也就回复一下,老板键是用系统热键实现的,隐藏托盘图标还是别用控件了,系统有个apiShell_NotifyIcon可以方便添加删除
[/Quote]
谢谢,明白了
funxu 2012-03-02
  • 打赏
  • 举报
回复
既然LZ愿意接受批评,那我也就回复一下,老板键是用系统热键实现的,隐藏托盘图标还是别用控件了,系统有个apiShell_NotifyIcon可以方便添加删除
funxu 2012-03-02
  • 打赏
  • 举报
回复
想回答这贴却不得不复制粘贴,所以无压力飘过了
kayoo 2012-03-02
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 kaikai_kk 的回复:]
采不采纳是楼主决定,给不给分也是楼主决定,别人复制粘贴也是辛苦帮你找了
你难道觉得RzTrayIcon能实现老板键???
1楼的答案很正确,只是你不会加以应用,1,2年后你再看你的帖子吧,到底别人的回答有没有价值!

好了,当我飘过啥也没留下,不跟你辩了!!!
[/Quote]
谢谢批评!确实不该否定2楼的劳动。抱歉2位
kaikai_kk 2012-03-02
  • 打赏
  • 举报
回复
采不采纳是楼主决定,给不给分也是楼主决定,别人复制粘贴也是辛苦帮你找了
你难道觉得RzTrayIcon能实现老板键???
1楼的答案很正确,只是你不会加以应用,1,2年后你再看你的帖子吧,到底别人的回答有没有价值!

好了,当我飘过啥也没留下,不跟你辩了!!!
kayoo 2012-03-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 kaikai_kk 的回复:]
引用 2 楼 kayoo 的回复:
复制粘贴我也会,不需要这样的答案谢谢,我说的很明白了,要求可以隐藏和恢复托盘的RzTrayIcon图标,如果这个控件实在无法做到的话那换一个控件也行。


你的问题就是要通过注册系统热键来实现,1L的解释就是如何实现注册系统热键的,LZ这么否定人家?
我也不敢回答了,只说到这里:

隐藏窗口Form.Hide即可,右下角图标删除就是了(自己会添加,……
[/Quote]
难道你很喜欢复制粘贴混分的人吗?托盘图标是RzTrayIcon自动加上的,但是这个控件并没有Icon.visible这个参数,所以才来提问。
kaikai_kk 2012-03-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 kayoo 的回复:]
复制粘贴我也会,不需要这样的答案谢谢,我说的很明白了,要求可以隐藏和恢复托盘的RzTrayIcon图标,如果这个控件实在无法做到的话那换一个控件也行。
[/Quote]

你的问题就是要通过注册系统热键来实现,1L的解释就是如何实现注册系统热键的,LZ这么否定人家?
我也不敢回答了,只说到这里:

隐藏窗口Form.Hide即可,右下角图标删除就是了(自己会添加,不会删除吗)
liangpei2008 2012-03-02
  • 打赏
  • 举报
回复
RegisterHotKey+CreateDesktop
1.创建虚拟桌面,把应用程序放到一个虚拟桌面里
2.用热键切换桌面
kayoo 2012-03-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 case5166 的回复:]

连RzTrayIcon图标都隐藏了,窗口也不在了,通过什么来监视键盘按键呢?个人觉得不太可行,坐等高手赐教
[/Quote]
只要进程还在,不就可以吗?隐藏并不是关闭啊
CatSmoking 2012-03-01
  • 打赏
  • 举报
回复
只要注册了全局热键就是可以的。
我看见佛 2012-03-01
  • 打赏
  • 举报
回复
连RzTrayIcon图标都隐藏了,窗口也不在了,通过什么来监视键盘按键呢?个人觉得不太可行,坐等高手赐教
kayoo 2012-03-01
  • 打赏
  • 举报
回复
复制粘贴我也会,不需要这样的答案谢谢,我说的很明白了,要求可以隐藏和恢复托盘的RzTrayIcon图标,如果这个控件实在无法做到的话那换一个控件也行。
Bo_Sys 2012-03-01
  • 打赏
  • 举报
回复
用Delphi实现老板键功能(即通过快捷键显示隐藏窗口)2011-05-30 16:39
//因为我们还要在程序退出的时候,消除这个热键, 所以需要声明一个全局变量:
//
//HotKeyId: Integer;
//
//第一步:
//
//在窗口的create事件中,加入以下代码
//
//HotKeyId := GlobalAddAtom(‘MyHotKey’) - $C000;
//注: HotKeyId的合法取之范围是0x0000到0xBFFF之间, GlobalAddAtom函数得到的值
//在0xC000到0xFFFF之间,所以减掉0xC000来满足调用要求。
//
//第二步:
//
//在上面的代码下面加入:
//
//RegisterHotKey(Handle, hotkeyid, MOD_ALT, VK_F8);
//
//热键的辅助按键包括Mod_Ctrl 、Mod_Alt、Mod_Shift,对于Windows兼容键盘还支持Windows
//键,即其键面上有Windows标志的那个键,其值为Mod_win。
//
//上面 的代码注册了一个热键:ALT+F8。当然如果你希望象TAKEIT那样,只用F8, 就这么写:
//
//RegisterHotKey(Handle, hotkeyid, 0, VK_F8);
//
//注:handle是一个特殊的变量,它表示当前窗口的句柄。
//
//这个函数你应该能句举一反三了吧。
//
//原理:
//
//一旦热键设置成功,在程序应用过程中如果有相应的键被按下,Windows系统都会给你的应
//用程序发送一个消息WM_HOTKEY,不管你的应用程序是否为当前活动的。其中WM_HOTKEY消
//息的格式为:
//
//idHotKey = (int) wParam; // 该参数在设置系统级的热键有用,一般不予使用
//fuModifiers = (UINT) LOWORD(lParam); //热键的辅助按键
//uVirtKey = (UINT) HIWORD(lParam); //热键的键值
//
//第三步:
//
//注册了热键,就该写下响应代码了。
//
//首先,在程序头部分的private段中加入声明 (作用是声明这个过程,和声明变量类似。
//关于如何声明函数、过程,请请参考各自的帮助文件或其它资料):
//
//procedure HotKeyDown(var Msg: Tmessage); message WM_HOTKEY;
//
//然后在程序中加入如下代码:
//
//procedure Tfmain.HotKeyDown(var Msg: Tmessage);
//begin
// if (Msg.LparamLo = MOD_ALT) AND Msg.LParamHi = VK_F8 then // 假设热键为ALT+F8
// begin
// end;
//end;
//
//最后一步:
//
//在窗口的close事件中加入
//
//UnRegisterHotKey(handle, HotKeyId); //注销HotKey, 释放资源。
//

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//完整程序如下:
unit Main;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
FHotKeyId: Integer;
procedure HotKeyDown(var Msg: Tmessage); message WM_HOTKEY;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
FHotKeyId := GlobalAddAtom('MyHotKey') - $C000;
RegisterHotKey(Handle, FHotKeyId, MOD_ALT, VK_F8);
end;

procedure TForm1.HotKeyDown(var Msg: Tmessage);
begin
if (Msg.LparamLo = MOD_ALT) AND (Msg.LParamHi = VK_F8) then // 假设热键为ALT+F8
begin
ShowWindow(Application.Handle, SW_SHOW);
ShowWindow(Self.Handle, SW_SHOW);
if IsIconic(Application.Handle) then
ShowWindow(Application.Handle, SW_RESTORE)
else
SetForegroundWindow(Application.Handle);
end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
UnRegisterHotKey(Handle, FHotKeyId);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowWindow(Application.Handle, SW_HIDE);
ShowWindow(Self.Handle, SW_HIDE);
end;

end.

5,914

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧