Convient aux débutants à Delphi, les personnes ayant des connaissances et une expérience orientées objet en programmation Java ou VC.
Nous voyons souvent un code comme celui-ci dans la classe Delphi: propriété Propriété Propriété Type de propriété Nom de la propriété Lire String 1 Écriture String 2
Les noms des attributs ici peuvent être différents. Tous sont dans ce format: la propriété Nom de la propriété Lire la chaîne 1 écriture String 2
J'ai pris la propriété à gauche: Integer Read Fleft Write SetLeft; La gauche est une propriété entière. Read déclare la variable ou la méthode pour accéder à la variable, et Write déclare la variable ou la méthode pour accéder lors de la modification de la variable. Remarque: il peut être une variable ou une méthode. Ici, c'est une variable appelée Fleft. Aux fins de l'encapsulation, nous mettons généralement de telles variables au milieu du privé.
Fleft: code entier (pour les habitudes de dénomination, nous nommons une telle variable comme une capitale F avant le nom d'attribut). De cette façon, lorsque vous lisez la propriété, vous accédez réellement à la valeur de Fleft. Ainsi, vous pouvez écrire certaines méthodes pour modifier Flex et modifier indirectement la valeur de gauche. Regardez à nouveau SetLeft. déclaration:
Procédure SetLeft (valeur: entier);
et l'implémentation du code suivant:
procédure tControl.setLeft (valeur: entier);
Commencer
SetBounds (valeur, ftop, fwidth, fheight);
Inclure (fscalingflags, sfleft);
fin;
Si vous écrivez le code suivant pour changer: Control1.left: = 23, le programme appelle la fonction SetLeft (23), SetBounds est une fonction qui change la région. À gauche, il changera la taille de la zone en fonction de la nouvelle gauche, et cette fonction modifie également la taille du fleft.
Procédure tControl.SetBounds (Aleft, au sommet, AWIDTH, AHEIGHT: entier);
Commencer
Si CheckNewSize (Awidth, aheight) et
((Aleft <> fleft) ou (sur le sommet <> ftop) ou
(Awidth <> fwidth) ou (aheight <> fheight)) puis
Commencer
InvalidateControl (visible, faux);
Fleft: = Aleft;
Ftop: = au sommet;
FWIDTH: = Awidth;
Fheight: = aheight;
UpdateanChorrules;
Invalider;
Perform (wm_windowposchanged, 0, 0);
Requestalign;
Sinon (csloading dans ComponentState) alors redimensionner;
fin;
fin;
De cette façon, l'extérieur ressemble à la valeur de l'attribut est modifié uniquement grâce aux opérations d'affectation. La lecture et l'écriture peuvent être des variables ou des fonctions, selon votre conception. Bien sûr, vous pouvez écrire ceci: propriété Propriété Propriété Type de propriété Nom de lecture Variable 1 Variable d'écriture 2. La variable 1 et la variable 2 peuvent être les mêmes. Vous pouvez également faire cette propriété Propriété Propriété Type de propriété Nom de lecture Méthode 1 Méthode d'écriture 2. Toute combinaison pour vous. Mais il y a deux choses à noter:
1. Les règles de dénomination sont les mieux basées sur les habitudes et sont faciles à lire.
2. S'il s'agit d'une variable, le type doit être le même que le type d'attribut.
Nous utilisons souvent les attributs d'événements des composants, tels que les événements de clic, mais il est difficile pour nous de voir sur la surface comment il est appelé et comment il est déclenché. Je te répondrai ci-dessous.
Dans l'inspecteur d'objet Property Manager, nous voyons que le nom d'une méthode correspond au droit de la page d'événement OnClick. En fait, nous pouvons donner l'événement d'un composant correspondant à la méthode précédente. Prenez un formulaire comme un exemple de formulaire 1. Notez que les paramètres d'entrée de la méthode sont particulièrement importants, voici (expéditeur: tobject)
Utilisons TControl comme exemple, et nous trouvons ce code:
Propriété OnMoudown: Tmouseevent a lu Fonmousedown Write Fonmousedown; similaire à ce qui précède, mais il y a un type spécial ici, TnotifyEvent, qui est un type d'événement.
TmouseEvent = procédure (expéditeur: tobject; bouton: tmousebutton; shift: tshiftState; x, y: entier) de l'objet;
Comme vous pouvez le voir, c'est en fait une fonction, mais la partie bleue limite les paramètres d'entrée. Ensuite, nous attribuons Form1. Ensuite, nous écrivons simplement une fonction qui intercepte les messages de la souris et appelons directement ou indirectement FonmousDown, puis nous correspondrons au message et à la fonction de traitement. Ici, il y a de nombreuses couches indirectement appelées, ce qui prend du temps et implique le type de message.
Ce qui suit est un processus d'appel indirect.
Procédure wmrbutTondblclk (Message var: twmrbuttondblclk);
Procédure tControl.wmrButTondblclk (message var: twmrbutTondblclk);
Commencer
hérité;
Domousedown (message, mbright, [ssdouble]);
fin;
Procédure Domousedown (message var: twmmouse; bouton: tmouseButton;
Shift: tshiftState);
Procédure tControl.Domousedown (message var: twmmouse; bouton: tmouseButton;
Shift: tshiftState);
Commencer
Sinon (csnostDevents dans ControlSyle) alors
avec un message faire
si (largeur> 32768) ou (hauteur> 32768) alors
avec calccursorpos faire
MousDown (bouton, keystoshiftstate (touches) + shift, x, y)
autre
MousDown (Button, KeyStoshiftState (Keys) + Shift, Message.xpos, message.pos);
fin;
Procédure MousEdown (Bouton: TMouseButton; Shift: TshiftState;
X, y: entier);
Procédure TControl.Moudown (Bouton: TMouseButton;
Shift: tshiftstate; x, y: entier);
Commencer
si elle est attribuée (Fonmousedown) alors Fonmousedown (self, bouton, bouffée, x, y);
fin;
Si vous écrivez plus de vos propres classes, vous trouverez à quel point il est pratique de le faire, sans écrire Getleft, Setleft comme Java, puis mettre le texte en privé. Parmi eux ne font que l'appel Control1.Text pour accéder, Control1.Text: = «Une certaine chaîne» pour modifier sa valeur.
En termes de messages de traitement, la classe de base déclare des propriétés telles que ONCLICK et OnMoudown comme protégée. ne peut pas le divulguer.
Mes recherches ne sont pas profondes, veuillez me corriger si vous avez inapproprié :). Bienvenue à [email protected]