En XCode al agregar estos métodos a su subclase NSView puede evitar que la ventana se active al hacer clic en ella:
- (BOOL)shouldDelayWindowOrderingForEvent:(NSEvent )theEvent {
return YES;
}
- (BOOL)acceptsFirstMouse:(NSEvent )theEvent {
return YES;
}
- (void)mouseDown:(NSEvent )theEvent {
[[[NSApp]] preventWindowOrdering];
}
En la plataforma de Windows se realiza mediante este simple código:
HWND hWnd = FindWindowW((String("FM") + fmxForm->ClassName()).c_str(),
fmxForm->Caption.c_str());
SetWindowLong(hWnd, GWL_EXSTYLE,
GetWindowLong(hWnd, GWL_EXSTYLE) | WS_EX_NOACTIVATE);
¿Cómo puedo subclasificar NSView para evitar que mi FMX TForm se active al hacer clic en él?
¿Cómo puedo crear el formulario " No activar " en firemonkey ?
macos
delphi
delphi-xe2
c++builder
firemonkey
mh taqia
fuente
fuente
Respuestas:
Es posible usar NSPanel con el indicador NSNonactivatingPanelMask . El formulario NSView de fmx debería convertirse en hijo de NSPanel. He escrito una clase auxiliar que funciona tanto para plataformas Windows como Mac ( funciona en XE4 ):
Uso de la unidad anterior:
Si frmKeyboard es su formulario principal, no coloque el código anterior en el constructor de formularios, se recomienda ponerlo en OnShow.
Nota : WindowHandleToPlatform no parece existir en XE3, por lo que la línea se puede reemplazar con
fuente
Puede desactivar el manejo del mouse de formularios para evitar que se enfoque. Asumiendo que su formulario se llama myform:
Hay un pequeño problema en que no detiene un clic derecho del mouse. Si eso es un problema, deberá responder al evento mousedown en el formulario y llamar a los formularios principales mousedown para que no pierda el evento mouse. Dado que el botón derecho del mouse hacia abajo capturará los eventos del mouse, también deberá responder a los eventos de movimiento del mouse y arriba del mouse, remitiéndolos a su formulario principal. Aunque captura el mouse con el botón derecho, no enfocará el formulario.
Dave Peters DP Software
fuente