Tengo un componente DB al que se llama DataLink.UpdateRecord cuando recibe el mensaje CM_EXIT. Este mensaje se envía cuando pierde el foco. Cuando hago clic en el botón Publicar, no pierde el foco y el valor no se escribe en el origen de datos. ¿Cómo puedo alcanzar un efecto de pérdida de foco del componente sin cambiarlo a otro?¿Cómo eliminar el foco del componente actualmente enfocado?
Respuesta
que puede usar:
procedure TCustomForm.DefocusControl(Control: TWinControl; Removing: Boolean);
Echa un vistazo a TCustomForm.FocusControl
. No puede hacer que pierda el foco sin cambiar el foco a otra cosa, pero puede cambiar y luego volver inmediatamente, lo que probablemente funcione.
Y qué puedo hacer yo con FocusControl? Llamarlo a control activo no desencadena eventos. – LukLed
Logramos esto mediante el establecimiento de la Self.ActiveControl: = nil. Eso causa que todos los eventos de salida se disparen. En nuestro caso, también queríamos volver a enfocarnos en el control una vez que se realizó el guardado. Eso requirió algunos controles adicionales para garantizar que teníamos un buen control que pudiera aceptar el enfoque.
procedure TSaleEditor.SaveCurrentState();
var
SavedActiveControl: TWinControl;
AlternateSavedControl: TWinControl;
begin
// Force the current control to exit and save any state.
if Self.ActiveControl <> nil then
begin
SavedActiveControl := Self.ActiveControl;
// We may have an inplace grid editor as the current control. In that case we
// will not be able to reset it as the active control. This will cause the
// Scroll box to scroll to the active control, which will be the lowest tab order
// control. Our "real" controls have names, where the dynamic inplace editor do not
// find an Alternate control to set the focus by walking up the parent list until we
// find a named control.
AlternateSavedControl := SavedActiveControl;
while (AlternateSavedControl.Name = '') and (AlternateSavedControl.Parent <> nil) do
begin
AlternateSavedControl := AlternateSavedControl.Parent;
end;
Self.ActiveControl := nil;
// If the control is a radio button then do not re-set focus
// because if you are un-selecting the radio button this will automatically
// re-select it again
if (SavedActiveControl.CanFocus = true) and
((SavedActiveControl is TcxRadioButton) = false) then
begin
Self.ActiveControl := SavedActiveControl;
end
else if (AlternateSavedControl.CanFocus = true) and
((AlternateSavedControl is TcxRadioButton) = false) then
begin
Self.ActiveControl := AlternateSavedControl;
end;
end;
end;
Hay una función SetFocus en la unidad de Windows. Prueba esto:
Windows.SetFocus(0);
- 1. ¿Cómo obtener el elemento enfocado con jQuery?
- 2. Cómo averiguar qué objeto tiene actualmente el foco
- 3. Cómo quitar el foco del botón Enviar
- 4. WPF: Eliminar el borde punteado alrededor del elemento enfocado en el cuadro de lista con estilo
- 5. Eliminar dinámicamente el componente de JPanel
- 6. Cambiar el foco al siguiente componente en JTable usando TAB
- 7. Método flexible de detección de cambio de control enfocado
- 8. Seleccione el texto enfocado
- 9. ¿Cómo obtengo el elemento previamente enfocado en JavaScript?
- 10. ¿Cómo obtener una referencia al campo de formulario actualmente enfocado en JavaScript?
- 11. ¿Cómo se borra el foco en javascript?
- 12. ¿Cómo detectar el foco del navegador en dispositivos móviles?
- 13. ¿Cómo cambiar el comportamiento del componente TDBNavigator?
- 14. ¿Cómo puedo controlar qué ventana tiene actualmente foco en el teclado?
- 15. Obtiene el elemento recién enfocado (si existe) del evento onBlur.
- 16. ¿Responder al teclado cuando no está enfocado? (C#, Vista)
- 17. Detectar el foco del navegador/fuera de foco a través de la Extensión de Google Chrome
- 18. Eliminar un GUID = "" componente instalado con WiX
- 19. Deshabilitar el foco del elemento en ListView
- 20. wpf listview perdió el foco
- 21. Force WPF para confirmar cambios en el elemento enfocado
- 22. Estrategia del componente JIRA
- 23. ¿Cómo obtener el rol del usuario actualmente conectado en wordpress?
- 24. ¿Cómo obtengo el texto del nodo seleccionado actualmente en jstree?
- 25. ¿Cómo verifica si un widget tiene foco en Tkinter?
- 26. Obtener el formulario principal del componente
- 27. Eliminar/agregar clase CSS en el foco/desenfoque de entrada
- 28. Flash roba el foco del navegador
- 29. Eliminar o desactivar el borde de enfoque del navegador mediante javascript
- 30. Eliminar componente oscilante mediante validar o revalidar
Miré este procedimiento, intenté usarlo y no funcionó. Ahora lo hice de nuevo y funciona. Es hora de ir a dormir :) – LukLed
Como ocurre, establecer Self.ActiveControl: = nil también hace el trabajo y es más intuitivo. Obviamente no para mí ... – LukLed
@LukLed: ¡Un gran consejo, gracias! – Sharken