一些应用程序的模式窗体显示时,如果鼠标点了应用程序的其他地方,则模式窗体的标题栏会闪烁以提醒用户。我想问的是,在什么时候执行我闪烁窗体的代码,也就是怎么判断。呵

  • 主题发起人 shangshang
  • 开始时间
非常感谢kingron大侠,本人获益非浅。;)
我问这个问题的目的是
想在这个时候去写别的东西,并不是要它闪烁。呵呵。有没有好的消息或事件可以使用的?
 
进来学习一下。
 
我猜想,可以不可再Application。OnMessage中进行判断,判断ActivWindow是不是Form2,
并且判断鼠标的坐标是不是在Form2的范围内?我做了试验,可以截获键盘消息,但是用鼠标
点击的时候,还是不行。。。。。。。。。。。。
 
模态下,主程序是处在锁定状态,无法工作,

需要建立线程并监视鼠标点击,然后……

if form2 as ActivWindows then
if 鼠标点击 then
begin
取得鼠标位置;
if 鼠标位置在 form1 内并在 form2 外 then
messagebox('Stop!!!');
end;

:-]

没试,但应该没问题。
 
WM_SHOWWINDOW
 
用鼠标消息处理过程不行吗?
 
form.showmodal 过程实际上建立了自己的消息循环,给所有本线程窗口派发消息。
而把调用前的ActiveWindow及其子窗口disable掉,但这只不过使它们不能获得焦点并
接受键盘输入而已,这些disable掉的窗口仍可接受其它消息.
所以就用onmousedown事件就可以,不用建立新线程:
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if assigned(form2) then
if not (self.Enabled) and ( getactivewindow=form2.Handle) then
begin
//add your code here
end;
end;
 
多人接受答案了。
 
顶部