Δημιουργήστε ένα Highlight Colour Mouseover χρησιμοποιώντας τους Delphi

Έχετε δει ποτέ ένα μενού ή μια στήλη ή μια σειρά επιτραπέζιων αντικειμένων σε διαφορετικό χρώμα όταν το ποντίκι σας κρέμεται πάνω από αυτό; Αυτός είναι ο στόχος μας εδώ: να έχουμε μια σειρά να επισημανθεί όταν ο δείκτης του ποντικιού βρίσκεται εντός εμβέλειας.

Το στοιχείο TDBGrid Delphi είναι ένα από τα κοσμήματα του VCL. Σχεδιασμένο για να επιτρέπει σε έναν χρήστη να προβάλλει και να επεξεργάζεται δεδομένα σε ένα πίνακα με πίνακες, το DBGrid παρέχει διάφορους τρόπους προσαρμογής του τρόπου με τον οποίο αντιπροσωπεύει τα δικά του δεδομένα. Για παράδειγμα, προσθέτοντας χρώμα στα πλέγματα της βάσης δεδομένων σας θα βελτιώσει την εμφάνιση και θα διαφοροποιήσει τη σημασία ορισμένων γραμμών ή στηλών στη βάση δεδομένων.

Ωστόσο, μην ξεγελιέστε από υπερβολικά απλοϊκά σεμινάρια σχετικά με αυτό το θέμα. Ίσως φαίνεται αρκετά εύκολο να ρυθμίσετε μόνο το dgRowSelect ιδιοκτησία, αλλά θυμηθείτε ότι όταν dgRowSelect περιλαμβάνεται στο Επιλογές, ο dgEditing η σημαία αγνοείται, πράγμα που σημαίνει ότι η επεξεργασία των δεδομένων χρησιμοποιώντας το πλέγμα είναι απενεργοποιημένη.

instagram viewer

Αυτό που θα βρείτε παρακάτω είναι μια εξήγηση για τον τρόπο ενεργοποίησης του OnMouseOver του είδους συμβάν για μια γραμμή DBGrid, έτσι ώστε το ποντίκι να καταγράφεται και να βρίσκεται, καθιστώντας την εγγραφή ενεργή έτσι ώστε να επισημαίνεται η αντίστοιχη σειρά σε DBGrid.

Πώς να εργαστείτε με τα στοιχεία OnMouse και Delphi

Η πρώτη σειρά εργασιών είναι γράφοντας κώδικα για το OnMouseMove συμβάν σε ένα στοιχείο TDBGrid έτσι ώστε να μπορεί να εντοπίσει τη γραμμή και τη στήλη (cell) του DBGrid που το ποντίκι κινείται πάνω.

Εάν το ποντίκι είναι πάνω από το πλέγμα (που διακινούνται στο OnMouseMove χειριστής συμβάντων), μπορείτε να χρησιμοποιήσετε το MoveBy Μέθοδος ενός στοιχείου DataSet για να ορίσετε την τρέχουσα εγγραφή σε αυτήν που εμφανίζεται "κάτω" από το δρομέα του ποντικιού.

τύπος THackDBGrid = τάξη(TDBGrid).
...
διαδικασία TForm1.DBGrid1MouseMove
(Αποστολέας: TObject; Μετατόπιση: TShiftState; X, Y: ακέραιος αριθμός).
var
gc: TGridCoord;
ξεκινήσει
gc: = DBGrid1.MouseCoord (χ, γ);
αν (gc. Χ> 0) ΚΑΙ (gc. Y> 0) τότε αρχίζει
DBGrid1.DataSource. DataSet. MoveBy
(gc. Y - THackDBGrid (DBGrid1) .Row);
τέλος;
τέλος;

Παρόμοιος κώδικας μπορεί να χρησιμοποιηθεί για να δείξει σε ποιο κελί το ποντίκι κινείται πάνω και για να αλλάξει ο δρομέας όταν είναι πάνω από τη γραμμή τίτλου.

Για να ρυθμίσετε σωστά την ενεργή εγγραφή, πρέπει να χαράξετε ένα DBGrid και να πάρετε τα χέρια σας στην προστατευμένη Σειρά ιδιοκτησία. ο Σειρά ιδιοκτησία ενός TCustomDBGrid το στοιχείο περιέχει την αναφορά στην τρέχουσα ενεργή σειρά.

Πολλά Εξαρτήματα Delphi έχουν χρήσιμες ιδιότητες και μεθόδους που χαρακτηρίζονται ως αόρατες ή προστατευμένες σε έναν προγραμματιστή των Delphi. Ας ελπίσουμε ότι, για να αποκτήσετε πρόσβαση σε τέτοια προστατευμένα μέλη ενός συστατικού, μπορεί να χρησιμοποιηθεί μια απλή τεχνική που ονομάζεται "προστατευμένο hack".

Με τον παραπάνω κώδικα, όταν μετακινείτε το ποντίκι πάνω από το πλέγμα, η επιλεγμένη εγγραφή είναι αυτή που εμφανίζεται στο πλέγμα "κάτω" του δρομέα του ποντικιού. Δεν χρειάζεται να κάνετε κλικ στο πλέγμα για να αλλάξετε την τρέχουσα εγγραφή.

Ενεργοποιήστε την ενεργή σειρά για να βελτιώσετε την εμπειρία του χρήστη:

διαδικασία TForm1.DBGrid1DrawColumnCell
(Αποστολέας: TObject; const Rect: TRect; DataCol: Ακέραιος αριθμός;
Στήλη: Τοπίο; Κράτος: TGridDrawState);
αρχικά (THackDBGrid (DBGrid1) .DataLink. ActiveRecord + 1 =
THackDBGrid (DBGrid1) .Row)
ή (gdFocused in State) ή (gdΕπιλογή στο κράτος) τότε αρχίζει
DBGrid1.Canvas. Βούρτσα. Χρώμα: = clSkyBlue;
DBGrid1.Canvas. Γραμματοσειρά. Στυλ: = DBGrid1.Canvas. Γραμματοσειρά. Στυλ + [fsBold];
DBGrid1.Canvas. Γραμματοσειρά. Χρώμα: = clRed;
τέλος;
τέλος;

ο OnDrawColumnCell το συμβάν χρησιμοποιείται για να χειριστεί την ανάγκη για προσαρμοσμένο σχέδιο για τα δεδομένα στα κελιά του δικτύου.

Μπορείτε να χρησιμοποιήσετε ένα μικρό τέχνασμα για να διαφοροποιήσετε την επιλεγμένη σειρά από όλες τις άλλες σειρές. Σκεφτείτε ότι το Σειρά ιδιοκτησίας (ακέραιος αριθμός) είναι ίσο με το ActiveRecord (+1) ιδιότητα του DataLink αντικείμενο ότι η επιλεγμένη σειρά πρόκειται να ζωγραφιστεί.

Ίσως θελήσετε να απενεργοποιήσετε αυτήν τη συμπεριφορά (το MoveBy στη μέθοδο OnMouseMove χειριστής συμβάντων) όταν DataSet συνδεδεμένο σε ένα DBGrid είναι σε Επεξεργασία ή Εισάγετε τρόπος.

instagram story viewer