Edw*_*Yip 9 delphi winapi popup
当窗口A显示时,我想显示另一个非模态弹出窗口B,但是:
正如你所看到的,我想要的窗口B就像一个更有用的弹出窗口,就像一个弹出菜单(当你希望它通过点击任何其他部分来逃避时,它不像一般的非模态窗口那么障碍父窗口).
我清楚我的问题了吗?谢谢.
我发现"1"的最简单的解决方案是,一旦弹出窗体被激活(在WM_ACTIVATE处理程序中),就将WM_NCACTIVATE发送到调用表单,以便调用表单将使用活动颜色绘制其标题.您必须在弹出窗体中有一个调用表单的引用才能实现此目的.
对于"2",您可以在同一个WM_ACTIVATE处理程序中释放弹出窗体,这不会占用调用窗体的单击.
所以...... 这样应该转到弹出窗体;
type
TForm2 = class(TForm)
[..]
private
FOwner: TForm;
procedure WmActivate(var Msg: TWMActivate); message WM_ACTIVATE;
public
constructor Create(AOwner: TComponent); override;
[...]
constructor TForm2.Create(AOwner: TComponent);
begin
if not (AOwner is TForm) then
raise Exception.Create('Owner should be TForm');
FOwner := TForm(AOwner);
inherited;
end;
procedure TForm2.WmActivate(var Msg: TWMActivate);
begin
SendMessage(FOwner.Handle, WM_NCACTIVATE, Ord(Msg.Active <> WA_INACTIVE), 0);
inherited;
if Msg.Active = WA_INACTIVE then
Release;
end;
Run Code Online (Sandbox Code Playgroud)
并提供调用表单作为弹出窗体的所有者;
procedure TForm1.Button1Click(Sender: TObject);
var
PopForm: TForm2;
begin
PopForm := TForm2.Create(Self);
[..]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9542 次 |
| 最近记录: |