Adecuado para principiantes en Delphi, personas con conocimiento y experiencia orientados a objetos en programación Java o VC.
A menudo vemos un código como este en la clase Delphi: propiedad Propiedad de propiedad Tipo de propiedad Nombre Leer Cadena 1 Escribir cadena 2
Los nombres de los atributos aquí pueden ser diferentes. Todos están en este formato: Propiedad Nombre de propiedad Leer Cadena 1 Escribir cadena 2
Tomé la propiedad a la izquierda: Integer Read Fleft Write Setleft; La izquierda es una propiedad entera. Leer declara la variable o el método para acceder a la variable, y Write declara la variable o el método para acceder al modificar la variable. Nota: puede ser una variable o un método. Aquí es una variable llamada Fleft. A los fines de la encapsulación, generalmente ponemos tales variables en el medio de la privada.
Fleft: código entero (para nombrar hábitos, nombramos tal variable como un capital F antes del nombre del atributo). De esta manera, cuando lee la propiedad, en realidad está accediendo al valor de Fleft. Por lo tanto, puede escribir algunos métodos para modificar Flex e indirectamente modificar el valor de la izquierda. Entonces, veamos a Setleft nuevamente. declaración:
procedimiento setleft (valor: entero);
y la siguiente implementación del código:
procedimiento tcontrol.setleft (valor: entero);
Comenzar
SetBounds (valor, ftop, fwidth, fheight);
Incluir (fscalingflags, sfleft);
fin;
Si escribe el siguiente código para cambiar a la izquierda: control1.left: = 23, entonces el programa llama a la función Setleft (23), SetBounds es una función que cambia la región. Izquierda, cambiará el tamaño del área de acuerdo con la nueva izquierda, y esta función también cambia el tamaño del FLEFT.
procedimiento tcontrol.setBounds (Aleft, encima, Awidth, AHEight: Integer);
Comenzar
Si checknewsize (awidth, aight) y
((Aleft <> fleft) o (en la copa <> ftop) o
(Awidth <> fwidth) o (aight <> fheight)) entonces
Comenzar
InvalidateControl (visible, falso);
Fleft: = Aleft;
FTOP: = Up;
Fwidth: = awidth;
Fheight: = AHEight;
UpdateanChorrules;
Invalidar;
Realizar (wm_windowPoschanged, 0, 0);
Requestalign;
Si no (csloading en ComponentState), entonces cambie el tamaño;
fin;
fin;
De esta manera, el exterior parece que el valor del atributo se cambia solo a través de las operaciones de asignación. Leer y escribir puede ser variables o funciones, dependiendo de su diseño. Por supuesto, puede escribir esto: Propiedad Propiedad Propiedad Tipo de propiedad Nombre Leer Variable 1 Escribir Variable 2. La variable 1 y la variable 2 pueden ser las mismas. También puede hacer esta propiedad Propiedad Propiedad Tipo de propiedad Nombre Leer Método 1 Método de escritura 2. Cualquier combinación para ti. Pero hay dos cosas a tener en cuenta:
1. Las reglas de nombres se basan en los hábitos y son fáciles de leer.
2. Si es una variable, el tipo debe ser el mismo que el tipo de atributo.
A menudo usamos los atributos del evento de componentes, como eventos de clic, pero es difícil para nosotros ver desde la superficie cómo se llama y cómo se activa. Te responderé a continuación.
En el Inspector de Objetos Administrador de propiedades, vemos que el nombre de un método corresponde al derecho de la página del evento en el cierre. De hecho, podemos dar el evento de un componente correspondiente al método anterior. Tome un formulario como ejemplo de formulario1. Tenga en cuenta que los parámetros de entrada del método son de particular importancia, aquí está (remitente: tobject)
Usemos tcontrol como ejemplo, y encontramos este código:
Propiedad OnMouseDown: TMouseEvent lea Fonmousedown Escribir Fonmousedown;
TMoUSeEvent = procedimiento (remitente: tobject; botón: tmouseButton; shift: tshiftState; x, y: entero) de objeto;
Como puede ver, en realidad es una función, pero la parte azul limita los parámetros de entrada. Luego asignamos el formulario1. Luego, simplemente escribimos una función que intercepta los mensajes del mouse y llamamos directa o indirectamente a Fonmousedown, y luego corresponderemos al mensaje y la función de procesamiento. Aquí, hay muchas capas llamadas indirectamente, lo que lleva mucho tiempo e implica el tipo de mensaje.
El siguiente es un proceso de llamada indirecta.
Procedimiento WMRBUTTONDBLK (Mensaje VAR: TWMRBUTTONDblCLK);
procedimiento tControl.wmrButTondblClk (Mensaje var: twmrButTondblClk);
Comenzar
heredado;
DOMOUSEDOWN (MENSAJE, MBRIGHT, [SSDOBLE]);
fin;
Procedimiento DOMOUSEDOWN (Mensaje VAR: TwMMouse; Botón: TMouseButton;
Cambio: tshiftstate);
procedimiento tcontrol.domousedown (mensaje var: twmMouse; botón: tmouseButton;
Cambio: tshiftstate);
Comenzar
Si no (csnostdevents en controlstyle) entonces entonces
con mensaje hacer
if (ancho> 32768) o (altura> 32768) entonces
con calccursorpos do
MouseDown (botón, KeyShoshiftState (Keys) + Shift, X, Y)
demás
MouseDown (botón, KeyShoshiftState (Keys) + Shift, Message.xpos, Message.ypos);
fin;
Procedimiento MouseDown (botón: TMouseButton; Shift: tshiftState;
X, y: entero);
Procedimiento TControl.MouseDown (botón: TMouseButton;
Cambio: tshiftstate;
Comenzar
si se asigna (fonmousedown), entonces fonmousedown (self, botón, desplazamiento, x, y);
fin;
Si escribe más de sus propias clases, encontrará lo conveniente que es hacer esto, sin escribir Getleft, Setleft como Java y luego poner el texto en privado. de ellos solo llaman a control1.text para acceder, control1.text: = 'una cierta cadena' para modificar su valor.
En términos de mensajes de procesamiento, la clase base declara propiedades como OnClick y Onmousedown como protegido. no puede revelarlo.
Mi investigación no es profunda, por favor corríjeme si tiene algún inapropiado :). Bienvenido a [email protected]