Comment définir la cellule active dans TDBGrid?
Je veux activer une cellule dans une TDBGrid
par le code. Par "activer" je veux dire que l'utilisateur a cliqué à l'intérieur de la cellule, prêts à modifier le contenu de la cellule. Comment pourrais-je faire cela?
Edit: c'est probablement Ce qui implique deux étapes: changement de la cellule active, puis entrer en mode édition.
OriginalL'auteur Heinrich Ulbricht | 2011-11-02
Vous devez vous connecter pour publier un commentaire.
Si vous voulez dire " activer le mode d'édition de la cellule active’, alors vous devriez probablement faire comme ceci:
L'activation d'une cellule particulière peut être fait soit via
SelectedIndex
:ou via
SelectedField
:Pour déterminer lequel la cellule est sous le curseur de la souris à l'heure actuelle, vous pouvez utiliser
MouseCoord
, qui renvoie unTGridCoord
enregistrement holding les coordonnées de la cellule sous le curseur. LeTGridCoord.X
champ peut être utilisé directement pour définir la grille de l'actif de la colonne.Réglage de la ligne est plus délicat, et jusqu'à présent, la seule façon que j'ai pu trouver implique le soi-disant protégé hack, la méthode d'accès à des biens protégés et les méthodes d'une classe. Et c'est le
TDBGrid
de classe que nous avons besoin de "hack".Fondamentalement, vous déclarez un vide descendant de
TDBGrid
, comme ceci:Puis, quand vous en avez besoin pour accéder à une propriété protégée ou la méthode, vous tout simplement jeté l'instance d'une classe standard (
MyDBGrid
dans ce cas) pour le "piratage", type (THackDBGrid
):L'élément qui nous intéresse est la
Row
de la propriété. Il retourne la coordonnée Y de la ligne active. Nous avons besoin de savoir afin de déterminer la différence entre la ligne active et celle qui est sous le curseur, afin de pouvoir ensuite les déplacer le dataset sous-jacent du pointeur d'enregistrement en conséquence. Voici comment:La
Row
valeur n'est pas absolue, elle est relative à la zone visible de la rangée du haut, mais c'estTGridCoord.Y
, de sorte que la différence entre les deux correspond à la différence entre les lignes de données dans le dataset sous-jacent.Une chose que j'aimerais souligner: ce protégé de hack méthode doit être utilisée en toute discrétion. Éléments protégés sont protégés pour une raison. Donc, si vous pouvez l'éviter, s'il vous plaît le faire. Et si vous ne pouvez pas (il n'y a pas d'autre moyen, ou il vous aide à faire des choses beaucoup plus facilement), n'oubliez pas de éviter de changer quoi que ce soit directement à l'aide protégé hack. Je veux dire, c' pourrait être tout droit, mais en général, on ne peut jamais savoir. Vous pouvez voir que j'ai seulement utilisé la méthode de lire contenus protégés, je n'ai pas changer quoi que ce soit, directement. L'état de l'objet était finalement changé, mais c'est le résultat d'un mécanisme standard déclenchée par la
MoveBy
méthode.Vous pouvez en lire plus à propos protégé hack ici.
Veuillez vérifier ma mise à jour.
Mis à jour avec un moyen de trouver la cellule sous le curseur de la souris.
L'obtention de plus près 🙂 Y est encore ignoré. J'ai besoin d'être en mesure de spécifier librement choisis cellule - cela inclut de ligne et de colonne (ou X et Y).
Ouais, l'avait vu venir. Réglage de la ligne serait beaucoup plus difficile. Droit, retour à la planche à dessin puis.
OriginalL'auteur Andriy M
Mon implémentation basée sur Andriy l'excellent travail de détective:
(La grille de sélection suit le curseur de la souris. Mais
SelectDBGridCell
pourrait également être utilisée pour sélectionner une cellule basée sur d'autres critères.)Fonctionne comme un charme à partir d'un point de vue technique. La convivialité est une autre question.
OriginalL'auteur Heinrich Ulbricht