Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Системное меню окна [XP]


x2088 ©   (2011-09-08 22:02:00) 

DXE :: WinXP
есть код (ниже), помогите пожалуйста разобраться где тут что, как добавлять свои строки в данное меню - здесь уже есть одна новая строка, с удалением и перехватом я разобрался, желательно в качестве ответа просто добавить копипастой ещё одну строку и разделитель, спасибо

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
   procedure OnWMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;
 public
   { Public declarations }
 end;

const
 MyButtonID = 100;

var
 Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.OnWMSysCommand(var Msg: TWMSysCommand);
begin
 case Msg.CmdType of
   SC_MINIMIZE: ShowMessage('Minimize');
   SC_MAXIMIZE: ShowMessage('Maximize');
   SC_RESTORE: ShowMessage('Restore');
   SC_CLOSE: ShowMessage('Close');
   SC_CONTEXTHELP: ShowMessage('Context Help');
   MyButtonID: ShowMessage('My Button');
 end;
 inherited;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
 Item: TMenuItemInfo;
 hMenuHandle: HMENU;
begin
   hMenuHandle := GetSystemMenu(Handle, false);
 If hMenuHandle 0
    Then
    Begin
    DeleteMenu(hMenuHandle, SC_RESTORE, MF_BYCOMMAND);
    DeleteMenu(hMenuHandle, SC_MAXIMIZE, MF_BYCOMMAND);
    DeleteMenu(hMenuHandle, SC_MINIMIZE, MF_BYCOMMAND);
    DeleteMenu(hMenuHandle, SC_MOVE, MF_BYCOMMAND);
    End;

 FillChar(Item, SizeOf(TMenuItemInfo), 0);
 with Item do
 begin
   cbSize := SizeOf(TMenuItemInfo);
   fMask := MIIM_TYPE or MIIM_ID;
   fType := MFT_STRING;
   dwTypeData := '&My menu button';
   wID := MyButtonID;
 end;
 { Добавим свою кнопку }
 InsertMenuItem(GetSystemMenu(Handle, False), SC_CLOSE, False, Item);
end;

end.


x2088   (2011-09-11 11:18:00) [1]

DiamondShark, под копипастой я имел в виду добавить ещё одну строку, естественно у неё будут собственные имена и значения переменных, а для того, чтобы добавить строку даже копипастой - надо знать что копипастить, я учусь на делфи только вторую неделю, учиться на примерах мне на 2 порядка проще, чем по учебнику, где 95% (с) болтология ни о чём, поскольку как доходит дело до реализации - непонятно как это сделать, ни примеров, ни подробных описаний что для чего там в подавляющем большенстве случаев нет

кто-нить хотя бы коменты к

FillChar(Item, SizeOf(TMenuItemInfo), 0);
with Item do
begin
  cbSize := SizeOf(TMenuItemInfo);
  fMask := MIIM_TYPE or MIIM_ID;
  fType := MFT_STRING;
  dwTypeData := '&My menu button';
  wID := MyButtonID;
end;
{ Добавим свою кнопку }
InsertMenuItem(GetSystemMenu(Handle, False), SC_CLOSE, False, Item);
end;

напишт?

~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~

да, ссылку на этот форум мне дали и только здесь я остался в игноре, всем спасибо


DiamondShark   (2011-09-09 20:29:00) [2]


> желательно в качестве ответа просто добавить копипастой ещё одну строку

Желательно не пользоваться копипастой, а понимать, что происходит.
Если одна строка уже есть, то ещё одна добавляется так же.


> и разделитель,

MFT_SEPARATOR
Specifies that the menu item is a separator. A menu item separator appears as a horizontal dividing line. The dwTypeData and cch members are ignored. This value is valid only in a drop-down menu, submenu, or shortcut menu.


x2088   (2011-09-09 20:01:00) [3]

никто не поможет?


Наверх

Титульная страница Поиск, карта сайта Написать письмо