Wenn Menschen Delphi verwenden, um Datenbankanwendungen zu entwickeln, verwenden sie häufig Tabellensteuerungen, um Berichte zu erstellen. Die flexible Verwendung des ONDRAWCELL -Ereignisses der Tabellensteuerung kann die Anzeige einiger Spezialeffekte vervollständigen, die den Benutzeranforderungen besser erfüllen können. In diesem Artikel werden drei Tipps für die flexible Verwendung von OneDrawcell -Ereignissen eingeführt.
Aktualisieren Sie dynamisch die Farbe der Tabellenreihen
Manchmal ist es notwendig, die Farbe der Tabellenzeilen dynamisch im Bericht zu aktualisieren. In der Lieferantenliste werden beispielsweise Lieferanten, die bevorzugt werden, grün angezeigt, während andere Lieferanten rot angezeigt werden. Zu diesem Zeitpunkt können Sie den folgenden Code verwenden, um ihn in der OneDrawcell -Veranstaltung zu implementieren:
Wenn Tabelle 1.FieldbyName ('CustNo'). Assiderer> 1500 Dann
Dbgrid1.canvas.font.color: = clred;
DBGRID1.DEFAULTDRAWCOLUMNCELL (RECT, DATACOL,
Spalte, Zustand)
Der obige Code kann entsprechend den Anforderungen der Anwendung erweitert werden. Wenn Sie beispielsweise fett angezeigt werden müssen, ändern Sie einfach die entsprechende Zeile auf:
Dbgrid1.canvas.font.Style: = [fsbold];
Fügen Sie andere visuelle Steuerelemente in die Tabelle ein
In der Datenbankprogrammierung sind fremde Schlüsselbeschränkungen eine effektive Methode, um sicherzustellen, dass die Daten in der Datenbank gemäß den Benutzeranforderungen gespeichert werden. In einer Auftragsverarbeitungsumgebung gibt es beispielsweise eine fremde Schlüsselbeschränkung zwischen der Bestellentabelle und der Kundentabelle, dh jeder Datensatz in der Bestellentabelle sollte in der Kundentabelle ein entsprechendes Element haben. Auf diese Weise wird beim Ausfüllen des Bestellformulars, wenn die Kundenliste für den Benutzer im Eingabefokus vorgesehen ist, die Richtigkeit der Daten effektiv garantiert.
Sowohl die DBGRID -Steuerung als auch die StringGrid -Steuerung werden von tcustomgrid abgeleitet, wobei die DBGrid -Steuerung Daten eingeben kann. Der interne Mechanismus von Delphi für die DBGrid -Verarbeitung besteht darin, eine DbedIT -Steuerung auf dem Netz zu schweben. Das Netz, das Fokus und Eingabedaten erhalten kann, ist tatsächlich eine schwimmende DBTET -Steuerung. Diese Daten werden in die Tabelle eingegeben. Der Weg, andere visuelle Steuerelemente in eine Tabelle einzufügen, besteht darin, die visuelle Steuerung im Netz zu schweben. Im Prinzip kann jede Kontrolle in eine Tabelle eingefügt werden. In diesem Artikel wird das Beispiel für das Einfügen eines Dropdown-Boxs in eine Tabelle verwendet, um die spezifischen Schritte zum Einfügen anderer Steuerelemente in das Netz einzuführen.
1. Setzen Sie Eigenschaften
Lesen Sie die Elemente-Eigenschaft der Client-Liste im Dropdown-Feld.
2. Einrichten von OneDrawcell -Ereignis
Das OneDrawcell -Ereignis wird beim Zeichnen der Zelle der Tabelle abgefeuert. Wenn das Feld, das der Zelle entspricht, die den Fokus erhält, mit dem Feld übereinstimmt, das dem Dropdown-Feld entspricht Das Dropdown-Feld in der angegebenen Spalte der Tabelle. Das ONDRAWCELL -Ereignis zum Einstellen der Tabelle lautet wie folgt:
if (gdfocused im Staat) dann
Beginnen
// Wenn die entsprechenden Felder konsistent sind, führen Sie aus
if (grid.cells [acol, 0] = 'company') dann
Beginnen
// Verschieben Sie das Dropdown-Feld in die angegebene Position
Combobox1.left: = rect.left + grid.left;
Combobox1.top: = rect.top + grid.top;
Combobox1.width: = rect.Right-rect.left;
Combobox1.Height: = rect.bottom-rect.top;
// Machen Sie die Dropdown-Box sichtbar und konzentrieren Sie sich in den Fokus
Combobox1.vissible: = true;
Combobox1.setfocus;
Ende;
Ende;
3. Einrichten eines Onclick -Events
Wenn das Feld, das der Zelle entspricht, die den Fokus erhält, nicht mit dem dem Dropdown-Box entsprechenden Feld übereinstimmt, ist das Dropdown-Box nicht sichtbar. Stellen Sie dazu das Onclick -Ereignis der Tabelle wie folgt fest:
If (grid.cells [grid.col, 0] <> 'Company') dann
Beginnen
Combobox1.vissible: = false;
Ende;
4. Einrichten eines Onchange -Events
Im OneDrawcell-Ereignis werden nur die Arbeiten des Zeichnens von Zellen und die Anzeige von Dropdown-Boxen abgeschlossen, und es kann nicht Daten in die Tabelle eingegeben werden. Stellen Sie dazu das Onchange-Ereignis des Dropdown-Boxs wie folgt fest:
Grid.cells [grid.col, grid.row]: = combobox1.
Elemente [Combobox1.ItemIndex];
Dadurch wird die Arbeit des Einsetzens des Dropdown-Box in die Tabelle abgeschlossen.
Zeigen Sie Grafikfelder in der Tabelle
In der Programmentwicklung müssen manchmal einige unkonventionelle Zeichen in Berichten angezeigt werden. Zum Beispiel enthält das Feld Inspektionselement im Teil -Inspektionsbericht unkonventionelle Zeichen wie die Rauheit und Bearbeitungstoleranz. Die allgemeine Idee, dieses Problem zu lösen, besteht darin, diese unkonventionellen Zeichen als grafische Felder wie das Bildfeld in einer SQL -Server -Datenbank zu speichern. Unabhängig davon, ob es sich jedoch um die StringGrid -Steuerung oder die DBGrid -Steuerung handelt, kann es nur direkt Zeichenfolgen angezeigt werden, wodurch das Problem erstellt wird, wie Grafikfelder auf der Tabellensteuerung angezeigt werden.
Auf den ersten Blick kann dieses Problem gelöst werden, indem die DBIMage -Steuerung unter Verwendung der obigen Methode in die Tabelle eingefügt wird. Dies erfordert jedoch eine Steuerung mit der gleichen Anzahl wie die Aufzeichnung. , aber auch offensichtlich im Bereich Grafik. Eine bessere Lösung besteht darin, bei der Verbindung mit der Datenbank eine DBIMage -Steuerung dynamisch zu erstellen, das Bildfeld der Datenbank zu lesen und sie als temporäre Datei auf der Client -Festplatte zu speichern. Lesen Sie die temporäre Datei im ONDRAWCELL -Ereignis der Tabelle und vervollständigen Sie die Zeichnungsarbeiten. Hier sind die spezifischen Schritte, um die Graphenfelder in der Tabelle anzuzeigen.
1. Bildfeld speichern
Lesen Sie alle Bildfelder, wenn Sie eine Abfrage ausführen, und speichern Sie auf der Kundenfestplatte.
Beginnen
... // die Anweisung der Abfrage weglassen
Dateiname: = 'D: EMP';
Mydbimage: = tdbimage.create (self); // DBimage erstellen
Mydbimage.parent: = self;
Mydbimage.dataSource: = dataSource1;
Mydbimage .datafield: = 'Beschreibung'; // Geben Sie als "Beschreibung" -Feld an
Index: = 1;
Während nicht clientData.eof starten // Lesen Sie die Datenbank
S: = inttoStr (Index);
Dateiname1: = Dateiname+S;
Dateiname1: = Dateiname1+'. Bmp';
// temporäre Dateien speichern
Mydbimage .picture .bitmap .SaveTofile (Dateiname1);
Grid.Cells [1, Index]: = '';
// füllen Sie das Formular aus
Grid.Cells [2, Index]: = ClientData.FieldByName ('gemessene Daten'). Asstring;
ClientData.Next;
Index: = Index+1;
Ende;
Mydbimage.destroy ();
Ende;
2. Kopieren Sie die Grafiken
Legen Sie das OneDrawcell -Ereignis fest, lesen Sie die temporäre Datei und kopieren Sie die Grafiken in die angegebene Spalte der Tabelle:
if (((acol = 1) und (arow> 0) und (grid.colcount> 2)) beginnen
// Die Tabelle erfordert mindestens zwei Spalten
Dateiname: = 'D: emp';
S: = inttoStr (AROW);
Dateiname: = Dateiname+S;
Dateiname: = Dateiname+'. BMP';
MyImage: = Timage.create (self); // Bildsteuerung erstellen
Myimage.parent: = self;
// Temporäre Dateien lesen
Myimage.picture.bitmap.loadfromFile (Dateiname);
// die Grafiken kopieren
Grid.canvas.draw (rect.Left, rect.top, myimage.
Bild.Graphic);
Myimage.destroy ();
Ende;