系统热键问题。(我只有42分了,全部给上了)(42分)

  • 主题发起人 主题发起人 lmh0519
  • 开始时间 开始时间
L

lmh0519

Unregistered / Unconfirmed
GUEST, unregistred user!
如下程序,按一下热键显示ShowMessage。
现在的问题是:最小化窗口后,按一下热键,但其它的窗口激活着,比如IE,ShowMessage被档住了,显示不出来,再按一下热键,这时其它窗口变灰了,ShowMessage才被弹出来。

怎么样才能按一下热键就显示出ShowMessage?

procedure TForm1.WMhotkeyhandle(var msg: Tmessage);

begin
if (msg.LParamHi = $41) and
(msg.lparamLo = MOD_CONTROL or mod_Alt or MOD_WIN) then
begin
msg.Result := 1; //该消息已经处理
application.BringToFront;
ShowMessage('你已经按下热键')
end;
end;
 
把ShowMessage改成
MessageBox(Handle ,'内容','标题', MB_SETFOREGROUND)或
MessageBox(Handle ,'内容','标题', MB_TOPMOST)
他们的区别,你自己去找吧!
 
后一个表示显示在最顶端
 
用当前活动窗口的句柄就可以保证在前台
 
ShowMessage必须以你原来的进程主窗体为parent,所以可能显示不出来,
建议使用MessageBox,可以任意制定Handle
 
application.BringToFront;改为application.Progressmessage;试试!application.BringToFront;是把你的窗体在最顶端显示!挡住了ShowMessage('你已经按下热键')的消息,所以看不见。application.Progressmessage;是让系统强行处理消息队列里的消息。
 
按照ChJK的方法显示MessageBox是行了,但我现在。。。。
想按个热键后,Create一个线程,显示一个窗口form2.ShowModal(进度条),这个窗口还是按上面所说的一样在第二次快捷键后才显示出来,这个有什么对策吗?
 
你可以让form2在最上面窗口风格为fsStayOnTop
或者用api函数
SetWindowPos(Form2.handle, HWND_TOPMOST, 0, 0, 0, 0,
SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
 
ChJK:
按你的方法用API函数成功了。
现在还有一个小小的问题请教,最后一个问题了。
test_Count:integer;
MessageBox(Handle ,inttostr(test_Count),'成功', MB_TOPMOST);
MessageBox(Handle ,form1.ComboBox1.Text,'成功', MB_TOPMOST);
这两个语句怎么表达,编译的时候通不过(incompatible types)。
 
MessageBox 显示字符要用PChar的吧?
 
inttostr(test_Count),form1.ComboBox1.Text,这两个数怎么转化呢?
 
后退
顶部