¿Cómo puedo evitar que la principal forma de capturar las pulsaciones de teclado en un TMemo de otra forma no modal?
Pregunta
Tengo una aplicación que abre un formulario no modal del formulario principal. El formulario no modal tiene una TMemo en él. Los principales usos de menú formulario de "espacio" como uno de sus personajes acelerador.
Cuando el formulario no modal está abierta y la nota tiene enfoque, cada vez que intento entrar en un espacio en el memo en el formulario no modal, el principal evento de formulario para el "espacio" fuegos de acceso directo!
He intentado convertir MainForm.KeyPreview:. = False mientras que la otra forma es abierta, pero no dados
¿Alguna idea?
Solución
Desactivar la opción de menú en el formulario principal, mientras que la nota tiene el foco, y volver a habilitarlo cuando finaliza la anotación pierde. Esto se puede hacer a partir de los acontecimientos TMemo.OnEnter
y TMemo.OnExit
.
procedure TOtherForm.Memo1Enter(Sender: TObject);
begin
if Application.MainForm is TYourMainForm then
TYourMainForm(Application.MainForm).MenuItemWithSpace. Enabled := False;
end;
procedure TOtherForm.Memo1Exit(Sender: TObject);
begin
if Application.MainForm is TYourMainForm then
TYourMainForm(Application.MainForm).MenuItemWithSpace. Enabled := True;
end;
El uso de Application.MainForm
y el encasillado son para evitar la codificación dura en un nombre de formulario variable en el formulario secundario.
Otros consejos
Esto puede ser un viejo tema, pero que tenía el mismo problema hace un momento y buscado una solución adecuada. Su tema surgió, pero no con una solución que se desea utilizar.
Mi problema era: Tengo una forma principal con una gran cantidad de accesos directos (Retroceso, Eliminar, etc) y un segundo formulario con un cuadro de edición. El cuadro de edición no obtuvo ningún acciones clave, que son manejados por los principales atajos de formulario.
Mi solución: Conjunto niño formas OnShortCut, cosa que va a coger los atajos antes de que sean interpretados por el formulario principal con:
procedure ChildForm.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
begin
Handled := True;
Self.DefaultHandler(Msg);
end;
Que hizo el truco para mí, la forma niño coge los atajos y las manijas como mensajes clave comunes. El cuadro de edición se puede utilizar como se pretende.