Lorsque les gens utilisent Delphi pour développer des applications de base de données, ils utilisent souvent des contrôles de table pour faire des rapports. L'utilisation flexible de l'événement OnDrawCell du contrôle du tableau peut compléter l'affichage de certains effets spéciaux, qui peuvent mieux répondre aux besoins des utilisateurs. Cet article présente trois conseils pour utiliser de manière flexible les événements OnedrawCell.
Mettez à jour dynamiquement la couleur des lignes de table
Parfois, il est nécessaire de mettre à jour la couleur des lignes de table dynamiquement dans le rapport. Par exemple, dans la liste des fournisseurs, les fournisseurs qui sont préférés sont affichés en vert, tandis que d'autres fournisseurs sont affichés en rouge. À l'heure actuelle, vous pouvez utiliser le code suivant pour l'implémenter dans l'événement OnDrawCell:
si table1.fieldByName ('Custno'). Asinteger> 1500 alors
Dbgrid1.canvas.font.color: = Clire;
Dbgrid1.defaultdrawColumnCell (rect, datacol,
Colonne, état)
Le code ci-dessus peut être élargi en fonction des besoins de l'application. Par exemple, lorsque vous devez l'afficher en gras, modifiez simplement la ligne correspondante en:
Dbgrid1.canvas.font.style: = [fsbold];
Insérez d'autres commandes visuelles dans le tableau
Dans la programmation de la base de données, les contraintes de clé étrangère sont une méthode efficace pour s'assurer que les données de la base de données sont stockées en fonction des besoins des utilisateurs. Par exemple, dans un environnement de traitement des commandes, il existe une contrainte de clé étrangère entre la table de commande et le tableau client, c'est-à-dire que chaque enregistrement dans le tableau de commande doit avoir un élément correspondant dans la table client. De cette façon, lors du remplissage du bon de commande, si la liste des clients est fournie pour que l'utilisateur puisse choisir dans la mise au point d'entrée, l'exactitude des données sera effectivement garantie.
Le contrôle DBGrid et le contrôle de StringGrid sont dérivés de TCustomGrid, où le contrôle DBGrid peut entrer des données. Le mécanisme interne de Delphi pour le traitement DBGRID consiste à flotter un contrôle DBEDIT sur la grille. La grille qui peut obtenir des données de mise au point et de saisie est en fait un contrôle flottant Dbedit. afin que les données soient entrées sur la table. Ainsi, la façon d'insérer d'autres commandes visuelles dans une table est de faire flotter le contrôle visuel sur la grille. Ainsi, en principe, tout contrôle peut être inséré dans une table. Cet article prend l'exemple de l'insertion d'une boîte déroulante dans un tableau pour introduire les étapes spécifiques pour insérer d'autres contrôles sur la grille.
1 et 1 Définir les propriétés
Lisez la propriété des éléments de la liste des clients dans la boîte déroulante.
2 Configuration de l'événement OnDrawCell
L'événement OnDrawCell est tiré lors du dessin de la cellule de la table. Lorsque le champ correspondant à la cellule qui obtient la mise au point est cohérent avec le champ correspondant à la boîte déroulante, déplacez la boîte déroulante vers la grille qui obtient une mise au point et rendez la boîte déroulante visible, atteignant ainsi la fonction d'affichage de l'affichage la boîte déroulante sur la colonne spécifiée de la table. L'événement OnDrawCell pour la définition du tableau est le suivant:
si (gdfocus dans l'état) alors
Commencer
// Si les champs correspondants sont cohérents, exécutez
if (grid.cells [acol, 0] = 'société') alors
Commencer
// déplace la boîte déroulante vers la position spécifiée
Combobox1.left: = rect.left + grid.left;
Combobox1.top: = rect.top + grid.top;
Combobox1.width: = rect.Right-rect.left;
Combobox1.height: = rect.bottom-rect.top;
// rendre la boîte déroulante visible et se concentrer
ComboBox1.Visible: = true;
Combobox1.setfocus;
fin;
fin;
3 et 3 Configuration de l'événement OnClick
Si le champ correspondant à la cellule qui obtient la mise au point ne correspond pas au champ correspondant à la boîte déroulante, la boîte déroulante n'est pas visible. Pour ce faire, définissez l'événement OnClick de la table comme suit:
If (grid.cells [grid.col, 0] <> 'Company') puis
Commencer
ComboBox1.Visible: = false;
fin;
4 Configuration de l'événement Onchange
Dans l'événement OnDrawCell, seul le travail de dessin de cellules et d'affichage des boîtes déroulants est terminé et les données ne peuvent pas être entrées dans le tableau. Pour ce faire, définissez l'événement Onchange de la boîte déroulante comme suit:
Grid.cells [grid.col, grid.row]: = comboBox1.
Éléments [combobox1.itemIndex];
Cela complète le travail d'insertion de la boîte déroulante dans le tableau.
Afficher les champs graphiques dans le tableau
Dans le développement de programmes, il faut parfois afficher des caractères non conventionnels dans les rapports. Par exemple, le champ d'élément d'inspection dans le rapport d'inspection des pièces contient des caractères non conventionnels tels que la rugosité de l'usinage et la tolérance d'usinage. L'idée générale de résoudre ce problème est de stocker ces caractères non conventionnels en tant que champs graphiques, tels que le champ d'image dans une base de données SQL Server. Cependant, qu'il s'agisse du contrôle StringGrid ou du contrôle DBGrid, il ne peut afficher directement les chaînes, ce qui crée le problème de la façon d'afficher les champs graphiques sur le contrôle de la table.
À première vue, ce problème peut être résolu en insérant le contrôle DBIMage dans le tableau en utilisant la méthode ci-dessus. Cependant, cela nécessite l'insertion d'un contrôle avec le même numéro que l'enregistrement. , mais aussi évidemment le scintillement dans le domaine des graphiques. Une meilleure solution consiste à créer dynamiquement un contrôle DBIMage lors de la connexion à la base de données, de l'utiliser pour lire le champ d'image de la base de données et l'enregistrer sur le disque dur du client sous forme de fichier temporaire. Lisez le fichier temporaire dans l'événement OnDrawCell de la table et termine les travaux de dessin. Voici les étapes spécifiques pour afficher les champs graphiques du tableau.
1 et 1 Enregistrer le champ d'image
Lisez tous les champs d'image lors de l'exécution d'une requête et enregistrez sur le disque dur du client.
Commencer
... // omettez la déclaration de requête
Nom de fichier: = 'D: EMP';
Mydbimage: = tdbimage.create (self); // créer dbimage
Mydbimage.parent: = self;
Mydbimage.datasource: = dataSource1;
MyDBimage .DataField: = 'Description'; // Spécifiez comme champ "Description"
Index: = 1;
Bien que non clientdata.eof commence // lisez la base de données
S: = intToStr (index);
FileName1: = nom de fichier + s;
Filename1: = filename1 + '. Bmp';
// Enregistrer les fichiers temporaires
MyDBimage .Picture .BitMap .SavetoFile (FileName1);
Grid.Cells [1, index]: = '';
// Remplissez le formulaire
Grid.Cells [2, index]: = clientData.fieldByName («Données mesurées»). Asstring;
ClientData.Next;
Index: = index + 1;
fin;
MyDBimage.DestROY ();
fin;
2 Copiez les graphiques
Définissez l'événement OnDrawCell, lisez le fichier temporaire et copiez les graphiques dans la colonne spécifiée de la table:
if ((acol = 1) et (arow> 0) et (grid.colcount> 2)) alors commencez
// Le tableau nécessite au moins deux colonnes
Nom de fichier: = 'd: emp';
S: = IntToStr (AROW);
Nom de fichier: = nom de fichier + s;
Nom de fichier: = nom de fichier + '. BMP';
MyImage: = Timage.Create (self); // Créer un contrôle d'image
Myimage.parent: = self;
// Lire des fichiers temporaires
Myimage.picture.bitmap.loadFromfile (nom de fichier);
// Copiez les graphiques
Grid.canvas.draw (rect.left, rect.top, myimage.
Image.graphic);
MyImage.Destroy ();
fin;