Отключить восстановление формы по заголовку - PullRequest
0 голосов
/ 30 ноября 2018
  1. Создать пустой проект Delphi VCL
  2. Удалить все BorderIcons главной формы
  3. Установить для WindowState значение wsMaximized
  4. Запустить приложение.Главное окно отображается в развернутом виде.
  5. Двойной щелчок по заголовку окна.Главное окно восстанавливает его размер, и нет возможности увеличить его снова.

Как предотвратить восстановление окна при двойном щелчке заголовка без скрытия строки заголовка?

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

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

type
  TForm1 = class(TForm)
  protected
    procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;

...

procedure TForm1.WMSysCommand(var Message: TWMSysCommand);
begin
  case Message.CmdType and $FFF0 of
    SC_MOVE, SC_RESTORE: Exit;
  end; 
  inherited;
end;
0 голосов
/ 30 ноября 2018

Ответ отредактирован!

Если я правильно понял, вы можете запретить двойной щелчок по строке заголовка, чтобы предотвратить восстановление формы до ее первоначального размера.Вы можете сделать это, перехватывая WM_NCLBUTTONDBLCLK .

В приведенном ниже примере я переопределил WndProc метод основной формы и упомянутое выше сообщение.

procedure TForm1.WndProc(var Message: TMessage);
begin
  case Message.Msg of
    WM_NCLBUTTONDBLCLK:
      begin
        case TWMNCHitMessage(Message).HitTest of
          HTCAPTION:
            Exit
        else  // Another HitTest-codes are handled here
          Inherited WndProc(Message);
        end;
      end
  else
    Inherited WndProc(Message);
  end;
end;

Важное примечание

ХотяТеперь вы не можете восстановить развернутую форму двойным щелчком мыши, ее все равно можно восстановить, просто переместив ее, когда мышь захвачена в строке заголовка.По крайней мере, в Windows 7 этот эффект представлен.
Шаги для воспроизведения:

  • Запустить приложение;
  • Нажмите левую кнопку мыши, когда она зависла над строкой заголовка;
  • Не отпускайте ЛКМ и мягко двигайте мышь - теперь форма восстанавливает свой размер.

Приложение

Исправлена ​​ошибка с некорректной обработкой другогоне-клиентские HitTest-коды, за исключением HTCAPTION (спасибо пользователю Dsm за указание на это!).

...