Σχεδιασμένο για να επιτρέπει σε ένα χρήστη να προβάλλει και να επεξεργάζεται δεδομένα σε πίνακα με πίνακες, το DBGrid παρέχει διάφορους τρόπους προσαρμογής του τρόπου με τον οποίο αντιπροσωπεύει τα "δεδομένα" του. Με τόσο μεγάλη ευελιξία, α Δελφοί ο προγραμματιστής μπορεί πάντα να βρει νέους τρόπους για να το καταστήσει πιο ισχυρό.
Μία από τις ελλείπουσες λειτουργίες του TDBGrid είναι ότι δεν υπάρχει δυνατότητα αυτόματης προσαρμογής των εύρους συγκεκριμένων στηλών για να ταιριάζει πλήρως το πλάτος του πελάτη του δικτύου. Όταν αλλάζετε το μέγεθος του στοιχείου DBGrid κατά το χρόνο εκτέλεσης, τα πλάτη της στήλης δεν αλλάζουν μέγεθος.
Εάν το πλάτος του DBGrid είναι μεγαλύτερο από το συνολικό πλάτος όλων των στηλών, θα πάρετε μια κενή περιοχή αμέσως μετά την τελευταία στήλη. Από την άλλη πλευρά, εάν το συνολικό πλάτος όλων των στηλών είναι μεγαλύτερο από το πλάτος του DBGrid, θα εμφανιστεί μια οριζόντια γραμμή κύλισης.
Ρυθμίστε αυτόματα τα πλάτη της στήλης DBGrid
Υπάρχει μια εύχρηστη διαδικασία που μπορείτε να ακολουθήσετε που καθορίζει τα πλάτη των επιλεκτικών στηλών DBGrid όταν το πλέγμα έχει αλλάξει το μέγεθος κατά το χρόνο εκτέλεσης.
Είναι σημαντικό να σημειωθεί ότι, συνήθως, μόνο δύο έως τρεις στήλες σε ένα DBGrid πρέπει πραγματικά να αλλάξουν αυτόματα. όλες οι άλλες στήλες εμφανίζουν κάποια δεδομένα "στατικού πλάτους". Για παράδειγμα, μπορείτε πάντα να ορίσετε σταθερό πλάτος για στήλες που εμφανίζουν τιμές από πεδία δεδομένων που αντιπροσωπεύονται με TDateTimeField, TFloatField, TIntegerField και παρόμοια.
Επιπλέον, πιθανότατα θα δημιουργήσετε (επί του χρόνου σχεδιασμού) τα επίμονα στοιχεία πεδίων χρησιμοποιώντας τον επεξεργαστή πεδίων, για να καθορίσετε τα πεδία στο σύνολο δεδομένων, τις ιδιότητές τους και την παραγγελία τους. Με αντικείμενο απόγονο TField, μπορείτε να χρησιμοποιήσετε την ιδιότητα Ετικέτα για να υποδείξετε ότι μια συγκεκριμένη στήλη που εμφανίζει τιμές για αυτό το πεδίο πρέπει να είναι αυτόματη μεγέθους.
Αυτή είναι η ιδέα: Αν θέλετε μια στήλη να προσαρμόζεται αυτόματα στον διαθέσιμο χώρο, αντιστοιχίστε μια ακέραια τιμή για την ιδιότητα Ετικέτα απογόνου TField που δείχνει το ελάχιστο πλάτος της αντίστοιχης στήλης.
Η διαδικασία FixDBGridColumnsWidth
Πριν ξεκινήσετε, στο OnCreate συμβάν για το αντικείμενο της φόρμας που περιέχει το DBGrid, καθορίστε ποιες στήλες χρειάζεται να αλλάξουν αυτόματα, αναθέτοντας μια μη μηδενική τιμή για την ιδιότητα Tag του αντίστοιχου αντικειμένου TField.
διαδικασία TForm1.FormCreate (αποστολέας: TObject);
ξεκινήσει// να ρυθμίσετε τις στήλες αυτόματης αντιστοίχισης με την αντιστοίχιση
// Minimum Width στην ιδιότητα Tag.
// χρησιμοποιώντας σταθερή τιμή: 40 px
Table1.FieldByName ('FirstName') Ετικέτα: = 40;
// χρησιμοποιώντας μεταβλητή τιμή: πλάτος του
// προεπιλεγμένο κείμενο τίτλου στήλης Table1.FieldByName ('LastName') Ετικέτα: = 4 + καμβά. TextWidth (Table1.FieldByName ('LastName'), DisplayName).
τέλος;
Στον παραπάνω κώδικα, ο Πίνακας1 είναι ένα στοιχείο TTable συνδεδεμένο με a Στοιχείο DataSource, η οποία συνδέεται με το DBGrid. Η ιδιότητα Table1.Table δείχνει στον πίνακα Employee DBDemos.
Έχουμε επισημάνει τις στήλες που εμφανίζουν τις τιμές για τα πεδία FirstName και LastName ώστε να μπορούν να τροποποιηθούν αυτόματα. Το επόμενο βήμα είναι να καλέσετε το FixDBGridColumnsWidth στο πρόγραμμα επεξεργασίας συμβάντων OnResize για τη φόρμα:
διαδικασία TForm1.FormResize (αποστολέας: TObject);
ξεκινήσει FixDBGridColumnsWidth (DBGrid1).
τέλος;
Σημείωση: Όλα αυτά έχουν νόημα εάν η ιδιότητα Align του DBGrid περιλαμβάνει μία από τις ακόλουθες τιμές: alTop, alBottom, alClient ή alCustom.
Τελικά, εδώ είναι ο κώδικας της διαδικασίας FixDBGridColumnsWidth:
διαδικασία FixDBGridColumnsWidth (const DBGrid: TDBGrid).
var i: ακέραιο; TotWidth: ακέραιο; VarWidth: ακέραιο; ΑντικαθιστώνταςColumnCount: ακέραιο; Αύγουστος: Τόξο;
ξεκινήσει// το συνολικό πλάτος όλων των στηλών πριν από την αλλαγή μεγέθους
TotWidth: = 0;
// πώς να διαιρέσετε επιπλέον χώρο στο δίκτυο
VarWidth: = 0;
// πόσες στήλες χρειάζεται να αλλάξουν αυτόματα
ΑντικαθιστώνταςColumnCount: = 0;
Για i: = 0 προς το -1 + DBGrid. Στήλες. μετρώ dobegin
TotWidth: = TotWidth + DBGrid. Στήλες [i] .Width;
αν DBGrid. Στήλες [i] .Field. Ετικέτα 0 έπειτα
Inc (ResizableColumnCount);
τέλος;
// προσθέστε 1px για τη γραμμή διαχωριστή στήληςαν dgColLines στο DBGrid. Επιλογές έπειτα
TotWidth: = TotWidth + DBGrid. Στήλες. Μετρώ;
// προσθέστε πλάτος της στήλης δείκτηαν dgIndicator στο DBGrid. Επιλογές έπειτα
TotWidth: = TotWidth + ΈνδειξηΔιανύματος;
// πλάτος vale "αριστερά"
VarWidth: = DBGrid. ClientWidth - TotWidth;
// Διανείμετε εξίσου το VarWidth
// σε όλες τις στήλες αυτόματης αλλαγής μεγέθουςαν ΑντικαθιστώνταςColumnCount> 0 έπειτα
VarWidth: = varWidth div ResizableColumnCount;
Για i: = 0 προς το -1 + DBGrid. Στήλες. μετρώ dobegin
AColumn: = DBGrid. Στήλες [i];
αν Αύγουστο. Πεδίο. Ετικέτα 0 τότε αρχίζει
Αύγουστο. Πλάτος: = Ακολουθία. Πλάτος + VarWidth;
αν Αύγουστο. Πλάτος τότε
Αύγουστο. Πλάτος: = Ακολουθία. Πεδίο. Ετικέτα;
τέλος;
τέλος;
τέλος; (* FixDBGridColumnsWidth *)