Delphi fournit le puissant composant DBGrid pour faciliter la conception d'applications de base de données. Mais si nous utilisons uniquement le composant DBGrid, chaque focus (Grid) n'est qu'une simple zone d'édition de texte, ce qui est peu pratique pour les utilisateurs qui souhaitent saisir des données. Delphi fournit également d'autres composants de données pour faciliter la saisie utilisateur, tels que DBComboBox, DBCheckBox et d'autres composants, mais ces composants ne sont pas aussi puissants que DBGrid. Delphi, comme Visual FoxPRo, peut-il permettre à la grille de focus dans DBGrid d'être d'autres composants de données visuelles pour la commodité des utilisateurs ? En fait, nous pouvons y parvenir en insérant d’autres composants visuels dans le DBGrid.
Le mécanisme interne de Delphi pour traiter DBGrid consiste à faire flotter un composant sur la grille : le composant DBEdit. La grille dans laquelle vous saisissez les données est en fait un composant DBEdit flottant, et les autres zones qui ne sont pas ciblées ne sont que des images. Par conséquent, l’insertion d’autres composants visuels dans DBGrid fait flotter un composant visuel sur la grille. Par conséquent, n'importe quel composant, depuis un simple DbCheckBox jusqu'à une boîte de dialogue complexe, peut être inséré dans DBGrid. Voici une étape sur la façon d'insérer le composant DBComboBox dans DBGrid. Vous pouvez insérer d'autres composants en utilisant la même méthode.
1. Créez un nouveau projet dans Delphi 4.0.
2. Faites glisser les quatre composants DataSource et Table sur la carte des composants d'accès aux données et DBGrid et DBComboBox sur la carte des composants Data Controls vers Form1 respectivement.
3. Définissez les propriétés de chaque composant comme suit :
installation de configuration des attributs d'objet rcf1
Légende Form1 « Exemple d'insertion du composant SpinEdit dans DBGrid »
DataSource1 Tableau de l'ensemble de données 1
Table1 Nom de base de données DBDEMOS
Nom de la table 'enseignant.DBF'
Actif Vrai
Source de données DBGrid1 Source de données Source de données1
DBComboBox1 Champ de données SEXE
Source de données Source de données1
Visible Faux
Éléments de chaînes 'Mâle' |
Remarque : j'ai utilisé ici Teacher.dbf, qui reflète le sexe du corps professoral et du personnel, qui ne peut être que « homme » ou « femme ».
4. L'événement DrawDataCell consiste à dessiner des cellules Lorsque le champ correspondant à la grille ciblée est cohérent avec le champ correspondant à la zone de liste déroulante, déplacez la zone de liste déroulante vers la grille ciblée, et
Rendre la zone de liste déroulante visible pour réaliser la fonction d'affichage de DBComboBox sur la colonne spécifiée du DBGrid. Définissez l'événement OnDrawDataCell de DBGrid1 comme suit :
procédure TForm1.DBGrid1DrawDataCell(Expéditeur : TObject ; const Rect : TRect ; Champ : TField ; État : TGridDrawState) ;
commencer
si (gdFocused dans l'état) alors
commencer
si (Field.FieldName = DBComboBox1.DataField ) alors
commencer
DBComboBox1.Left := Rect.Left + DBGrid1.Left;
DBComboBox1.Top := Rect.Top + DBGrid1.top;
DBComboBox1.Width := Rect.Right - Rect.Left;
DBComboBox1.Height := Rect.Bottom - Rect.Top;
DBComboBox1.Visible := Vrai ;
fin;
fin;
fin;
5. Le DBComboBox ne s'affiche pas lorsque la cellule spécifiée dans DBGrid ne reçoit pas le focus. Définissez l'événement OnColExit de DBGrid1 comme suit :
procédure TForm1.DBGrid1ColExit(Expéditeur : TObject);
commencer
Si DBGrid1.SelectedField.FieldName = DBComboBox1.DataField alors
commencer
DBComboBox1.Visible := faux;
fin;
fin;
6. Lorsque la colonne spécifiée de DBGrid obtient le focus, l'événement DrawDataCell dessine uniquement la cellule et affiche DBComboBox, mais DBComboBox n'obtient pas le focus et la saisie des données est toujours effectuée sur la cellule. Appelez la fonction API Windows SendMessage dans l’événement KeyPress de DBGrid1 pour transférer les données saisies vers DBComboBox, réalisant ainsi la saisie de données sur DBComboBox. Définissez donc également l'événement KeyPress comme suit :
procédure TForm1.DBGrid1KeyPress(Expéditeur : TObject ; var Clé : Char) ;
commencer
si (clé < > chr(9)) alors
commencer
si (DBGrid1.SelectedField.FieldName =DBComboBox1.DataField) alors
commencer
DBComboBox1.SetFocus ;
SendMessage (DBComboBox1.Handle, WM_Char, Word (Clé), 0);
fin;
fin;
fin;
Le programme a réussi le débogage sous Windows 98 chinois et Delphi 4.015. J'espère que cet article vous permettra de développer des applications de bases de données plus facilement et plus rapidement.