7

我刚刚在 Delphi 7 中制作了一个小应用程序,它模拟了默认系统图标,如音量、电池、时钟、网络。

我正在尝试在此处遵循所有 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 允许用户调整窗口大小。我怎样才能解决这个问题?

可调整大小的窗口问题

4

4 回答 4

6

您可以通过处理WM_GETMINMAXINFO来防止调整大小。

但是,这不会阻止使用调整大小光标。为此,您可以处理WM_NCHITTEST.

于 2011-09-14T00:46:04.003 回答
1

只需处理WM_NCHITTEST消息并始终返回HTCLIENT值。

这对于操作系统来说意味着它位于应用程序的客户区域之上。然后它不会显示调整大小的光标。

我在 WPF 应用程序中使用这种方法。

于 2012-10-01T08:08:30.147 回答
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.
于 2014-03-10T21:26:59.390 回答
0

试试这种风格: WS_DLGFRAME (0x00400000)

于 2013-10-07T08:32:20.873 回答