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

  • 主题发起人 shangshang
  • 开始时间
S

shangshang

Unregistered / Unconfirmed
GUEST, unregistred user!
一些应用程序的模式窗体显示时,如果鼠标点了应用程序的其他地方,则模式窗体的标题栏会闪烁以提醒用户。我想问的是,在什么时候执行我闪烁窗体的代码,也就是怎么判断。呵呵.这个问题希望有人能顺便指点一下。 (100分)<br />如题, 另,如嫌分少, 可加至300.
 
会怎么样?好像没有写完。
 
你说的什么意思呀!
 
我理解这位老兄的意思大概是这样:
比如打开Notepad,然后按Ctrl+O启动“打开文件”对话框,这时候再去点Notepad的主窗口,
那么对话框就会闪烁。
我试了几个软件,Notepad和Wordpad和Visual C++都会有这样的现象,但是Word 2002和
Delphi就没有。确实挺有意思的,不知道为什么会有不一致的问题。
 
不好意思,第一次贴的时候,标题没有贴完全, 已经修改过了.

希望各位路过的大侠指点一二.
 
Flashwindow()函数
 
我是说什么时候,或是在哪里执行flashwindow。
 
这是系统的功能把,Form2.showmodal;以后,Form1就不能响应消息了,除非你用一个线程
:)
 
我想这不是WINDOWS的功能, 我确定以前见过一篇文章,讲的是如何实现这种闪烁标题栏以
提醒用户的效果. 可惜就记得了一个flashwindow 和 Timer, 至于什么时候执行这些代码
就给忘掉了. ^_^
 
procedure tform1.button1click
begin
form2.show;
form1.bringtofront;
timer1.interval:=getcareblinktime;
timer1.enabled:=not timer1.enabled;
end;
procedure tform1.timertimer
begin
flashwindow(form2.handle,true);
end;
 
ugvanxk,我已经重申几遍了, 我要的是什么时候,用什么方法来判断出这种事件的发生.
然后执行你的这个闪烁窗体的代码. 这个代码我知道的. 不好意思.
 
大家帮帮忙啊!
 
我也想知道!up一下!
 
对啊,路过的各位,想知道答案的帮忙up一下哦。
 
我觉得是在主窗口被单击,可没有出现最上方,或又不是当前窗口的时候
 
我想应该是主窗体失去焦点的时候。
 
当模式窗口出现时,主窗体不可能响应任何事件啊。
 
Win2000里面的程序自动有这个功能!下面是我的研究:
下面的是Kingron原创的哦,在Windows 2000 Advance Server + D5下通过
一个技术型的问题:
我们知道,使用Windows2000的时候,如果是Windows2000本身的对话框,
显示一个模态的窗口的时候,如果这个时候单击调用模态窗口的窗口,
那么这个模态窗口会闪动标题栏来提示用户!这是一个很好的功能,
不知道用Delphi怎么做?我写了好几个测试程序,但是都找不着门路。
也许用纯API创建可以,但是不用纯API有没有办法做到呢?要方法简单哦。

解决方法如下:
1:要么修改Forms.pas,设立一个全局变量,并且采用动态创建窗体的方法,这样可以随时改变Form的Owner窗体。
2:普通的方法:
假设有两个窗体:
form1,form2,form2为Modal窗体,由form1来调用,那么修改form2的pas单元如下:
TForm2=class(TForm)
....
procedure CreateParams(var Para:TCreateParams);override;
...
end;

....
procedure TForm2.CreateParams(var Para:TCreateParams);
begin
inherited CreateParams(Para);
Para.WndParent:=Form1.Handle;
end;

这样,就会有那种闪动标题栏的效果了。
 
这个问题我以前研究了好久,发现用VC写程序,动态创建的话,都会有这个效果,而Office则
没有,因此,可以看出来,在Office的编写当中,不全部使用VC编写的,在界面方面,应该是
使用VB多一点儿。这是我的猜测。
另外,要修改Forms.pas编译的时候,比较麻烦,好像Borland公司不希望别人修改VCL源代码?
我有一个修改好的Forms.pas,但是现在丢失了!
以前我的代码是这样的:

wndParent:=Form1。Handle;
Form2:=TForm2。Create(Application);
wndParent:=nil;
Form2。ShowMadal;
。。。。
方式使用这种方式创建的话,都会有你说的这个效果。
我以前的一个程序就用过这个功能!在2000下很爽的!!!
 
顶部