Bonjour,
Je suis sous W10 avec Delphi 6 PE.
Je suis tombé sur un os en uilisant un TStringGrid avec édition du contenu des cellules.
Je peux activer l'éditeur inline et ça fonctionne, sans problème.
Maintenant, je veur "protéger" certaines cellules sans qu'il soit possible de les éditer.
J'assigne donc un objet aux cellules en question, et la présence ou non de cet objet condiionne l'autorisation de l'éditeur inline.
Je fais ça via l'évènement OnSelectCell dont je gère le paramètre CanSelect.
Cela marche aussi - les cellules en questioin ne peuvent plus être sélectionnées.
MAIS, après avoir cliqué sur une de ces cellules "protégées", si je tape ensuite du texte, il se place directement dans UNE AUTRE celule è celle qui était sélectionnée auoaravant.
Or, ce n'est pas le comportement que je veux. Je cherche à désélectionner les cellules actuellement sélectionnées lorsque je "protège" une de mes cellules, de sorte que des caractères frappèes après un refus d'édition soit ignorées. Et je n'y arrive pas.
J'ai trouvé sur internet l'astuce d'affecter un TGridRect invalide à la propriété Selected:
TStringGrid(Sender).Selection := TGridRect(Rect(-1,-1,-1,-1)); // <======= ne désactive PAS la sélection !
Résultat: auxun.
De plus, dès qu'une cellule a été éditée, même si ensuite j'en sélectionne une autre, le fait de sortir du programme provoque souvent une violation de mémoire.
Je mets en pièce jointe un fichier ZIP avec le projet complet en D6 PE, y compris l'exécutable.
Question 1: comment effectivement désélectionner une cellule ?
Question 2: qu'est-ce qui provoque la violation de mémoire en sortie de programme ?
Partager