Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-11-2013
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Tecla que llamó al PopupMenu

Hola a tod@s !

Hace tiempo que no aparezco por aquí ... mis disculpas a todos los que me han echado de menos !

Cuando asigno un PopupMenu a un elemento (por ejemplo un Grid), puedo asignar ShortCuts a cada elemento del PopupMenu. Si asigno a uno de los elementos la tecla 'Del/Supr', al pulsar la tecla Suprimir en el Grid, se ejecuta el evento OnPopup del PopupMenu.

Quiero saber qué tecla ha provocado el evento OnPopup. Para saber si se ha pulsado Supr o si el usuario ha hecho Click Derecho.

Al parecer en el evento OnPopup, en ese momento del OnPopup, no está disponible el (Sender as TMenuItem).Name, por lo que no logro averiguar qué tecla (porque hay varias teclas asociadas a los diferentes ShortCuts) ha provocado la llamada.

He hecho esto :
Código Delphi [-]
procedure TForm.PopupActionBar1Popup(Sender: TObject);
begin

  if not (Sender is TMenuItem) then
    // La llamada fue efectuada con click derecho
  else if (Sender as TMenuItem).Name = 'Nombre del MenuItem asociado a la tecla Supr' then
    .....

Agradecer como siempre vuestra inestimable ayuda !

Saludos
__________________
Piensa siempre en positivo !
Responder Con Cita
  #2  
Antiguo 02-11-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola gluglú.

Disculpas aceptadas

No entiendo del todo a donde apunta el capturar la tecla, pero fíjate si esta forma de capturar la tecla Del/Supr te sirve:
Código Delphi [-]
...
type
  TPopupMenu = class(Menus.TpopupMenu)
  protected
    function IsShortCut(var Msg: TWMKey): Boolean; override;
  end;

  TForm1 = class(TForm)
    PopupMenu1: TPopupMenu;
  ...

implementation

var
  DelKeyPressed : Boolean;

{ TPopupMenu }
function TPopupMenu.IsShortCut(var Msg: TWMKey): Boolean;
begin
  DelKeyPressed := Msg.CharCode = VK_DELETE;
  inherited IsShortcut(Msg);
end;

// Ejemplo, capturar Del en OnPopup
procedure TForm1.PopupMenu1Popup(Sender: TObject);
begin
   if DelKeyPressed then
    ShowMessage('Presiono la tecla Delete');
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 02-11-2013
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Pues si ... probablemente sirva !! Ahora me pongo con ello ...

No obstante, encontré una solución de otra manera a mi problema.

El asunto surge de la necesidad de 'restringir' ciertas acciones a ciertos usuarios según privilegios. Por ejemplo, en este caso, quiere restringir el poder 'Suprimir' un registro.

Consigo fácilmente ocultar la opción del PopupMenu correspondiente a la tecla de Supr (eso es inmediato), pero el problema es que al estar la opción del PopupMenu asignada a la tecla Supr mediante ShortCut, si pongo esa opción Enabled := False, ni siquiera entra a ejecutar el procedimiento correspondiente a 'Suprimir Registro'. Entonces, lo que pretendía era que si el usuario pulsa el botón derecho del ratón (y no tiene privilegio), la opción de Supr le salga Enabled := False, pero si pulsa directamente la tecla Suprimir sobre el Grid, le salga un 'letrero'.

Si Enabled := False en la opción del Popupmenu, no entra en el procedimiento y no puedo mostrar el cartel. Si pongo el cartel en el evento OnPopup del Menú, entonces SIEMPRE me saldría el cartelito si el usuario no tiene privilegio, y claro ... eso no queda bien.

Cómo lo he hecho finalmente ... Compruebo si 'Sender is TMenuItem' en el evento OnPopup. Si lo es, es que se ha pulsado tecla, y entonces NO pongo Enabled := False, con lo cual acaba yendo al procedimiento de Borrado y ahí puedo mostrar el Cartel. Si no es 'Sender is TMenuItem' entonces se ha pulsado Botón Derecho del ratón para abrir el menú contextual, y entonces después de la comprobación del privilegio pongo Enabled := False.

De esta manera consigo lo que me había propuesto, deshabilitar la opción del Menú contextual en caso de pulsar el botón derecho del ratón (o la tecla de menú contextual del teclado), y poder mostrar el cartel en caso de que se pulsa la tecla Suprimir.

Gracias por la ayuda !!!

__________________
Piensa siempre en positivo !
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Eso es lo que llamo un abuso enecumene La Taberna 14 13-07-2008 19:04:32
saber que tecla se presiona despues de X tecla amadis OOP 9 04-01-2008 13:16:35
Cambiar la tecla TAB por la tecla ENTER al pasar de controles dec Trucos 0 30-06-2006 13:43:03
Tecla PetSis y tecla Inter Tomás Windows 0 24-04-2004 14:20:19
como llamo al shellexecute sarga API de Windows 2 14-04-2004 15:18:49


La franja horaria es GMT +2. Ahora son las 11:05:16.


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
Copyright 1996-2007 Club Delphi