¿Cómo puedo evitar que la principal forma de capturar las pulsaciones de teclado en un TMemo de otra forma no modal?

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

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?

¿Fue útil?

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.

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