Hola Fenareth,
Si tienes cualquier componente TAction asociado a un ShortCut y dicha acción está habilitada (Enabled = True) y tiene asociada un evento en OnExecute, éste se ejecutará con preferencia sobre el evento KeyDown del formulario, aunque éste tenga a True la propiedad KeyPreview.
Alguna vez me he encontrado conflictos de este tipo, en que quiero tener en el mismo formulario dos acciones con el mismo ShortCut asociado y que se ejecute una u otra según el control activo, y la forma de solucionarlo es programar el evento OnUpdate de cada acción, habilitando o deshabilitando cada acción según convenga. En tu caso sería algo así:
procedure TForm1.acLocalizaExecute(Sender: TObject);
begin
// Lo que sea
end;
procedure TForm1.acLocalizaUpdate(Sender: TObject);
begin
acLocaliza.Enabled := ActiveControl = EditLocaliza;
end;
procedure TForm1.acFBCatalogoExecute(Sender: TObject);
begin
// Lo que sea
end;
procedure TForm1.acFBCatalogoUpdate(Sender: TObject);
begin
acFBCatalogo.Enabled := ActiveControl = EditFBCatalogo;
end;
De todas formas, me extraña que no te lance nada cuando ejecutas F3, ya que al menos, aunque no se dispare el evento OnKeyDown del formulario, sí debería dispararse el Execute de una de las dos acciones.
Otra cosa, probándolo ahora he tenido algunos resultados anárquicos que tienen que ver con la frecuencia con que se llama a los eventos OnUpdate de cada acción. En realidad dichos eventos se deberían llamar cada vez que ocurre algo en el formulario, una pulsación de teclado, un click del ratón ... etc, actualizando el estado de las acciones, pero no siempre sucede así (supongo que hay algo mal por ahí dentro). Para mayor seguridad, yo dejaría ambas acciones deshabilitadas desde diseño y habilitaría cada acción "a mano", cada vez que entras al control deseado:
procedure TForm1.EditLocalizaEnter(Sender: TObject);
begin
acLocaliza.Enabled := Sender = EditLocaliza;
acFBCatalogo.Enabled := Sender = EditFBCatalogo;
end;
procedure TForm1.EditLocalizaExit(Sender: TObject);
begin
acLocaliza.Enabled := FALSE;
acFBCatalogo.Enabled := FALSE;
end;
En este ejemplo, puedes hacer que ambos controles (supongo que son Edits), compartan sus eventos OnEnter y OnExit, que ya se encargan de habilitar/deshabilitar la acción correspondiente.
Saludos