Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.11.15;
Скачать: CL | DM;

Вниз

Как добавить пункт к меню программы на панели задач?   Найти похожие ветки 

 
<>   (2008-09-13 19:36) [0]

Вот этот код добавляет пункт в меню, которое появляется при нажатии правой кнопки мыши на кнопке программы на панели задач:

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 ?


 
GrayFace ©   (2008-09-13 21:30) [1]

WM_SYSCOMMAND, только у окна Application.Handle. Если мне не ходит на лево память, Application.HookMainWindow


 
<>   (2008-09-13 22:18) [2]

Спасибо, работает:


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.


 
Германн ©   (2008-09-14 00:40) [3]


> <>   (13.09.08 22:18) [2]
>
> Спасибо, работает:
>

А зачем нужен такой пункт системного меню предполагающий столь варварский метод уничтожения процесса? Вот сразу бы удалил такого рода программу, если бы она у меня на компе появилась. И даже не в корзину.


 
GrayFace ©   (2008-09-14 01:45) [4]

<>   (13.09.08 22:18) [2]
Про Result забул у MessageHook


 
<>   (2008-09-14 12:36) [5]

>А зачем нужен такой пункт системного меню предполагающий столь варварский метод уничтожения процесса?

Я это в Линуксе подсмотрел - там есть такой пункт меню.

>Про Result забул у MessageHook
Да, не заметил.


 
Бес навес   (2008-09-23 10:32) [6]

Удалено модератором


 
NewsMaker   (2008-09-23 12:05) [7]

Удалено модератором


 
kollayder   (2008-09-23 12:08) [8]

Удалено модератором


 
EnculkyToklok   (2008-09-23 12:30) [9]

Удалено модератором


 
имя   (2008-09-23 15:08) [10]

Удалено модератором



Страницы: 1 вся ветка

Текущий архив: 2009.11.15;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.014 c
2-1254326507
bagos
2009-09-30 20:01
2009.11.15
stringgrid drawcell


8-1200386810
barakuda
2008-01-15 11:46
2009.11.15
изменение размера jpg


8-1200165615
КуХ
2008-01-12 22:20
2009.11.15
BitBlt


15-1253313038
DVM
2009-09-19 02:30
2009.11.15
Как путь типа SystemRoot ... превратить в нормальный?


15-1252614613
Юрий
2009-09-11 00:30
2009.11.15
С днем рождения ! 11 сентября 2009 пятница