Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 779

/ вопрос открыт /

Как сделать так, чтобы в моей программе на панели задач при нажатии правой кнопки мыши на кнопку с моей программой НЕ выводилось стандартное "Свернуть", "Закрыть",..., а чтобы выводилось только например, "О программе" и при нажатии этого меню совершалось действие?

Кирилл Х Ю Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Кирилл Х Ю (статус: Посетитель)
Вопрос отправлен: 23 июля 2007, 14:57
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, Кирилл Х Ю!
Для этого нужно две вещи - первое - узнать хендл меню. Потом используя апи функции можно манипулировать им.
узнать хендл - это просто GetSystemMenu (Application.Handle, False).
Но надо знать, что кнопка на панели задач может соответсвовать как Application (Невидимое окно), так и главной форме.

Добавить пункт AppendMenu (хендл, MF_SEPARATOR, 0, \'\');
удалить DeleteMenu (хендл,номер в списке,MF_BYPOSITION)
в приложении смотрите наброски кода

Приложение:
  1. Unit OMenu;
  2.  
  3. Interface
  4.  
  5. Uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs, Menus;
  6.  
  7. Type
  8. TForm1 = Class (TForm)
  9. Procedure FormCreate (Sender : TObject);
  10. Private {Private declarations}
  11. Public {Public declarations}
  12. Procedure WinMsg (Var Msg : TMsg; Var Handled : Boolean);
  13. Procedure DoWhatEever;
  14. End;
  15.  
  16. Var Form1 : TForm1;
  17.  
  18. Implementation
  19. {$R *.DFM}
  20.  
  21.  
  22.  
  23. Procedure Tform1.WinMsg (Var Msg : TMsg; Var Handled : Boolean);
  24. Begin
  25. If Msg.Message = WM_SYSCOMMAND Then
  26. If Msg.WParam = ItemID Then DoWhatEver;
  27. End;
  28.  
  29. Procedure TForm1.FormCreate (Sender : TObject);
  30. Begin
  31. Application.OnMessage := WinMsg;
  32. AppendMenu (GetSystemMenu (Form1.Handle, False), MF_SEPARATOR, 0, '');
  33. AppendMenu (GetSystemMenu (Form1.Handle, False), MF_BYPOSITION, ItemID, '&My menu');
  34. AppendMenu (GetSystemMenu (Application.Handle, False), MF_SEPARATOR, 0, '');
  35. AppendMenu (GetSystemMenu (Application.Handle, False), MF_BYPOSITION, ItemID,'&My menu minimized');
  36. End;
  37.  
  38. Procedure TForm1.DoWhatEver;
  39. Begin
  40.  
  41. End;
  42.  
  43. End.


Ответ отправил: Вадим К (статус: Академик)
Время отправки: 23 июля 2007, 15:31
Оценка за ответ: 5


Мини-форум вопроса

Мини-форум пуст.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:46
Выполнено за 0.03 сек.