J'ai un composant DB auquel DataLink.UpdateRecord est appelé lorsqu'il reçoit le message CM_EXIT. Ce message est envoyé lorsqu'il perd le focus. Lorsque je clique sur le bouton post, il ne perd pas le focus et la valeur n'est pas écrite dans la source de données. Comment puis-je atteindre un effet de perte de focus du composant sans passer à un autre?Comment supprimer la mise au point d'un composant actuellement ciblé?
Répondre
Vous pouvez utiliser:
procedure TCustomForm.DefocusControl(Control: TWinControl; Removing: Boolean);
Jetez un oeil à TCustomForm.FocusControl
. Vous ne pouvez pas le faire perdre la mise au point sans passer au focus sur autre chose, mais vous pouvez basculer et ensuite revenir immédiatement, ce qui fonctionnerait probablement.
Et comment puis-je faire avec FocusControl? L'appeler sur le contrôle actif ne déclenche pas d'événements. – LukLed
Nous accomplissons ceci en réglant le Self.ActiveControl: = nul. Cela provoque tous les événements de sortie à tirer. Dans notre cas, nous voulions également nous recentrer sur le contrôle après la sauvegarde. Cela a exigé quelques vérifications supplémentaires pour s'assurer que nous avions un bon contrôle qui pourrait accepter la concentration.
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;
Il existe une fonction SetFocus dans l'unité Windows. Essayez ceci:
Windows.SetFocus(0);
- 1. Envoi d'un événement KeyEvent au composant ciblé
- 2. Comment supprimer la bordure autour d'un pré ciblé ciblé?
- 3. Comment réinitialiser/supprimer la mise en surbrillance/la mise au point de la bordure chromée?
- 4. Supprimer ou désactiver la bordure de mise au point du navigateur via javascript
- 5. iPhone UIWebView mise au point initiale?
- 6. C# détecter l'application mise au point mise au point
- 7. formes de mise au point
- 8. Mise au point de la caméra S60
- 9. Perdre la mise au point d'un JTextField
- 10. Mise au point à l'échelle du système
- 11. Le composant WebPart OWA saute/se décale lors de la mise au point sur Mon site
- 12. Mise au point dans ASP
- 13. Mise au point des 403?
- 14. WPF TextBox Mise au point
- 15. Mise au point d'un service
- 16. Comment effacer la mise au point et supprimer le clavier sur Android?
- 17. HTML mise en page mise au point
- 18. Mise au point de l'erreur .Net OracleClient
- 19. Comment maintenir la position de mise au point dans UpdatePanel après la page partielle retour
- 20. Comment désactiver les rappels de mise au point sur un composant dans Swing/Nimbus
- 21. Obtention du handle du contrôle actuellement ciblé dans une autre application
- 22. HTML/JavaScript: Mise au point de la page
- 23. Mise au point absolue dans la mise en page Android
- 24. menu options - suppression de la mise au point de l'élément
- 25. Comment puis-je empêcher la mise au point dans Windows?
- 26. WPF HwndHost mise au point clavier
- 27. QLineEdit - événement de mise au point
- 28. style de mise au point de contrôle
- 29. Mise au point du champ de texte
- 30. Mise au point incorrecte de l'affichage AWT
J'ai regardé cette procédure, essayé de l'utiliser, et cela n'a pas fonctionné. Maintenant, je l'ai fait à nouveau et ça fonctionne. Il est temps d'aller dormir :) – LukLed
Comme il se produit, la définition de Self.ActiveControl: = nil fait le travail aussi et est plus intuitive. Évidemment pas pour moi .... – LukLed
@LukLed: Bon conseil, merci! – Sharken