Κατανόηση και επεξεργασία συμβάντων πληκτρολογίου στους Δελφούς

Εκδηλώσεις πληκτρολογίου, μαζί με ποντικιών, είναι τα κύρια στοιχεία της αλληλεπίδρασης ενός χρήστη με το πρόγραμμά σας.

Παρακάτω υπάρχουν πληροφορίες σχετικά με τρία συμβάντα που σας επιτρέπουν να καταγράφετε τις πληκτρολογήσεις ενός χρήστη σε μια εφαρμογή Delphi: OnKeyDown, OnKeyUp και OnKeyPress.

Κάτω, επάνω, πατήστε, κάτω, επάνω, πατήστε...

Οι εφαρμογές Delphi μπορούν να χρησιμοποιήσουν δύο μεθόδους για τη λήψη της εισόδου από το πληκτρολόγιο. Εάν ένας χρήστης πρέπει να πληκτρολογήσει κάτι σε μια εφαρμογή, ο ευκολότερος τρόπος για να λάβετε αυτή την είσοδο είναι να χρησιμοποιήσετε ένα από τα στοιχεία ελέγχου που ανταποκρίνεται αυτόματα στις πληκτρολογήσεις, όπως Edit.

Σε άλλες στιγμές και για πιο γενικούς σκοπούς, ωστόσο, μπορούμε να δημιουργήσουμε διαδικασίες σε μια μορφή που χειρίζεται τρία συμβάντα που αναγνωρίζονται από τις φόρμες και από οποιοδήποτε στοιχείο που δέχεται είσοδο πληκτρολογίου. Μπορούμε να γράψουμε χειριστές συμβάντων για αυτά τα συμβάντα για να απαντήσουμε σε οποιοδήποτε συνδυασμό πλήκτρων ή πλήκτρων που μπορεί να πιέσει ο χρήστης κατά το χρόνο εκτέλεσης.

instagram viewer

Εδώ είναι τα γεγονότα:

OnKeyDown - Κλήση όταν πατηθεί κάποιο πλήκτρο στο πληκτρολόγιο
OnKeyUp - Κλήση όταν απελευθερώνεται οποιοδήποτε πλήκτρο στο πληκτρολόγιο
OnKeyPress - κλήση όταν πατηθεί ένα πλήκτρο που αντιστοιχεί σε ένα χαρακτήρα ASCII

Χειριστές πληκτρολογίου

Όλα τα συμβάντα πληκτρολογίου έχουν ένα παράμετρο κοινά. ο Κλειδί η παράμετρος είναι το κλειδί στο πληκτρολόγιο και χρησιμοποιείται για να περάσει με αναφορά της τιμής του πατημένου πλήκτρου. ο Βάρδια παράμετρος (στο OnKeyDown και OnKeyUp διαδικασίες) υποδεικνύει εάν τα πλήκτρα Shift, Alt ή Ctrl συνδυάζονται με το πληκτρολόγιο.

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

διαδικασία TForm1.FormKeyDown (αποστολέας: TObject; var Λέξη κλειδί; Shift: TShiftState);... διαδικασία TForm1.FormKeyUp (αποστολέας: TObject; var Λέξη κλειδί; Shift: TShiftState);... διαδικασία TForm1.FormKeyPress (αποστολέας: TObject; var Κλειδί: Char); 

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

Τι είναι η εστίαση;

Η εστίαση είναι η δυνατότητα να λαμβάνετε εισερχόμενα από τον χρήστη μέσω του ποντίκι ή πληκτρολόγιο. Μόνο το αντικείμενο που έχει την εστίαση μπορεί να λάβει ένα συμβάν πληκτρολογίου. Επίσης, μόνο μία συνιστώσα ανά φόρμα μπορεί να είναι ενεργή ή να έχει την εστίαση σε μια τρέχουσα εφαρμογή ανά πάσα στιγμή.

Ορισμένα στοιχεία, όπως TImage, TPaintBox, TPanel και TLabel δεν μπορεί να λάβει εστίαση. Γενικά, συνιστώσες που προέρχονται από TGraphicControl δεν μπορούν να λάβουν εστίαση. Επιπλέον, τα στοιχεία που είναι αόρατα στο χρόνο εκτέλεσης (TTimer) δεν μπορεί να λάβει εστίαση.

OnKeyDown, OnKeyUp

ο OnKeyDown και OnKeyUp τα συμβάντα παρέχουν το χαμηλότερο επίπεδο απόκρισης πληκτρολογίου. Και τα δυο OnKeyDown και OnKeyUp οι χειριστές μπορούν να ανταποκριθούν σε όλα τα πλήκτρα πληκτρολογίου, συμπεριλαμβανομένων των πλήκτρων λειτουργίας και των πλήκτρων σε συνδυασμό με το Βάρδια, Alt, και Ctrl κλειδιά.

Τα συμβάντα πληκτρολογίου δεν αλληλοαποκλείονται. Όταν ο χρήστης πιέσει ένα κλειδί, και το OnKeyDown και OnKeyPress τα γεγονότα δημιουργούνται και όταν ο χρήστης απελευθερώσει το κλειδί, το OnKeyUp συμβάν. Όταν ο χρήστης πιέσει ένα από τα πλήκτρα OnKeyPress δεν ανιχνεύει, μόνο το OnKeyDown συμβάν, ακολουθούμενη από το OnKeyUp Εκδήλωση.

Εάν κρατήσετε πατημένο ένα πλήκτρο, το OnKeyUp συμβάν μετά από όλα OnKeyDown και OnKeyPress έχουν συμβεί γεγονότα.

OnKeyPress

