![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Системное меню окна [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]никто не поможет?