Puede que me equivoque, pero creo que los "
short-cuts" se procesan según el orden de los componentes. Es decir, que va siguiendo la lista de componentes contenidos en el TForm (siendo el propio TForm el primero de ellos) hasta que que uno de ellos le dice que lo ha procesado.
Una solución: que los
short-cuts sean gestionados por el TForm, no por los TFrames. Cuando el TForm recibe el evento, comprueba cuál es la página activa y llama al método correspondiente del TFrame que contenga.
Encontrar el TFrame correspondiente a la lengüeta no siempre es fácil. Yo uso el siguiente método en uno de mis proyectos secretos (a ver cuándo hablo de él
) que devuelve el TFrame correcto:
Código Delphi
[-]
FUNCTION TVntPrincipal.TomaFrameLengueta (CONST Lengueta: TTabSheet): TFrame;
VAR
Ndx: INTEGER;
BEGIN
FOR Ndx := Lengueta.ComponentCount - 1 DOWNTO 0 DO
IF Lengueta.Components[Ndx] IS TFrame THEN
EXIT (TFrame (Lengueta.Components[Ndx]));
RAISE Exception.Create ('No encontró el TFrame de la lengüeta.')
END;
Dos detalles:
Primero, que este código lo uso en Lazarus, puede que haya que cambiar algún detalle en Delphi.
Segundo, el RTTI ha de estar activo, evidentemente, para poder usar el operador "IS".