Как свернуть форму на экране

Тема в разделе "Delphi", создана пользователем WinHack, 23 ноя 2016.

  1. WinHack
    Здесь мы рассмотрим, как свернуть форму двойным щелчком мыши на заголовке подобно рулону, оставив заголовок на экране. Для этого мы будем перехватывать сообщение WM_NCLBUTTONDBLCLK. Форма сворачивается, но не убирается в панель задач.

    roll-form-to-caption.png
    Код:
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics,
      Controls, Forms, Dialogs;
    
    type
      TForm1 = class(TForm)
      private
        { Private declarations }
        OldHeight: integer;
        procedure ZipUpForm;
      public
        { Public declarations }
        procedure WndProc(var Msg: TMessage); override;
      end;
    
    var
      Form1: TForm1;
    const
      iZipHeight: integer = 38; // не менее 38 для Windows XP
    
    implementation
    
    {$R *.dfm}
    
    { Перехват сообщения WM_NCLBUTTONDBLCLK }
    procedure TForm1.WndProc(var Msg: TMessage);
    begin
      if Msg.Msg = WM_NCLBUTTONDBLCLK then
      begin
        if Msg.WParam = htCaption then
          ZipUpForm;
        end
        else
          inherited WndProc(Msg);
    end;
    
    { Процедура сворачивания и разворачивания формы }
    procedure TForm1.ZipUpForm;
    begin
      if Height = iZipHeight then
        Height:= OldHeight
      else
      begin
        OldHeight:= Height;
        Height:= iZipHeight;
      end;
    end;
    
    end.
    Вы можете перехватывать щелчки мыши и в другой части формы. Вот значения wParam, которые могут быть использованы:

    • HTBORDER - На границе окна, которое не имеет границы изменения размеров
    • HTBOTTOM - На нижней горизонтальной границе окна
    • HTBOTTOMLEFT - В левом нижнем углу границы окна
    • HTBOTTOMRIGHT - В правом нижнем углу окна
    • HTCAPTION - В заголовке окна
    • HTCLIENT - В клиентской части окна
    • HTERROR - На фоне экрана или на границе между окнами (то же самое, что и HTNOWHERE, за исключением того, что звуковой сигнал будет воспроизведен при проверке нажатия HTERROR
    • HTGROWBOX - В части изменения размера (то же самое, что и HTSIZE
    • HTHSCROLL - На горизонтальной полосе прокрутки
    • HTLEFT - На левой границе окна
    • HTMENU - В меню
    • HTNOWHERE - На фоне экрана или границе между окнами
    • HTREDUCE - На кнопке "Свернуть"
    • HTRIGHT - На правой границе окна
    • HTSIZE - В области изменения размера (то же самое, что и HTGROWBOX
    • HTSYSMENU - В системном меню или кнопке "Закрыть" дочернего окна
    • HTTOP - На верхней горизонтальной границе окна
    • HTTOPLEFT - В верхнем левом углу границы окна
    • HTTOPRIGHT - В правом верхнем углу границы окна
    • HTTRANSPARENT - В окне, в настоящее время закрытом другим окном
    • HTVSCROLL - На вертикальной полосе прокрутки
    • HTZOOM - На кнопке "Развернуть/Восстановить"