Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Контекстное меню приложения на панели задач


Автор: avm2 16.7.2009, 09:46
Подскажите, пожалуйста, почему в MDI-приложении в контекстное меню у кнопки приложения на панели задач нет пунктов "Переместить", "Размер", "Развернуть", а в контекстном меню главной формы (если щёлкнуть по иконке) они есть?

Автор: dvamaster 21.7.2009, 06:15
так как используется DefMDIChildProc перенаправляется все подобные мессаги в MDI фрейм, фрейм отправляет эти сообщения в парент, а парент есть главное окно

Автор: v258 18.2.2015, 10:08
подниму, пожалуй, тему

Как можно отловить нажатие пунктов Свернуть и Закрыть контекстного меню кнопки приложения на панели задач? Или как заменить это меню системным контекстным меню приложения (это которое по значку в левой части заголовка формы)?

Автор: Poseidon 18.2.2015, 11:59
Цитата(v258 @  18.2.2015,  10:08 Найти цитируемый пост)
Как можно отловить нажатие пунктов Свернуть и Закрыть контекстного меню кнопки приложения на панели задач?


Код

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs;

type
  TForm1 = class(TForm)
  private
    procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WMSysCommand(var Msg: TWMSysCommand);
begin
  case Msg.CmdType of
    SC_MINIMIZE:
      ShowMessage('Свернуть');
    SC_CLOSE:
      ShowMessage('Закрыть');
  end;

  inherited;
end;

end.


Автор: v258 18.2.2015, 12:17
Poseidon, это работает с системным меню, с кнопками закрыть/свернуть в заголовке формы, но именно нажатие пунктов  меню кнопки на панели задач не отлавливается. Код практически такой же
Код

procedure TM_Form.WMSysCommand(var Msg: TWMSysCommand);
begin
  case Msg.CmdType of
    SC_MINIMIZE: HideRestoreForm(False);
    SC_CLOSE: ExitButClick(Self);
    else
      inherited;
    end;
end;

Автор: Poseidon 18.2.2015, 14:48
Все там отлавливается. Проверь мой код на тестовом проекте. Конкретно в твоем случае подозреваю, что что-то не так работает в HideRestoreForm и ExitButClick.

Автор: v258 18.2.2015, 16:13
Цитата(Poseidon @  18.2.2015,  14:48 Найти цитируемый пост)
Конкретно в твоем случае подозреваю, что что-то не так работает в HideRestoreForm и ExitButClick.


нет, не работает, ни мой, ни твой коды, даже брекпойнт не отрабатывает.

если использовать системное меню, то все работает, а если меню кнопки в панели задач - нифига, пролетает мимо  smile

Добавлено через 3 минуты и 36 секунд
на тестовом приложении тоже не работает, видимо, другие сообщения отлавливать нужно

Автор: Poseidon 18.2.2015, 16:21
Windows7 ?

Автор: v258 18.2.2015, 16:45
нет, ХР

Автор: v258 21.2.2015, 08:39
в семерке, кстати, по shift +ПКМ на кнопке в панели задач то же самое - никакой реакции

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)