关于模态窗口和Windows资源管理器、IE工具栏按钮图形的资源存放的DLL(100分)

  • 主题发起人 主题发起人 Kingron
  • 开始时间 开始时间
K

Kingron

Unregistered / Unconfirmed
GUEST, unregistred user!
1:资源管理器,IE等等,这些程序的工具栏都有一些图标,我想提取出来,
但是我找了好久,也不知道他们保存在那个DLL里面!谁能告诉我?

2:一个技术型的问题:
我们知道,使用Windows2000的时候,如果是Windows2000本身的对话框,
显示一个模态的窗口的时候,如果这个时候单击调用模态窗口的窗口,
那么这个模态窗口会闪动标题栏来提示用户!这是一个很好的功能,
不知道用Delphi怎么做?我写了好几个测试程序,但是都找不着门路。
也许用纯API创建可以,但是不用纯API有没有办法做到呢?要方法简单哦。
 
1、大概是在 windows 系统目录下以 sh 开头的几个 DLL 中,好象有种程序能一次把一个
目录下所有程序中的图标都抓出来,你可以找找看。
2、试了一下,模态的 Form 不能收到鼠标在它外面点击的消息,但位于它下面的同一程序
中的另一个 Form 可以间接得到该消息。例如:
MainForm 是 Form1, 按下 Form1 上的 Button1 后用 ShowModal 将 Form2 显示出来,
若按以下对 TForm1 的消息处理

TForm1 = class(TForm)
...
protected
procedure WMSetCursor(var Msg: TWMSetCursor); message WM_SETCURSOR;
...
end;
implementation
...
procedure TForm1.WMSetCursor(var Msg: TWMSetCursor);
var
i: Integer;
Form: TForm;
begin
if (Msg.MouseMsg = WM_LBUTTONDOWN) and (GetActiveWindow <> 0) then
begin
Form := Screen.ActiveForm;
if (Form <> Self) and (fsModal in Form.FormState) then
begin
i := 0;
while (i < 12) do
begin
FlashWindow(Form.Handle, True);
Sleep(45);
Inc(i);
end;
end;
end;
inherited;
end;
...
则点击 Form2 下的 Form1 时,模态的 Form2 的 TitleBar 将短暂闪动。我对比了 Win2K
中的对话框,觉得模拟的效果还过得去。
 
第一个问题:browseui.dll
第二个问题:用CreateDialog()等Dialog API建立的窗口,会自动拥有这种属性!
所以,应该修改VCL的建立窗口的源代码,可能是CreateParams,传递某一个参数进去即可。
 
DFW的高手让人失望。

第二个问题解决方法如下:
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;

这样,就会有那种闪动标题栏的效果了。
 
kingron:
你的方法在 Win9X 下好象无效? 我感觉虽然人越来越多,但以前的很多高手似乎都很
少上来了,大概是比较忙吧,而论坛上许多缺乏自己钻研精神的问题,大概也令他们兴味
索然.
 
To bbkxjy:
这个功能是Win2000的新的功能,当然在Win9x下面无效了。:),没有看到我的题目吗?

说句实在话,我的很多问题都没有满意的答案,最后我自己解决或者不了了之。(也许太难?)
最看不惯的是某些人的自恃甚高,瞧不起别的,满身优越感,实际上呢?天知道!
 
接受答案了.
 
后退
顶部