Ir al contenido


Foto

¿Como se usan los SecondaryShortcuts de un Action?


  • Por favor identifícate para responder
6 respuestas en este tema

#1 axesys

axesys

    Advanced Member

  • Moderadores
  • PipPipPip
  • 640 mensajes
  • LocationLos Mochis

Escrito 17 marzo 2018 - 12:09

Estoy tratando de usar dos atajos de teclado con un botón que tengo enlazado a un Action de mi ActionList y no me funciona, a la propiedad ShortCut de la acción le asigno F8 y quiero que también se ejecute con Enter, por lo que abro el editor de texto que sale al presionar los ... en la propiedad SecondaryShortcuts y escribo Enter, pero al correr mi programa solo funciona el atajo de F8, lo mismo pasa si intercambio las teclas entre el ShortCut y el secondaryShortcuts con lo que solo funciona la tecla Enter.

 

¿Alguien sabe como se usa realmente la propiedad SecondaryShortcuts?

 

Saludos


  • 0

#2 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 mensajes
  • LocationArgentina

Escrito 17 marzo 2018 - 01:23

Yo lo hago dinamicamente, por ejemplo en los constructores de los forms:


delphi
  1. Action.SecondaryShortCuts.Add(ShortCutToText(ShortCut(VK_F8, [])));

SecondaryShortCuts es en realidad un TStrings en el cual se almacenan la lista de los atajos, es por eso que en realidad en ese ejemplo estamos:

 

1. Creando un atajo con la funcion ShortCut

2. Pasandolo a texto (para poder agregarlo al TStrings)

3. Finalmente agregarlo a la lista

 

Como es "mucho lio", me he creado un wrapper que me facilita el uso:


delphi
  1. ShortCutLinker
  2. .ClearAll(ActionList)
  3. .SetShortCut(Action_Blabla, VK_NUMPAD1)
  4. .AddSecondaryShortCut(Action_Blabla, '1')
  5. .SetShortCut(Action_Blablablabla, VK_NUMPAD2)
  6. .AddSecondaryShortCut(Action_Blablabla, '2');


  • 0

#3 axesys

axesys

    Advanced Member

  • Moderadores
  • PipPipPip
  • 640 mensajes
  • LocationLos Mochis

Escrito 17 marzo 2018 - 01:53

Hola Agustín, lo probé y no me funciono.


 


 

Yo lo hago dinamicamente, por ejemplo en los constructores de los forms:


delphi
  1. Action.SecondaryShortCuts.Add(ShortCutToText(ShortCut(VK_F8, [])));

SecondaryShortCuts es en realidad un TStrings en el cual se almacenan la lista de los atajos, es por eso que en realidad en ese ejemplo estamos:

 

1. Creando un atajo con la funcion ShortCut

2. Pasandolo a texto (para poder agregarlo al TStrings)

3. Finalmente agregarlo a la lista

 

Como es "mucho lio", me he creado un wrapper que me facilita el uso:


delphi
  1. ShortCutLinker
  2. .ClearAll(ActionList)
  3. .SetShortCut(Action_Blabla, VK_NUMPAD1)
  4. .AddSecondaryShortCut(Action_Blabla, '1')
  5. .SetShortCut(Action_Blablablabla, VK_NUMPAD2)
  6. .AddSecondaryShortCut(Action_Blablabla, '2');

Encontré en un foro ruso que con el evento OnShortCut del toolbar lo podía cachar con este código y me funcionó.


delphi
  1. procedure TfrmGeneral.barManagerHandleKey(Sender: TObject; AKey: Word;
  2. AShift: TShiftState; var AHandled: Boolean);
  3. var
  4. AShortCut: TShortCut;
  5. begin
  6. AShortCut := Vcl.Menus.ShortCut(Akey, AShift);
  7. if AShortCut <> scNone then
  8. if ProcessSecondaryShortCuts(AShortCut) then
  9. AHandled := true;
  10. end;
  11.  
  12. function TfrmGeneral.ProcessSecondaryShortCuts(ShortCut: TShortCut): Boolean;
  13. var
  14. i: Integer ;
  15. ss: string ;
  16. begin
  17. ss := ShortCutToText(ShortCut);
  18. for i := 0 to actList.ActionCount-1 do
  19. if TAction(actList.Actions[i]).SecondaryShortCuts.IndexOf(ss) >= 0 then
  20. begin
  21. if TAction(actList.Actions[i]).Enabled then
  22. TAction(actList.Actions[i]).Execute;
  23. Exit(True);
  24. end;
  25. Result := False;
  26. end;

Saludos

 


  • 0

#4 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 mensajes
  • LocationArgentina

Escrito 17 marzo 2018 - 05:11

La verdad me extraña.. se supone que ese trabajo sucio ya esta implementado en la Vcl y que uno simplemente indica la combinacion(es) de teclas y ya todo deberia ir de perlas

 

Alguna otra propiedad/evento que hayas modificado? En tu formulario tenes KeyPreview a True? Manejadores KeyPress/KeyDown?


  • 0

#5 axesys

axesys

    Advanced Member

  • Moderadores
  • PipPipPip
  • 640 mensajes
  • LocationLos Mochis

Escrito 17 marzo 2018 - 10:05

La verdad me extraña.. se supone que ese trabajo sucio ya esta implementado en la Vcl y que uno simplemente indica la combinacion(es) de teclas y ya todo deberia ir de perlas

Alguna otra propiedad/evento que hayas modificado? En tu formulario tenes KeyPreview a True? Manejadores KeyPress/KeyDown?

Si tengo keypreview activado y en el evento onkeypress cacho la tecla Esc para cerrar el formulario y el Enter lo convierto en Tab.
  • 0

#6 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 mensajes
  • LocationArgentina

Escrito 17 marzo 2018 - 10:37

Yo tengo una configuración similar, KeyPreview activado y también capturo el escape para cerrar el formulario.

No estará interfiriendo la conversión de enter a tab?
  • 0

#7 axesys

axesys

    Advanced Member

  • Moderadores
  • PipPipPip
  • 640 mensajes
  • LocationLos Mochis

Escrito 18 marzo 2018 - 02:11

Yo tengo una configuración similar, KeyPreview activado y también capturo el escape para cerrar el formulario.

No estará interfiriendo la conversión de enter a tab?


Tal vez, pero como ya funcionó con el evento onshortcut pues ya no le busque.
  • 1




IP.Board spam blocked by CleanTalk.