Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Menú principal que se comporte como en Windows Vista/7 (https://www.clubdelphi.com/foros/showthread.php?t=74831)

maiquemasque 13-07-2011 19:45:09

Menú principal que se comporte como en Windows Vista/7
 
Hola;

En Windows Vista/7 ya sabeis que el menú principal está oculto y aparece al pulsar la tecla Alt y luego se oculta otra vez. ¿Alguien sabe como implementar este comportamiento con Delphi?

Gracias :)

ecfisa 13-07-2011 20:10:42

Cita:

el menú principal está oculto y aparece al pulsar la tecla Alt y luego se oculta otra vez. ¿Alguien sabe como implementar este comportamiento con Delphi?
Hola.

Podrías hacer:
Código Delphi [-]
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if Shift = [ssAlt] then
  begin
    if Menu = nil then
      Menu:= MainMenu1
    else
      Menu:= nil;
    Key:= 0;
  end;
end;

Saludos.

maiquemasque 13-07-2011 20:18:08

Gracais ecfisa :)

Pero aun me faltan cosas para que tenga el comportamiento. Con este código se muestra/oculta pulsando alt. Pero si por ejemplo puslo Alt+Tab para saltar a otra aplicación y el menú esta oculto, se hace visible al haber pulsado Alt.

Y no se como hacerle tomar el foco, o sea, al pulsar Alt aparece el menú pero no toma el foco. Y al pulsar esc o pasar el foco a otro control no desaparece tampoco.

He buscado por si había algún componente pero no veo nada. Gracias otra vez...

x_aguilarf 13-07-2011 23:31:04

Podrías probar con esto:

Código Delphi [-]
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if Key = VK_MENU then
  begin
    if Menu = nil then
      Menu:= MainMenu1
    else
      Menu:= nil;
    Key:= 0;
  end;
end;

x_aguilarf 14-07-2011 00:17:10

Una solución mucho mejor que hace lo que pides:

Código Delphi [-]
procedure TForm1.WndProc(var Message: TMessage);
begin
  inherited;
  case Message.Msg of

    WM_EXITMENULOOP: begin
      Self.Menu := nil;
    end;

    WM_ENTERMENULOOP: begin
      Self.Menu := MainMenu1;
    end;

  end;
end;

Saludos

maiquemasque 15-07-2011 18:05:56

Cita:

Empezado por x_aguilarf (Mensaje 406307)
Una solución mucho mejor que hace lo que pides:

Código Delphi [-]procedure TForm1.WndProc(var Message: TMessage); begin inherited; case Message.Msg of WM_EXITMENULOOP: begin Self.Menu := nil; end; WM_ENTERMENULOOP: begin Self.Menu := MainMenu1; end; end; end;


Saludos

Este código no me hace nada, no ocurre nada :( Muchas gracias de todas formas :) gracias a todos por vuestra atención. Al final he optado por simplemente dar la opción de mostrarlo o no mostrarlo.

Me habría gustado añadirle a parte de tener la opción de tenerlo fijo o no lo que se ha intentado aquí, pero no lo consigo.

Bueno, gracias de nuevo, un saludo :)

x_aguilarf 15-07-2011 18:54:21

debería de funcionar, yo le he probado y me funciona a la perfección. Algo debes de hacer mal.

Código Delphi [-]
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
  private
    { Private declarations }
  protected
    procedure WndProc(var Message: TMessage); override;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WndProc(var Message: TMessage);
begin
  inherited;
  case Message.Msg of

    WM_EXITMENULOOP: begin
      Self.Menu := nil;
    end;

    WM_ENTERMENULOOP: begin
      Self.Menu := MainMenu1;
    end;

  end;
end;

end.

maiquemasque 15-07-2011 21:27:45

Cita:

Empezado por x_aguilarf (Mensaje 406512)
debería de funcionar, yo le he probado y me funciona a la perfección. Algo debes de hacer mal.
...

Si, si que funciona. Algo hacía mal, pero no se que era. He probado en un nuevo proyecto y funciona perfectamente.

¡Mil gracias x_aguilarf! :) Buen finde...


La franja horaria es GMT +2. Ahora son las 18:08:43.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi