Как сделать окно наподобие всплывающих уведомлений Windows 7 (WS_THICKFRAME, но НЕ ИЗМЕНИМО) - PullRequest
7 голосов
/ 14 сентября 2011

Я только что создал маленькое приложение здесь в 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 позволяет пользователю изменять размер окна.Как я могу это исправить?

Resizable Window Issue

Ответы [ 4 ]

6 голосов
/ 14 сентября 2011

Вы можете предотвратить изменение размера, обработав WM_GETMINMAXINFO .

Однако это не помешает использованию курсора изменения размера. Для этого вы можете обрабатывать WM_NCHITTEST.

1 голос
/ 01 октября 2012

Просто обработайте сообщение WM_NCHITTEST и всегда возвращайте значение HTCLIENT.

Что будет означать для ОС, что она находится над клиентской областью приложения.Затем он не будет показывать курсор изменения размера.

Я использую этот подход в приложении WPF.

0 голосов
/ 11 марта 2014

Используйте следующий код, и вы избавитесь от изменения размера курсора мыши.

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.
0 голосов
/ 07 октября 2013

Попробуйте этот стиль: WS_DLGFRAME (0x00400000)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...