我刚刚在Delphi 7中创建了一个small app here模拟默认系统图标,如音量,电池,时钟,网络。
我正在尝试关注此处的所有Microsoft推荐http://msdn.microsoft.com/en-us/library/aa511448.aspx#flyouts
要使窗口看起来像弹出窗口,我正在使用此代码:
//declaration
TForm1 = class(TForm)
protected
procedure CreateParams(var Params: TCreateParams); override;
end;
实施
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.Style := WS_POPUP or WS_THICKFRAME;
Params.ExStyle := Params.ExStyle or WS_EX_TOPMOST;
end;
我的问题是WS_THICKFRAME允许用户调整窗口大小。我该如何解决这个问题?
答案 0 :(得分:6)
您可以通过处理WM_GETMINMAXINFO来阻止调整大小。
但是,这不会阻止调整大小光标的使用。为此,您可以处理WM_NCHITTEST
。
答案 1 :(得分:1)
只需处理WM_NCHITTEST
消息,并始终返回HTCLIENT
值。
对于操作系统而言,这意味着它位于应用程序的客户端区域。然后它不会显示调整大小光标。
我在WPF app中使用这种方法。
答案 2 :(得分:0)
试试这种风格: WS_DLGFRAME (0x00400000)
答案 3 :(得分:0)
使用以下代码,您将摆脱调整大小鼠标光标。
unit Unit1;
interface
uses
Windows, Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs;
type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
protected
procedure CreateParams(var Params: TCreateParams); override;
procedure WMNCHitTest(var Message: TWMNCHitTest); message WM_NCHITTEST;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.Style := Params.Style or WS_THICKFRAME;
end;
procedure TForm1.WMNCHitTest(var Message: TWMNCHitTest);
begin
inherited;
with Message do begin
Result := HTCLIENT;
end;
end;
end.