Codes de raccourci Delphi. Coder les touches de navigation dans Delphi. Raccourcis clavier dans Delphi - raccourcis clavier dans l'environnement de programmation Delphi
Depuis l’aube de l’industrie informatique, le clavier est le principal périphérique de saisie et conservera probablement sa place pendant encore longtemps.
Événements de clavier, ainsi que événements de souris, sont les principaux éléments d'interaction de l'utilisateur avec le programme. Cet article parlera de trois événements, qui vous permettent d'attraper frappes dans l'application Delphi : SurKeyDown,
SurCléUp Et SurKeyPress.
Ils doivent être distingués par trois points suivant le texte de l'élément, ce qui n'est pas absolument nécessaire, mais c'est certainement une bonne convention à suivre. Ils se distinguent par le triangle de droite.
- Commandes : Éléments utilisés pour passer un ordre pour lancer une action.
- Ils ne se distinguent pas optiquement.
- Configuration : éléments permettant de désactiver ou d'activer une option.
- Activer la sélection est visuellement mis en évidence par une coche à gauche de l'élément.
- Boîtes de dialogue : entrées qui provoquent l'apparition d'une boîte de dialogue.
Pour recevoir une saisie au clavier, les applications Delphi peuvent utiliser deux méthodes. Le moyen le plus simple consiste à utiliser l'un des composants qui répondent automatiquement aux frappes au clavier, tels que Modifier. La deuxième façon consiste à créer des procédures sur le formulaire qui géreront les pressions et les relâchements de touches.
SurKeyDown Ces gestionnaires peuvent traiter à la fois les frappes simples et les combinaisons. Voici donc les événements : SurCléUp- appelé lorsqu'une touche du clavier est enfoncée. SurKeyPress- appelé lorsqu'une touche du clavier est relâchée.
- appelé lorsqu'une touche correspondant à un caractère ASCII spécifique est enfoncée.
Modification des clés dans Delphi Vous pouvez insérer un élément de menu directement dans une barre de menus. Ce bonne façon évitez cela. Les utilisateurs sélectionnent les composants de la barre de menus pour explorer la structure. Peu de personnes ont suggéré que vous puissiez exécuter la commande directement. Cependant, si vous décidez de placer la commande directement dans le panneau, placez au moins
point d'exclamation. choix fréquent cet article dure longtemps. Parfois, il est préférable de créer un niveau imbriqué pour placer le groupe directement au niveau du menu principal et séparer les éléments en lignes. Il n'est plus recommandé d'effectuer davantage de plongées. Si jamais vous installez une application avec plus de deux couches, vous découvrirez très bientôt la qualité du programme de désinstallation de cette application.
Il est maintenant temps de voir à quoi ressemblent les en-têtes du gestionnaire dans le programme :
procédure TForm1.FormKeyDown(Expéditeur : TObject; var procédure TForm1.FormKeyUp(Expéditeur : TObject; var Clé : Mot ; Maj : TShiftState); ... procédure var Clé : Car ); |
Tous les événements en ont un paramètre général, généralement appelé Clé. Ce paramètre permet de transmettre le code de la touche enfoncée. Paramètre Changement(dans les procédures OnKeyDown et OnKeyUp), indique si une touche a été enfoncée en combinaison avec Changement, Alt, Et Ctrl.
Une grande prudence doit également être prise lors de la modification des définitions au moment de l'exécution. Par exemple, si vous disposez d'une option « Afficher le tableau » dans un menu, ce serait une bonne idée de modifier le texte en Masquer le tableau une fois que l'utilisateur a sélectionné cet élément. Mais il n'est pas très intelligent de modifier les éléments de manière "brutale" plutôt que de conserver leur valeur booléenne et de changer le tableau "Show Table" en "Show List". Il n’y a pas beaucoup d’étapes déroutantes pour les utilisateurs.
L'un d'eux, cependant, cache les éléments de menu. Si vous masquez complètement un élément, et si vous répétez quelque chose de temps en temps, le menu devient complètement inutilisable. Les utilisateurs recherchent souvent des « poppers » en fonction uniquement de leur position. Les éléments de menu doivent être logiquement divisés en sections. Quantité maximale les éléments d’une section ne doivent pas dépasser six.
Se concentrer
Le focus est la capacité de recevoir les entrées de l'utilisateur via une souris ou un clavier.
Seuls les objets ayant le focus peuvent recevoir des événements clavier. Sous la forme d'une application active, un seul composant peut être actif (avoir le focus) à la fois.
Certains composants tels que TImage, TPaintBox, TPanel et TLabel ne peuvent pas recevoir le focus, en d'autres termes, ce sont des composants qui héritent de TGraphicControl. De plus, les composants invisibles tels que TTimer ne peuvent pas recevoir le focus. Il est également important de respecter menu. Le principe de l'utilisateur d'abord exige que l'utilisateur commence à utiliser les commandes qu'il connaît bien. La dernière chose devrait être de l'aide. Un autre point est d'utiliser des raccourcis clavier. C'est exactement la même chose que dans le cas précédent. C'est un autre problème : la langue. Ma recommandation : si vous créez une application destinée à être utilisée en République tchèque, créez un menu tchèque. Nous sommes Tchèques, nous écrivons le tchèque et nous n’en avons pas peur.
Pour distribuer votre produit à l’étranger, créez des mutations linguistiques. En plus de des avantages indéniables pour l'utilisateur, cela ajoute du professionnalisme à votre programme. S'ajoutent à ces mutations linguistiques. Pour résoudre ce problème, le texte de l'élément de menu est chargé à partir d'un fichier ou d'un menu dans module séparé applications, ou crée fichiers exécutables Il existe un menu séparé pour chaque langue, chaque mode a ses propres avantages et inconvénients.
OnKeyDown, OnKeyUp
Les événements OnKeyDown et OnKeyUp fournissent le niveau de réponse clavier le plus bas. Les gestionnaires OnKeyDown et OnKeyUp peuvent répondre à n'importe quoi touches du clavier, y compris les touches de fonction et les combinaisons avec les touches Shift, Alt et Ctrl.
Les événements de clavier ne s’excluent pas mutuellement.
Lorsque l'utilisateur appuie sur une touche, deux événements OnKeyDown et OnKeyPress sont générés, et lorsque l'utilisateur la relâche, un seul événement est généré : OnKeyUp. Si l'utilisateur appuie sur l'une des touches que OnKeyPress ne peut pas détecter, alors un seul événement OnKeyDown sera généré, et une fois relâché, OnKeyUp. Vous pourrez le placer n'importe où car seul un petit carré sera affiché et le menu sera en au bon endroit
. Double-cliquez sur ce carré pour ouvrir le concepteur de menus. Il vous offre tout ce dont vous avez besoin. Cliquez sur le nom du nouvel élément pour rédiger une description. Vous entrez le code que vous souhaitez faire lors de la sélection d'un article.
Pour utiliser un élément pour étendre un autre sous-menu, cliquez dessus avec le bouton droit et sélectionnez Nouveau sous-menu. Il est utile de savoir comment définir un email « actif ». Vous pouvez également utiliser ce qu'on appelle des modèles de menu. Vous pouvez également cliquer dessus avec le bouton droit et sélectionner Coller à partir du modèle. Ces modèles sont livrés avec un certain nombre de menus « standardisés », vous n'avez donc pas à vous soucier de répertorier tous les éléments. Vous pouvez modifier le menu que vous avez créé, puis l'enregistrer à nouveau comme modèle pour votre prochaine utilisation.
SurKeyPress OnKeyPress revient ASCII pour "g" et "G". Cependant, OnKeyDown et OnKeyUp ne font pas de différence entre les majuscules et les minuscules.
Options de clé et de changement de vitesse
Le paramètre Key peut être modifié afin que l'application reçoive un code différent pour la touche enfoncée. De cette façon, vous pouvez limiter l'ensemble des différents caractères que l'utilisateur peut saisir sur le clavier. Par exemple, vous permet de saisir uniquement des chiffres. Pour ce faire, ajoutez OnKeyPress au gestionnaire d'événements code suivant et définissez KeyPreview sur True (voir ci-dessous).
Le seul problème est que modèles standards Bien entendu, ils ne contiennent que des menus en anglais. Regardons les propriétés de l'élément de menu. C'est dégoûtant et sert simplement à montrer à quoi un menu ne devrait pas ressembler. L'exécution du programme est un peu plus compliquée. Le raccourci apparaîtra automatiquement à côté de l'élément.
Cependant, il arrive parfois que nous devions utiliser différents éléments dans le menu ou un menu complètement différent. Généralement, il existe deux types de menus. Dans ce cas, créez simplement deux différents menus, définissez-en une par défaut et ajoutez une deuxième commande de menu quelque part. Les éléments de menu ont plusieurs méthodes. Ajouter, qui ajoute un élément à la fin du menu.
si Clé dans["a".."z"] + ["A".."Z"] alors Clé :=#0 |
Cette expression teste si le paramètre Key contient des caractères minuscules ("a".."z") et des caractères majuscules ("A".."Z"). Si tel est le cas, le paramètre est défini sur zéro pour empêcher la saisie dans le composant Edit (par exemple).
Windows définit des constantes spéciales pour chaque clé. Par exemple, VK_RIGHT correspond au code clé de la flèche droite.
Si vous en avez besoin, vous avez trois options. Ajoutez un élément au programme en utilisant la procédure décrite ci-dessus. . Tout récemment, il n’y a pas de nouvelle application qui ne dispose pas d’un menu contextuel. Il s'ouvre généralement lorsqu'on appuie dessus bouton droit souris. Son sort réside principalement dans le fait qu'il ne contient que des objets qui circulent actuellement.
C'est pourquoi nous n'entrerons pas dans les détails. Tout ce que nous expliquons garantira que le menu contextuel « correct » s'ouvre toujours. Remarque pour les utilisateurs avancés. Par exemple, vous pouvez vérifier certains paramètres et modifiez les éléments du menu. Éléments menu contextuel s'appliquent sans exception à ce qui a été dit à propos des éléments du menu principal.
Pour faire fortune touches spéciales, comme TAB ou PageUp, vous pouvez utiliser la fonction API Obtenir l'état de la clé. Les touches d'état peuvent avoir trois états : relâchées, enfoncées et activées. Si le bit de poids fort est 1, alors la touche est enfoncée, sinon elle est relâchée. Pour vérifier ce bit, vous pouvez utiliser Fonction API SalutWord. Si le bit le moins significatif est 1, alors la clé est activée. Voici un exemple d'obtention de l'état d'une clé spéciale :
Protège les programmes des crackers
Voici comment consulter les suggestions des utilisateurs. Dans le prochain travail, nous examinerons enfin quelque chose de « brillant », en particulier les exceptions. Le but de cette série est de vous présenter les règles de base du cracking, de vous apprendre à contrôler les programmes nécessaires aux crackers et de vous apprendre à protéger votre logiciel. Il s’agit du type de protection le plus courant. On le voit presque partout, mais c’est aussi le moins fiable. La plus grande erreur dans la protection du numéro d'enregistrement est le même numéro d'enregistrement.
si HiWord (GetKeyState (vk_PageUp))<> 0 alors ShowMessage("Page précédente - BAS") autre ShowMessage("PageUp - UP"); |
Dans les événements OnKeyDown et OnKeyUp, Key est une valeur non signée sur deux octets (Word) qui représente l'espace virtuel. Clé Windows. Pour obtenir la valeur d'un symbole, vous pouvez utiliser la fonction Chr. Dans l'événement OnKeyPress, le paramètre Key est une valeur Char qui représente un caractère ASCII.
Les événements OnKeyDown et OnKeyUp ont un paramètre Shift de type TShiftState. Dans Delphi, le type TShiftState est défini comme un ensemble d'indicateurs qui déterminent l'état de Alt, Ctrl et Shift lorsqu'une touche est enfoncée.
Il n’y a alors aucun problème pour trouver votre numéro sur Internet. La deuxième façon de protéger un programme à l'aide d'un numéro de série est de modifier numéro de série selon les éléments saisis. Généralement, plus il y a d'éléments, mieux c'est, donc les éléments seront idéaux : nom, entreprise, numéro d'enregistrement. Un autre, et à mon avis, meilleure protection Le numéro de série est que le numéro dépend de la machine sur laquelle il fonctionne. Le numéro de série est souvent utilisé disque dur. Cependant, il est désormais possible de promouvoir l'enregistrement du numéro d'enregistrement en ligne via Internet aux dépens des autres.
Par exemple, le code suivant (du gestionnaire OnKeyUp) concatène la chaîne « Ctrl + » avec la touche enfoncée et affiche le résultat dans le titre du formulaire :
Transférer les événements du clavier vers un formulaire
Le gestionnaire de clavier peut opérer à deux niveaux : le niveau du composant et le niveau du formulaire. Propriété du formulaire détermine si les événements clavier du formulaire seront déclenchés avant les événements clavier du composant, puisque le formulaire peut recevoir toutes les frappes destinées au composant ayant à l'heure actuelle se concentrer.
Ceci est fondamentalement gênant pour les utilisateurs qui ne disposent pas de connexion Internet. Ce type de protection est très souvent combiné à la protection du numéro d'enregistrement. Une fois que vous aurez entré le bon numéro d’enregistrement, la restriction sera annulée. Encore une fois, il s’agit d’un type de défense très peu fiable et facile à surmonter. Ce type de protection présente deux inconvénients. Tout d’abord, il n’est pas difficile de trouver du code qui vérifie si le délai d’attente a expiré. Fondamentalement, le programme masque l'heure à laquelle il a été défini dans le registre ou dans un fichier sur votre disque dur.
Le deuxième problème est que le programme doit d'une manière ou d'une autre obtenir date actuelle et le temps, il n'est donc pas difficile de trouver cette procédure et de modifier la valeur de retour ou de modifier l'instruction de saut qui devrait être là quelque part. Grosse erreur serait d'utiliser un tel chèque.
Pour intercepter les frappes au niveau du formulaire avant qu'elles ne soient transmises aux composants du formulaire, vous devez définir la propriété KeyPreview sur True. Après cela, le composant recevra toujours les événements, mais ils accéderont d'abord au formulaire pour permettre au programme d'autoriser ou de refuser la saisie. divers personnages.
Par exemple, la protection résidente d'une version d'essai d'un antivirus ne fonctionne que pendant un certain temps avant de s'éteindre et vous devez ensuite redémarrer le système. C’est une défense très solide et il est très difficile de la surmonter. Dans un fichier clé, un lanceur de programme ou un programme de décompression peut être exécuté au démarrage. Protection fichiers clés peut également être combiné avec des restrictions de temps qui seront annulées lors du chargement du fichier clé.
Si cette protection est programmée par l’administration, elle est quasiment insurmontable. L'attaquant doit soit imiter parfaitement la clé matérielle en utilisant logiciel, ou il faudrait commencer à créer une clé matérielle. Dans le premier cas, vous pouvez vous protéger efficacement, et dans le second cas, l'attaquant copiera la structure clé matérielle et créera la même somme d'argent que l'achat version légale programmes. Les différences entre eux sont minimes.
Supposons que votre formulaire comporte plusieurs composants Edit et que la procédure Form.OnKeyPress ressemble à ceci :
procédure TForm1.FormKeyPress(Expéditeur : TObject ; var Clé : Car ); commencer si Clé dans ["0".."9"] alors Clé := #0 fin; |
Si l'un des composants Edit a le focus et que la propriété KeyPreview est définie sur False, alors ce code ne sera pas exécuté - en d'autres termes, si l'utilisateur appuie sur la touche "5", un "5" apparaîtra dans le composant Edit qui a le focus.
Internet a également commencé à se développer très rapidement et la communication est devenue de plus en plus rapide, ce qui a été le signal pour la distribution de copies de jeux via Internet. Il s’agissait principalement de jeux dits rapides. Contre les ondulations, les développeurs se sont battus en vérifiant la disponibilité de parties du programme qu'ils considéraient comme du gaspillage, ce sont donc les crackers qui ont été les victimes. Ce sont des erreurs délibérément créées qui entravent le fonctionnement du brûleur. Le programme vérifie ensuite ces erreurs, et l’astuce est qu’il peut les rechercher dans un ordre aléatoire.
Il contient également quelques astuces anti-débogage, mais elles sont suffisamment faibles pour protéger le format. Nous connaissons probablement tous la version démo classique du jeu, où vous jouez une mission avec une voiture et la fin. Une option est d'acheter version complète candidatures.
Toutefois, si KeyPreview est défini sur True, l'événement OnKeyPress du formulaire se déclenchera avant que le composant Edit ne voie la touche enfoncée. Par conséquent, si l'utilisateur appuie sur la touche « 5 », alors Key sera remplacé par une valeur zéro, empêchant ainsi les caractères numériques d'entrer dans Edit.
ANNEXE : Tableau des codes des clés virtuelles.
Symbolique nom de constante |
Valeur (hexadécimal) |
Equivalent clavier (ou souris) |
---|---|---|
VK_LBUTTON | 01 | Gauche bouton de la souris |
VK_RBUTTON | 02 | Bouton droit de la souris |
VK_CANCEL | 03 | Traitement de rupture de contrôle |
VK_MBUTTON | 04 | Bouton central de la souris (souris à trois boutons) |
VK_RETOUR | 08 | Touche RETOUR ARRIÈRE |
VK_TAB | 09 | Touche TAB |
VK_CLEAR | 0C | Touche EFFACER |
VK_RETOUR | 0D | Touche ENTRÉE |
VK_SHIFT | 10 | Touche MAJ |
VK_CONTROL | 11 | Touche CTRL |
VK_MENU | 12 | Touche ALT |
VK_PAUSE | 13 | Touche PAUSE |
VK_CAPITAL | 14 | Touche CAPS LOCK |
VK_ESCAPE | 1B | Touche ÉCHAP |
VK_ESPACE | 20 | BARRE D'ESPACE |
VK_PRIOR | 21 | Touche PAGE SUIVANTE |
VK_NEXT | 22 | Touche PAGE SUIVANTE |
VK_END | 23 | Touche FIN |
VK_HOME | 24 | Touche ACCUEIL |
VK_LEFT | 25 | Touche FLÈCHE GAUCHE |
VK_UP | 26 | Touche FLÈCHE VERS LE HAUT |
VK_RIGHT | 27 | Touche FLÈCHE DROITE |
VK_DOWN | 28 | Touche FLÈCHE VERS LE BAS |
VK_SELECT | 29 | Touche SÉLECTIONNER |
VK_PRINT | 2A | Touche IMPRIMER |
VK_EXECUTE | 2B | Touche EXÉCUTER |
VK_SNAPSHOT | 2C | Touche IMPRIMER ÉCRAN |
VK_INSERT | 2D | Clé INS |
VK_DELETE | 2E | Touche SUPPR |
VK_HELP | 2F | Touche AIDE |
30 | 0 clé | |
31 | 1 clé | |
32 | 2 clés | |
33 | 3 clés | |
34 | 4 clés | |
35 | 5 clés | |
36 | 6 clés | |
37 | 7 clé | |
38 | 8 clés | |
39 | 9 clé | |
41 | Une clé | |
42 | Touche B | |
43 | Touche C | |
44 | Touche D | |
45 | Touche E | |
46 | Touche F | |
47 | Touche G | |
48 | Clé H | |
49 | Je clé | |
4A | Clé J | |
4B | Clé K | |
4C | Clé L | |
4D | Touche M | |
4E | Touche N | |
4F | Ô clé | |
50 | Touche P | |
51 | Touche Q | |
52 | Touche R | |
53 | Touche S | |
54 | Touche T | |
55 | Clé U | |
56 | Touche V | |
57 | Touche W | |
58 | Touche X | |
59 | Touche Y | |
5A | Clé Z | |
VK_NUMPAD0 | 60 | Pavé numérique 0 clé |
VK_NUMPAD1 | 61 | Pavé numérique 1 touche |
VK_NUMPAD2 | 62 | Touche du pavé numérique 2 |
VK_NUMPAD3 | 63 | Pavé numérique 3 touches |
VK_NUMPAD4 | 64 | Pavé numérique 4 touches |
VK_NUMPAD5 | 65 | Pavé numérique 5 touches |
VK_NUMPAD6 | 66 | Pavé numérique 6 touches |
VK_NUMPAD7 | 67 | Pavé numérique 7 touches |
VK_NUMPAD8 | 68 | Pavé numérique 8 touches |
VK_NUMPAD9 | 69 | Pavé numérique 9 touches |
VK_SEPARATEUR | 6C | Clé de séparation |
VK_SUBTRACT | 6D | Touche de soustraction |
VK_DÉCIMAL | 6E | Clé décimale |
VK_DIVIDE | 6F | Clé de division |
VK_F1 | 70 | Touche F1 |
VK_F2 | 71 | Touche F2 |
VK_F3 | 72 | Touche F3 |
VK_F4 | 73 | Touche F4 |
VK_F5 | 74 | Touche F5 |
VK_F6 | 75 | Touche F6 |
VK_F7 | 76 | Touche F7 |
VK_F8 | 77 | Touche F8 |
VK_F9 | 78 | Touche F9 |
VK_F10 | 79 | Touche F10 |
VK_F11 | 7A | Touche F11 |
VK_F12 | 7B | Touche F12 |
VK_F13 | 7C | Touche F13 |
VK_F14 | 7D | Touche F14 |
VK_F15 | 7E | Touche F15 |
VK_F16 | 7F | Touche F16 |
VK_F17 | 80H | Touche F17 |
VK_F18 | 81H | Touche F18 |
VK_F19 | 82H | Touche F19 |
VK_F20 | 83H | Touche F20 |
VK_F21 | 84H | Touche F21 |
VK_F22 | 85H | Touche F22 |
VK_F23 | 86H | Touche F23 |
VK_F24 | 87H | Touche F24 |
VK_NUMLOCK | 90 | Touche VERROU NUM |
VK_SCROLL | 91 | Touche DÉFILEMENT VERROUILLÉ |
VK_LSHIFT | A0 | Touche MAJ gauche |
VK_RSHIFT | A1 | Touche MAJ droite |
VK_LCONTROL | A2 | Touche CONTROL gauche |
VK_RCONTROL | A3 | Touche CONTROL droite |
VK_LMENU | A4 | Touche MENU gauche |
VK_RMENU | A5 | Touche MENU droite |
VK_PLAY | FA. | jouer la touche |
VK_ZOOM | Touche de zoom |
Ce n'est un secret pour personne langue moderne La programmation Delphi était basée sur le Pascal plus courant et n'a pas eu d'indépendance pendant un certain temps. Cependant, Delphi est désormais un langage de programmation en développement à part entière, alors qu'auparavant il n'était qu'un dérivé de Pascal, créé pour représenter un dialecte de ce langage.
Delphi, équipé de son propre environnement de programmation, a tout conditions nécessaires Et traits distinctifs langue indépendante, y compris personnels codes sources. À propos, les codes Delphi sont publiés et accessibles au public sur la page des développeurs, accompagnés des commentaires nécessaires concernant la possibilité de modifier les codes sources et de créer propres applications en utilisant Delphi.
Original Code Delphes peut être divisé en modules et fichiers de projet. Ces éléments sont soumis aux mêmes conventions. Les fichiers de projet Delphi ont des extensions RPD. Ces fichiers sont conçus comme principaux fichiers sources pour tous les projets. Tous les modules pouvant être utilisés dans un projet ont toujours une extension PAS. Les projets peuvent également utiliser fichiers supplémentaires(par exemple, commandes, HTML, DLL, etc.). De tels fichiers sont souvent très importants, mais n’ont que très peu à voir avec notre sujet.
Pour pouvoir utiliser les fichiers sources, il est sans aucun doute nécessaire d'effectuer un certain travail sur ceux-ci. actions importantes. De telles actions incluent la définition d'un nom ou le renommage. Pour Langue Delphes un nom de fichier plus long est fourni, ce qui rend le travail beaucoup plus pratique. Si le nom du fichier utilise plus d'un mot, vous devez utiliser lettres majuscules. Cette façon de nommer les fichiers s'appelle InfixCaps ou d'une autre manière : CamelCaps.
Pour organiser vos fichiers sources, vous aurez besoin de savoir quels éléments les modules peuvent contenir. Une liste de ces éléments dans l’ordre requis est présentée ci-dessous :
- Informations sur les droits d'auteur (Copyright/ID) ;
- Nom de l'unité ;
- Déclaration des fichiers inclus (Inclure les fichiers);
- Section interfaces ;
- Définitions supplémentaires ;
- Mise en œuvre
- Déclaration des modules utilisés (clause Uses) ;
- Une fin de clôture et un point.
Des éléments supplémentaires peuvent être structurés selon les souhaits de l'utilisateur. Cependant, même dans ce cas, il est nécessaire de respecter certaines conditions concernant l'ordre d'écriture du copyright, le nom du module, les directives et définitions conditionnelles, les directives du compilateur et les fichiers d'inclusion et les définitions de connexion. C’est l’ordre dans lequel les éléments listés ci-dessus doivent être placés.