Créer une surbrillance de couleur au survol à l'aide de Delphi

click fraud protection

Avez-vous déjà vu une colonne ou une ligne de menu ou de tableau surligner dans une couleur différente lorsque votre souris la survole? C'est notre objectif ici: mettre une ligne en surbrillance lorsque le pointeur de la souris est à portée.

Le composant Delphi TDBGrid est l'un des joyaux de la VCL. Conçu pour permettre à un utilisateur de visualiser et de modifier des données dans une grille tabulaire, le DBGrid propose différentes façons de personnaliser la façon dont il représente ses propres données. Par exemple, ajouter de la couleur à vos grilles de base de données améliorera l'apparence et différenciera l'importance de certaines lignes ou colonnes dans la base de données.

Cependant, ne vous laissez pas berner par des didacticiels trop simplistes sur ce sujet. Il peut sembler assez simple de définir simplement dgRowSelect propriété, mais rappelez-vous que lorsque dgRowSelect est inclus dans Les options, les dgEditing est ignoré, ce qui signifie que la modification des données à l'aide de la grille est désactivée.

instagram viewer

Vous trouverez ci-dessous une explication sur la façon d'activer OnMouseOver Type de événement pour une ligne DBGrid, afin que la souris soit enregistrée et localisée, rendant l'enregistrement actif de manière à mettre en surbrillance la ligne correspondante dans un DBGrid.

Comment travailler avec les composants OnMouseOver et Delphi

Le premier ordre du jour est écrire du code pour le OnMouseMove dans un composant TDBGrid afin qu'il puisse localiser la ligne et la colonne (cellule) de DBGrid sur lesquelles la souris survole.

Si la souris se trouve sur la grille (gérée dans le OnMouseMove gestionnaire d'événements), vous pouvez utiliser le MoveBy méthode d'un composant DataSet pour définir l'enregistrement en cours à celui affiché "sous" le curseur de la souris.

type THackDBGrid = classe(TDBGrid);
...
procédure TForm1.DBGrid1MouseMove
(Expéditeur: TObject; Shift: TShiftState; X, Y: Entier);
var
gc: TGridCoord;
commencer
gc: = DBGrid1.MouseCoord (x, y);
si (gc. X> 0) ET (gc. Y> 0) puis commencer
DBGrid1.DataSource. Base de données. MoveBy
(gc. Y - THackDBGrid (DBGrid1) .Row);
fin;
fin;

Un code similaire peut être utilisé pour montrer sur quelle cellule la souris survole et pour changer le curseur quand il est au-dessus de la barre de titre.

Afin de définir correctement l'enregistrement actif, vous devez pirater un DBGrid et mettre la main sur le protégé Rangée propriété. le Rangée propriété d'un TCustomDBGrid Le composant contient la référence à la ligne actuellement active.

Beaucoup Composants Delphi ont des propriétés et des méthodes utiles qui sont marquées invisibles ou protégées pour un développeur Delphi. Si tout va bien, pour accéder à de tels membres protégés d'un composant, une technique simple appelée le «hack protégé» peut être utilisée.

Avec le code ci-dessus, lorsque vous déplacez la souris sur la grille, l'enregistrement sélectionné est celui affiché dans la grille "sous" le curseur de la souris. Il n'est pas nécessaire de cliquer sur la grille pour modifier l'enregistrement en cours.

Mettez la ligne active en surbrillance pour améliorer l'expérience de l'utilisateur:

procédure TForm1.DBGrid1DrawColumnCell
(Expéditeur: TObject; const Rect: TRect; DataCol: Entier;
Colonne: TColonne; État: TGridDrawState);
beginif (THackDBGrid (DBGrid1) .DataLink. ActiveRecord + 1 =
THackDBGrid (DBGrid1) .Row)
ou (gdFocused in State) ou (gdSélectionné dans l'État) puis commencer
DBGrid1.Canvas. Brosse. Couleur: = clSkyBlue;
DBGrid1.Canvas. Police de caractère. Style: = DBGrid1.Canvas. Police de caractère. Style + [fsBold];
DBGrid1.Canvas. Police de caractère. Couleur: = clRed;
fin;
fin;

le OnDrawColumnCell L'événement est utilisé pour gérer le besoin d'un dessin personnalisé pour les données dans les cellules de la grille.

Vous pouvez utiliser une petite astuce pour différencier la ligne sélectionnée de toutes les autres lignes. Considérez que le Rangée propriété (entier) est égal à ActiveRecord (+1) propriété du Liaison de données objet que la ligne sélectionnée est sur le point d'être peinte.

Vous souhaiterez probablement désactiver ce comportement (le MoveBy méthode en OnMouseMove gestionnaire d'événements) lorsque Base de données connecté à un DBGrid est en Éditer ou Insérer mode.

instagram story viewer