我想在程序的运行过程中,比如说按 F10 键便呼出一窗体!up有分! 我想在程序的运行过程中,比如说按 F10 键便呼出一窗体!可是按了后呼出的窗体会被原窗体所遮挡。但别的f1-f12却正常,不知道为什么? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 使用Hook技术,把呼出的窗体激活并提到最前面,API就搞定了 有一个简单的投机取巧的方法可以实现:在你的主窗体Form1上放一个MainMenu,随便设置一个菜单项(是否顶级菜单项都无所谓),将它的ShortCut属性设为F10,在它的OnClick事件中写:procedure TForm1.xxx1Click(Sender: TObject);begin form2.Show; //或form2.ShowModal;end;然后将该菜单项的Visible设为false,如果你没有别的菜单项,你会发现运行后根本不会出现菜单栏;如果你有其它菜单项,你会发现运行后该项根本不会出现在菜单中。但是,当你按下F10....... 好做啊,自己看看RegisterHotKey函数原型及说明:BOOL RegisterHotKey( HWND hWnd, // window to receive hot-key notification int id, // identifier of hot key UINT fsModifiers, // key-modifier flags UINT vk // virtual-key code);参数 id为你自己定义的一个ID值,对一个线程来讲其值必需在0x0000 - 0xBFFF范围之内,对DLL来讲其值必需在0xC000 - 0xFFFF 范围之内,在同一进程内该值必须唯一参数 fsModifiers指明与热键联合使用按键,可取值为:MOD_ALT MOD_CONTROL MOD_WIN MOD_SHIFT参数 vk指明热键的虚拟键码 首先(举个例子): RegisterHotKey(handle,globaladdatom('hot key'),MOD_ALT,vk_f12);然后在form中声明一个函数(过程): procedure hotkey(var msg:tmessage);message wm_hotkey;过程如下:procedure TForm1.hotkey(var msg:tmessage);begin if (msg.LParamHi=VK_F12) and (msg.LParamLo=MOD_ALT) then begin form1.show; SetForegroundWindow(handle); end;end;这样,不管你在什么地方,窗口就会显示出来。当然,你要GlobalDeleteAtom;unit Unit1;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } aatom:atom; procedure hotkey(var msg:tmessage);message wm_hotkey; public { Public declarations } end;var Form1: TForm1;implementation{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);begin aatom:=globaladdatom('hot key'); RegisterHotKey(handle,aatom,MOD_ALT,vk_f12);end;procedure TForm1.hotkey(var msg:tmessage);begin if (msg.LParamHi=VK_F12) and (msg.LParamLo=MOD_ALT) then SetForegroundWindow(handle);end; procedure TForm1.FormDestroy(Sender: TObject);begin globalDeleteatom(aatom);end;end. 为什么要那么麻烦,在show之后用application.bringtofront;就可以了。好象也可以用myform.bringtofront oracle_lover(数据库情人) 讲得不错 TWebBrowser的使用问题 如何判断事件指向的过程是否是指定过程 ftp问题 Delphi7中如何利用Rave进行报表设计? 奇怪的popupmenu? 如何将一个SELECT结果保存为一个TABLE 下个星期三去杭州应聘网页设计,带不带我的联想V21笔记本呢? 哪位网友可以帮助我? 编写应用程序,用什么语言好,我是菜手! 怎样使DBImage中的图片不超过DBImage本身的大小? 怎样再注册表中写入一个信息 就能启动指定的程序 请问如何实现图象的拖动操作?
在你的主窗体Form1上放一个MainMenu,随便设置一个菜单项(是否顶级菜单项都无所谓),将它的ShortCut属性设为F10,在它的OnClick事件中写:
procedure TForm1.xxx1Click(Sender: TObject);
begin
form2.Show; //或form2.ShowModal;
end;
然后将该菜单项的Visible设为false,如果你没有别的菜单项,你会发现运行后根本不会出现菜单栏;如果你有其它菜单项,你会发现运行后该项根本不会出现在菜单中。但是,当你按下F10.......
自己看看
RegisterHotKey函数原型及说明:
BOOL RegisterHotKey(
HWND hWnd, // window to receive hot-key notification
int id, // identifier of hot key
UINT fsModifiers, // key-modifier flags
UINT vk // virtual-key code);
参数 id为你自己定义的一个ID值,对一个线程来讲其值必需在0x0000 - 0xBFFF范围之内,对DLL来讲其值必需在0xC000 - 0xFFFF 范围之内,在同一进程内该值必须唯一
参数 fsModifiers指明与热键联合使用按键,可取值为:MOD_ALT MOD_CONTROL MOD_WIN MOD_SHIFT
参数 vk指明热键的虚拟键码
首先(举个例子):
RegisterHotKey(handle,globaladdatom('hot key'),MOD_ALT,vk_f12);
然后在form中声明一个函数(过程):
procedure hotkey(var msg:tmessage);message wm_hotkey;
过程如下:
procedure TForm1.hotkey(var msg:tmessage);
begin
if (msg.LParamHi=VK_F12) and (msg.LParamLo=MOD_ALT) then
begin
form1.show;
SetForegroundWindow(handle);
end;
end;
这样,不管你在什么地方,窗口就会显示出来。
当然,你要GlobalDeleteAtom;unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
aatom:atom;
procedure hotkey(var msg:tmessage);message wm_hotkey;
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);
begin
aatom:=globaladdatom('hot key');
RegisterHotKey(handle,aatom,MOD_ALT,vk_f12);
end;procedure TForm1.hotkey(var msg:tmessage);
begin
if (msg.LParamHi=VK_F12) and (msg.LParamLo=MOD_ALT) then
SetForegroundWindow(handle);
end; procedure TForm1.FormDestroy(Sender: TObject);
begin
globalDeleteatom(aatom);
end;end.
好象也可以用myform.bringtofront