Delphi: Cómo asignar un atajo de teclado Flecha arriba para Acción / Menultem, y Keep It Real para navegar por la lista de control (ListBox / VTV)?

StackOverflow https://stackoverflow.com/questions/2176519

Pregunta

Por favor, que me ayude:? Cómo asignar una combinación de teclas de flecha hacia arriba a la acción o elemento de menú, y mantenerlo real para navegar por la lista de control (por ejemplo ListBox / Vista de árbol virtual / otros), al mismo tiempo

Gracias!

¿Fue útil?

Solución

comentario:

  

Y que tal el reproductor Winamp? Tiene Subir volumen / bajar volumen funciones asignadas a la tecla de flecha hacia arriba y hacia abajo tecla de flecha correspondiente .. Está bien, si eso imposible en Delphi, entonces ...

pero ciertamente es posible, simplemente no es una buena idea para hacerlo, y en contra de las directrices de la experiencia del usuario de Windows de interacción.

Pero si ya está listo en su aplicación, aquí es cómo. Reemplazar el método siguiente en su clase de formulario que contiene los componentes de la acción:

function IsShortCut(var Message: TWMKey): Boolean; override;

y en ella se puede prevenir la tecla Arriba y abajo de la activación de las acciones que sirven de acceso directo para:

function TWeirdForm.IsShortCut(var Message: TWMKey): Boolean;
begin
  if (Message.CharCode in [VK_UP, VK_DOWN])
    // insert test whether message needs to go to the focused control instead
    and (...)
  then begin
    // insert calls to code that should be executed instead
    Result := False;
    exit;
  end;
  inherited;
end;

Tenga en cuenta que debe hacer la prueba para el estado de cambio correcto también, y comprobar que el código no se rompe cualquier otro usuario de comportamiento de las ventanas esperan, como la mudanza de la ventana con las teclas de flecha.

Otros consejos

En las propiedades de conjunto de formularios KeyPreview := true

A continuación, el evento KeyUp del evento de formulario de escritura para comprobar si está presionada, la tecla Arriba y hacer que se llama el elemento de menú (en este elemento de menú caso llamado Acción1):

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if (Key = VK_UP) and (ActiveControl = ListBox1)then
    Action11.Click;
end;

procedure TForm1.Action11Click(Sender: TObject);
begin
  if ListBox1.ItemIndex >=0  then
    ShowMessage(ListBox1.Items[ListBox1.ItemIndex]);
end;

Si necesita el Acción1 que se ejecutará aunque de control actual no es el cuadro de lista, retirar la parte de la declaración and IF

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top