PDA

Ver la Versión Completa : Agregar un item de menu al "System Menu"


Neftali [Germán.Estévez]
30-06-2006, 17:59:41
Es necesario interceptar el mensaje WMSYSCOMMAND para detectar cuando el usuario selecciona nuestro item de menu. Para ello, en la seccion interface, en la declaracion de la clase del formulario...


private
{ Private declarations }
procedure WMSYSCOMMAND(var Message: TMessage); message WM_SYSCOMMAND;


Y en la seccion implementation...


var
oMenuItem: TMenuItem;
hMenuItemHandle: THandle;

procedure TForm1.WMSYSCOMMAND(var Message: TMessage);
begin
if (Message.WParam = LongInt(hMenuItemHandle)) then
ShowMessage('Acerca de...');
inherited; // Importante no olvidarse de esta linea.
end;


Para crear el item de menu utilicé un Button. En el evento OnClick...


procedure TForm1.Button1Click(Sender: TObject);
var
hMenuHandle: THandle;
begin
oMenuItem := TMenuItem.Create(self);
hMenuItemHandle := oMenuItem.Handle;
oMenuItem.Caption := 'Acerca de...';
hMenuHandle := GetSystemMenu(handle, FALSE);
{ InsertMenu: El segundo parametro (9) es la posicion en el menu }
{ InsertMenu: El quinto parametro (nil) es el Caption del item de menu }
InsertMenu(hMenuHandle, 9, MF_BYPOSITION + MF_SEPARATOR,
hMenuItemHandle, nil); // Linea de separacion
InsertMenu(hMenuHandle, 10, MF_BYPOSITION + MF_STRING,
hMenuItemHandle, PChar(oMenuItem.Caption)); // Item de menu
DrawMenuBar(handle);
end;