Beaucoup de gens pensent que Delphi est un outil RAD, y compris moi-même, qui avait un parti pris contre Delphi lorsque j'étais à l'école. Maintenant que je suis sorti de la « tour d'ivoire », il couvre un plus large éventail de domaines et rencontre plus de problèmes, et J'ai progressivement acquis mon propre point de vue. En fait, Delphi est un outil de développement basé sur le langage Object Pascal, ce qui signifie que Delphi est essentiellement un outil de langage et est véritablement orienté objet. L'exemple que je donne ci-dessous est une applet de plateau implémentée dans Delphi. Le programme est court et concis, avec un contexte clair, j'expliquerai les parties clés en détail. Tout comme M. Hou Junjie décollant le MFC couche par couche, aujourd'hui je dois aussi « faire cuire le bœuf ».
Dans Delphi, lorsqu'il s'agit de programmation système, les fonctions API doivent être appelées sans exception. Il existe des prototypes des fonctions API à utiliser dans l'unité ShellAPI.pas.
Exercices pratiques :
un. Créez une nouvelle application : Fichier->Nouvelle application. Définissez une constante de message dans la section Interface : const WM_NID=WM_USER+1000; Le système stipule que les messages sont personnalisés pour les utilisateurs à partir de WM_USER.
deux. Définissez une variable globale : NotifyIcon:TNotifyIconData. NotifyIcon est une variable très importante. L'ensemble du programme tourne essentiellement autour de cette variable. TNotifyIconData est un type d'enregistrement Maintenez la touche Ctrl enfoncée et double-cliquez sur TNotifyIconData pour entrer dans l'unité ShellAPI.pas. (Remarque : dans Delphi, c'est un très bon moyen d'analyser le code source. Le code source parle de lui-même. Si vous voulez connaître l'histoire intérieure du programme, le meilleur moyen est d'analyser le code source !) fois, ce qui suit apparaît Déclaration d'affectation :
TNotifyIconData = TNotifyIconDataA, cette signification est très évidente, c'est-à-dire que TNotifyIconData et TNotifyIconDataA sont du même type de données, puis regardez vers le bas :
TNotifyIconDataA = _NOTIFYICONDATAA, la signification est la même qu'avant, regardez en bas :
taper
_NOTIFYICONDATAA = enregistrement
cbTaille : DWord ;
Wnd : HWND ;
uID : UINT ;
uDrapeaux : UINT ;
uCallbackMessage : UINT ;
hIcône : HICON ;
szTip : tableau [0..63] d'AnsiChar ;
fin;
Il s'agit en réalité de "sortir après avoir été interpellé pendant un long moment, tout en tenant toujours le pipa, cachant à moitié le visage". Maintenant, tout le monde est très clair. La variable globale NotifyIcon que nous venons de définir est en fait une variable de type enregistrement contenant 7 composants, ce qui est équivalent à la variable de structure en C/C++ (les programmeurs C/C++ devraient la connaître très bien. ). Expliquons les fonctions de chacune des sept parties du type d'enregistrement une par une.
1> cbSize est la taille de la variable NotifyIcon que vous avez définie, qui peut être obtenue en utilisant SizeOf(TNotifyIconData). Si vous êtes un programmeur C/C++ expérimenté, vous devriez la connaître. En C/C++, chaque fois que vous souhaitez allouer de la mémoire à une variable de structure, vous devez utiliser SizeOf(Struct type) pour connaître la quantité de mémoire nécessaire pour stocker une telle variable de structure.
2> Wnd est un handle. Quel formulaire souhaitez-vous que les messages générés par le programme de barre d'état soient gérés ? Laissez simplement Wnd pointer vers ce formulaire.
Par exemple : lorsque vous souhaitez cliquer sur la petite icône de la barre des tâches pour basculer le formulaire entre "afficher" et "masquer", pointez Wnd vers le formulaire principal.
3> uID : Si vous souhaitez créer plusieurs applets de barre d'état, comment les distinguer ? Il se distingue par ce numéro d'identification.
3> uFlags est un bit de drapeau, qui indique les propriétés du programme de plateau actuellement créé :
NIF_ICON indique que l'icône actuellement définie (c'est-à-dire la valeur de hIcon) est valide
NIF_MESSAGE indique que le message système actuellement défini (c'est-à-dire la valeur de uCallBackMessage) est valide
NIF_TIP indique que la barre de pourboire actuellement définie (c'est-à-dire la valeur de szTip) est valide.
4> uCallBackMessage C'est la plus importante parmi les 7 parties. Spécifiez ici un message de rappel, c'est-à-dire définissez ici un nom de message Lorsque vous cliquez ou cliquez avec le bouton droit sur l'icône de la barre d'état, un nom de message défini dans uCallBackMessage sera envoyé au formulaire pointé par Wnd, puis vous définissez un. fonction de sortie de message dans le programme pour traiter ce message. De cette manière, l'ensemble des messages liés à Windows est traité.
6> hIcon est le handle de l'icône de la barre d'état. Sur la base de ce handle, vous pouvez ajouter, modifier et supprimer des icônes.
7> szTip est le message d'invite qui apparaît lorsque votre souris est placée sur la petite icône dans la barre des tâches.
Ici, j'ai dépensé beaucoup d'encre pour présenter l'histoire intérieure de TNotifyIconData. Une fois cette partie clarifiée, le reste se mettra en place.
trois. Double-cliquez sur le formulaire principal pour entrer dans la zone de code de FormCreate :
TForm1.FormCreate(Expéditeur:TObject);
Commencer
//NotifyIcon est une variable globale et a été définie au début du programme
avec NotifyIcon faire
commencer
cbSize:=SizeOf(TNotifyIconData);
Wnd:=Handle; //Handle pointant vers le formulaire actuel Form1
IDu :=1 ;
uFlags :=NIM_ICON ou NIM_MESSAGE ou NIM_TIP ;
uCallBackMessage :=WM_NID ;
hIcon:=application.Icon.Handle;
szTip:="Le méchant jeune homme de la famille Zhang" ;
fin;.
//Ajoutez la variable définie NotifyIcon au système pour le traitement
Shell_NotifyIcon(NIM_ADD,@NotifyIcon);
Fin;
Quatre. L'étape suivante consiste à définir une fonction de traitement du message : lorsque le système envoie un message au formulaire, il est traité par la fonction suivante. Chaque fonction de traitement de message traite un certain type de message. Veuillez examiner de plus près la différence entre la définition du corps de la fonction ci-dessous et la définition générale de la fonction : la fonction de traitement de message doit ajouter le nom du message à la fin, de sorte que lorsque le système envoie Lorsqu'un message WM_NID arrive, la fonction de traitement du message WMNID est automatiquement déclenchée.
PROcédure WMNID(var msg:TMessage);message WM_NID;
commencer
case msg.LParam de
WM_LBUTTONUp ; Form1.Visible :=pas Form1.Visible ;
WM_RBUTTONUP: ShowMessage('Vous avez cliqué sur le bouton droit');
Fin;
Fin;
Eh bien, le programme le plus simple est né. Chacun peut définir l'icône qu'il souhaite.
Projet->Options, sélectionnez la page Application et chargez votre icône préférée dans l'élément Icône, de sorte que lorsque le programme est en cours d'exécution, votre icône préférée soit affichée dans la barre des tâches. Lorsque vous cliquez sur l'icône, le formulaire Form1 bascule entre visible et invisible, c'est-à-dire cliquez pour l'afficher et cliquez à nouveau pour le masquer. Lorsque vous cliquez avec le bouton droit sur l'icône, un message apparaît : "Vous avez cliqué sur le bouton droit".
cinq. Enfin, n'oubliez pas de libérer le programme de barre d'état créé lors de la fermeture de l'application, sinon il occupera des ressources système.
TForm1.FormDestroy(Expéditeur:TObject);
Commencer
Shell_NotifyIcon(NIM_DELETE,@NotifyIcon);
Fin;
Cela fait presque six mois que j'ai obtenu mon diplôme. Je ne comprends toujours pas beaucoup de choses à l'école et ma compréhension n'est pas assez profonde. Lorsque je sors dans la société, j'ai rencontré de nombreux amis taoïstes et j'en ai beaucoup bénéficié. Chaque fois que je vis une expérience, je veux toujours l’écrire avec des mots pour résumer ce que j’ai appris. Deuxièmement, communiquons avec tout le monde.
E_Mail : [email protected] QQ : 8133413 Le mauvais garçon de la famille Zhang