Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2009, 16:03   #1
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,762
По умолчанию Как узнать принадлежит ли кнопка Системному меню программы?

Вообщем мне нужна такая конструкция

If Sender = Кнопкa системного меню окна (Свернуть, Развернут или Закрыть) то
.......
иначе
......

Заранее благодарен за ответ.

З.Ы. Процедура OnCloseQuery
FaTaL на форуме Ответить с цитированием
Старый 14.10.2009, 16:25   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

помоему это событие наступает при нажатии на кнопку закрыть.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 14.10.2009, 16:33   #3
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Код:
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure WMSYSCOMMAND(var msg: TMessage); message WM_SYSCOMMAND;

...

procedure TForm1.WMSYSCOMMAND(var msg: TMessage);
begin
  case msg.wParam of
    SC_CLOSE    : ShowMessage('Close');
    SC_MAXIMIZE : ShowMessage('Maximize');
    SC_MINIMIZE : ShowMessage('Minimize');
    SC_RESTORE  : ShowMessage('Restore');
  end;
  inherited;
end;
пыщь
JTG вне форума Ответить с цитированием
Старый 14.10.2009, 18:24   #4
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,762
По умолчанию

Ругается на эту процедуру в разделе type. Может что нить в Uses добавить надо?
FaTaL на форуме Ответить с цитированием
Старый 14.10.2009, 18:50   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

как ругается?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 14.10.2009, 20:04   #6
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

вот это добавить в обьявление формы, лучше после private
Код:
procedure WMSYSCOMMAND(var msg: TMessage); message WM_SYSCOMMAND;
вот это - после implementation
Код:
procedure TForm1.WMSYSCOMMAND(var msg: TMessage);
begin
  case msg.wParam of
    SC_CLOSE    : ShowMessage('Close');
    SC_MAXIMIZE : ShowMessage('Maximize');
    SC_MINIMIZE : ShowMessage('Minimize');
    SC_RESTORE  : ShowMessage('Restore');
  end;
  inherited;
end;
пыщь
JTG вне форума Ответить с цитированием
Старый 22.10.2009, 09:55   #7
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,762
По умолчанию

Сделал так:
Код:
procedure TAboutForm.WMSYSCOMMAND(var msg: TMessage);
begin
  case msg.wParam of
    SC_CLOSE    : CloseFlag :=true;
  else
    CloseFlag := false;
  end;
  inherited;
end;
Где CloseFlag булевая переменная. Потом процедура

Код:
procedure TAboutForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  if CloseFlag then
    begin
    CanClose := False;
    AboutForm.Hide;
    end else
    CanClose := true;
end;
В этой процедуре должно проверяться, если прога закрывается с кнопки окна закрыть, то прога должна просто спрятаться, а если с другой отдельной кнопки, то должна закрыться, но закрытие не происходит никак. Т.е. вопрос состоит в том, чтобы прога закрывалась либо по моей кнопке, либо когда винда завершает работу и посылает всем программам запрос на закрытие.
FaTaL на форуме Ответить с цитированием
Старый 22.10.2009, 10:12   #8
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

А может проще в Инспекторе для формы выставить - BorderIcons - biSystemMenu:= false. И системная кнопка недоступна (правда есть палочка-выручалочка, которая и в вашем случае присутствует Alt+F4).
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 22.10.2009, 14:17   #9
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,762
По умолчанию

Это не подходит. Надо чтобы кнопка закрыть была видна и работала как описано в моём посте выше.
FaTaL на форуме Ответить с цитированием
Старый 22.10.2009, 14:33   #10
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

столько сложностей, вместо того чтобы вывести кнопку в виде картинки и свой капшон
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как у Inputbox узнать, что была нажата кнопка Сancel? Artem Компоненты Delphi 2 02.04.2011 23:31
Как узнать нажата ли кнопка(Button) в чужом приложении? progan Win Api 7 13.01.2011 09:08
как узнать Pid процесса которому принадлежит окно Пепел Феникса Win Api 3 13.04.2009 13:37
Меню и нажатая кнопка! Dianis JavaScript, Ajax 1 04.07.2008 18:28
узнать, принадлежит ли значение массиву Жираффа Microsoft Office Excel 4 25.03.2008 14:59