![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как добавить пункт к меню программы на панели задач? [D3]
<> © (2008-09-13 19:36:00)Вот этот код добавляет пункт в меню, которое появляется при нажатии правой кнопки мыши на кнопке программы на панели задач:
unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
procedure WMSysCommand(var Msg: TWMSysCommand ) ; message WM_SYSCOMMAND;
public
end;
var Form1: TForm1;
implementation {$R *.DFM}
const SC_MyMenuItem1 = WM_USER + 1;
procedure TForm1.FormCreate(Sender: TObject);
const sMyMenuCaption1 = 'Kill';
var SysMenu : HMenu;
begin
SysMenu := GetSystemMenu(Application.Handle, FALSE) ;
AppendMenu(SysMenu, MF_SEPARATOR, 0, '') ;
AppendMenu(SysMenu, MF_STRING, SC_MyMenuItem1, sMyMenuCaption1) ;
end;
procedure TForm1.WMSysCommand(var Msg : TWMSysCommand ) ;
begin
if Msg.CmdType = SC_MyMenuItem1 then halt else inherited;
end;
end.
Какое сообщение следует использовать вместо WM_SYSCOMMAND, что бы выполнялось WMSysCommand ?
(2008-09-23 15:08:00) [1]Удалено модератором
EnculkyToklok (2008-09-23 12:30:00) [2]Удалено модератором
kollayder (2008-09-23 12:08:00) [3]Удалено модератором
NewsMaker (2008-09-23 12:05:00) [4]Удалено модератором
Бес навес (2008-09-23 10:32:00) [5]Удалено модератором
<> (2008-09-14 12:36:00) [6]>А зачем нужен такой пункт системного меню предполагающий столь варварский метод уничтожения процесса?
Я это в Линуксе подсмотрел - там есть такой пункт меню.
>Про Result забул у MessageHook
Да, не заметил.
GrayFace (2008-09-14 01:45:00) [7]<> (13.09.08 22:18) [2]
Про Result забул у MessageHook
Германн (2008-09-14 00:40:00) [8]
> <> (13.09.08 22:18) [2]
>
> Спасибо, работает:
>
А зачем нужен такой пункт системного меню предполагающий столь варварский метод уничтожения процесса? Вот сразу бы удалил такого рода программу, если бы она у меня на компе появилась. И даже не в корзину.
<> (2008-09-13 22:18:00) [9]Спасибо, работает:
unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
procedure WMSysCommand(var Msg: TWMSysCommand ) ; message WM_SYSCOMMAND;
function MessageHook(var Msg: TMessage): Boolean;
public
end;
var Form1: TForm1;
implementation {$R *.DFM}
const SC_MyMenuItem1 = WM_USER + 1;
procedure TForm1.FormCreate(Sender: TObject);
const sMyMenuCaption1 = 'Kill';
var SysMenu : HMenu;
begin
SysMenu := GetSystemMenu(Application.Handle, FALSE) ;
AppendMenu(SysMenu, MF_SEPARATOR, 0, '') ;
AppendMenu(SysMenu, MF_STRING, SC_MyMenuItem1 , sMyMenuCaption1) ;
SysMenu := GetSystemMenu(Handle, FALSE) ;
AppendMenu(SysMenu, MF_SEPARATOR, 0, '') ;
AppendMenu(SysMenu, MF_STRING, SC_MyMenuItem1, sMyMenuCaption1 ) ;
Application.HookMainWindow(MessageHook);
end;
procedure TForm1.WMSysCommand(var Msg : TWMSysCommand) ;
begin
if Msg.CmdType = SC_MyMenuItem1 then halt else inherited;
end;
function TForm1.MessageHook(var Msg: TMessage): Boolean;
begin
if (Msg.Msg = WM_SYSCOMMAND) and (Msg.wParam = SC_MyMenuItem1) then halt;
end;
end.
GrayFace (2008-09-13 21:30:00) [10]WM_SYSCOMMAND, только у окна Application.Handle. Если мне не ходит на лево память, Application.HookMainWindow