Ver Mensaje Individual
  #1  
Antiguo 30-06-2006
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - Espańa
Posts: 18.233
Reputación: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Agregar un item de menu al "System Menu"

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...

Código Delphi [-]
  private
    { Private declarations }
    procedure WMSYSCOMMAND(var Message: TMessage); message WM_SYSCOMMAND;

Y en la seccion implementation...

Código Delphi [-]
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...

Código Delphi [-]
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;
Responder Con Cita