Το OnKeyPress επιστρέφει έναν διαφορετικό χαρακτήρα ASCII για 'g' και 'G', αλλά OnKeyDown και OnKeyUp μην κάνετε διάκριση μεταξύ κεφαλαίων και πεζών άλφα κλειδιών.

Παράμετροι κλειδιού και μετατόπισης

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

αν Κλειδί σε ['a'.. 'z'] + ['A'.. 'Z'] έπειτα Κλειδί: = # 0 

Η παραπάνω δήλωση ελέγχει αν το Κλειδί παράμετρος είναι η ένωση δύο συνόλων: πεζά χαρακτήρες (δηλ. ένα διά μέσου z) και κεφαλαίων χαρακτήρων (Α-Ζ). Αν ναι, η δήλωση αποδίδει την τιμή χαρακτήρα μηδέν στο Κλειδί για να αποτρέψετε οποιαδήποτε εισαγωγή στο Επεξεργασία για παράδειγμα, όταν λαμβάνει το τροποποιημένο κλειδί.

Για μη αλφαριθμητικά κλειδιά, WinAPI κωδικούς εικονικού κλειδιού μπορεί να χρησιμοποιηθεί για να προσδιοριστεί το πάτημα του πλήκτρου. Τα Windows ορίζουν ειδικές σταθερές για κάθε πλήκτρο που μπορεί να πατήσει ο χρήστης. Για παράδειγμα, VK_RIGHT είναι ο εικονικός κωδικός κλειδιού για το πλήκτρο δεξιάς βέλους.

Για να πάρετε την κατάσταση κλειδιού ορισμένων ειδικών κλειδιών όπως ΑΥΤΙ ή Σελίδα προς τα πάνω, μπορούμε να χρησιμοποιήσουμε το GetKeyState Κλήση API των Windows. Η κατάσταση του κλειδιού καθορίζει εάν το πλήκτρο είναι πάνω, κάτω ή εναλλασσόμενο (ενεργοποιημένο ή απενεργοποιημένο - εναλλασσόμενο κάθε φορά που πατάτε το πλήκτρο).

αν HiWord (GetKeyState (vk_PageUp)) <> 0 έπειτα
ShowMessage ('PageUp - DOWN')
αλλού
ShowMessage ('PageUp - UP'); 

Στο OnKeyDown και OnKeyUp γεγονότα, Κλειδί είναι μια τιμή του Word που δεν έχει υπογραφεί και αντιπροσωπεύει ένα εικονικό κλειδί των Windows. Προκειμένου να αποκτηθεί η τιμή χαρακτήρων Κλειδί, χρησιμοποιούμε το Chr λειτουργία. Στο OnKeyPress Εκδήλωση, Κλειδί είναι ένα Απανθρακώνω τιμή που αντιπροσωπεύει έναν χαρακτήρα ASCII.

Και τα δυο OnKeyDown και OnKeyUp τα συμβάντα χρησιμοποιούν την παράμετρο Shift, τύπου TShiftState, ένα πλήκτρο σημαίας για τον καθορισμό της κατάστασης των πλήκτρων Alt, Ctrl και Shift, όταν πατηθεί ένα πλήκτρο.

Για παράδειγμα, όταν πατάτε Ctrl + A, παράγονται τα ακόλουθα συμβάντα κλειδιά:

 Πλήκτρα κλειδιού (Ctrl) // ssCtrl
Κλείδωμα πλήκτρων (Ctrl + A) // ssCtrl + 'Α'KeyPress (A) Πλήκτρα (Ctrl + A)

Ανακατεύθυνση συμβάντων πληκτρολογίου στη φόρμα

Για να παγώσετε τις πληκτρολογήσεις στο επίπεδο της φόρμας αντί να τις μεταβιβάσετε στα στοιχεία της φόρμας, ορίστε τις μορφές KeyPreview ιδιότητα True (χρησιμοποιώντας το Ελεγκτής αντικειμένων). Το στοιχείο εξακολουθεί να βλέπει το συμβάν, αλλά η φόρμα έχει την ευκαιρία να το χειριστεί πρώτα - για παράδειγμα, να επιτρέψει ή να απαγορεύσει ορισμένα πλήκτρα που πρέπει να πατηθούν.

Υποθέστε ότι έχετε πολλά στοιχεία επεξεργασίας σε μια φόρμα και το Μορφή. OnKeyPress η διαδικασία μοιάζει με:

διαδικασίαTForm1.FormKeyPress (αποστολέας: TObject; var Κλειδί: Char); ξεκινήσειαν Κλειδί σε ['0'..'9'] έπειτα Κλειδί: = # 0. τέλος; 

Εάν ένα από τα στοιχεία επεξεργασίας έχει το Συγκεντρώνω, και το KeyPreview η ιδιότητα μιας φόρμας είναι ψευδής, ο κώδικας αυτός δεν θα εκτελεστεί. Με άλλα λόγια, αν ο χρήστης πιέσει το 5 κλειδί, το 5 χαρακτήρας θα εμφανιστεί στο στοιχείο εστιασμένης επεξεργασίας.

Ωστόσο, αν το KeyPreview έχει οριστεί στην επιλογή True (True), στη συνέχεια, στη φόρμα OnKeyPress το συμβάν εκτελείται πριν από το στοιχείο Επεξεργασία βλέπει το πλήκτρο που πιέζεται. Και πάλι, αν ο χρήστης έχει πατήσει το 5, τότε αντιστοιχεί την τιμή χαρακτήρων μηδέν στο κλειδί για την αποτροπή της αριθμητικής εισαγωγής στο στοιχείο Επεξεργασία.

instagram story viewer