Tutorial básico de Delphi: desarrollo de componentes personalizados de DELPHI (3) [3]
Tipo
tsamplecompement = clase(componente t)
Protección
Función almacenarlo: booleano;
Público {no existe en circunstancias normales}
Los atributos son importantes: los números enteros se almacenan como Verdaderos{siempre almacenados}
Publicados{guardados normalmente}
Los atributos son no importante: el almacenamiento de enteros es falso{no guardado}
Atributo a veces: almacenamiento de enteros StoreIt{el almacenamiento depende del valor de la función}
Fin;
④Inicializado después de la carga .
Después de que el componente lee todas las propiedades de la descripción almacenada, llama a un método virtual llamado Loaded, que brinda la oportunidad de realizar cualquier inicialización según sea necesario. Se llama a Loaded antes de que se muestren el formulario y sus controles, por lo que no hay necesidad de preocuparse por el parpadeo de la pantalla causado por la inicialización.
Inicializa el componente cuando el componente carga propiedades para anular el método cargado.
Lo primero que debe hacer en el método Loaded es llamar al método Loaded heredado, que inicializará todas las propiedades heredadas antes de que el componente realice la inicialización.
El siguiente código proviene del componente TDatabase, que intenta reconstruir la conexión abierta durante el almacenamiento después de la carga y describe cómo manejar las excepciones de conexión.
La base de datos del proceso t ha sido cargada
Iniciar
Carga heredada; {Llamar siempre a los métodos heredados primero}
Modificado { Establecer interno; flag}
Intente
Abrir si FStreamedConnected; {Reconstruir conexión}
Excepto...
Si cs está diseñado en estado de componente , luego {en tiempo de diseño}
application HandleException(self){deje que Delphi maneje la excepción}
De lo contrario, mejore {eso no funcionará}
< p; >Fin;Fin;
Ejemplo de programación de componentes de Delphi
Creación de un control de calendario relacionado con la base de datos TDBCalendar
Cuando se trata de conexiones de bases de datos , es muy importante asociar directamente el control con los datos, es decir, la aplicación puede establecer un vínculo entre el control y la base de datos. Delphi incluye etiquetas relacionadas con datos, cuadros de edición, cuadros de lista y cuadrículas, y los usuarios pueden crear sus propios controles relacionados con datos.
Existen varios niveles de asociación de datos. Las más simples son las asociaciones de datos de solo lectura o la exploración de datos y la capacidad de reflejar el estado actual de la base de datos. Más compleja es la edición relacionada con datos, donde el usuario puede manipular datos en la base de datos dentro del control.
En esta sección ilustraremos el caso más simple, que consiste en crear un control de solo lectura de un único campo vinculado a la base de datos. En este caso, se utilizará el widget TCalendar de la página Muestras de la Paleta de componentes.
La creación de un control de calendario relacionado con datos implica los siguientes pasos.
●Crear y registrar piezas.
●Establezca el control como de solo lectura.
●Añadir enlace de datos.
●Respuesta a cambios de datos
Creación y registro de piezas
La creación de cada pieza comienza de la misma manera. En este ejemplo, se seguirá el siguiente proceso.
●Nombre la unidad de biblioteca de componentes DBCal.
●Hereda un nuevo componente llamado TDBCalendar de TCalendar.
●Registre TDBCalendar en la página de muestra del panel de componentes.
El siguiente es el código creado.
Unidad DBCal
Conexión
Uso SysUtils WinTypes WinProc control gráfico de clase de mensaje
Calendario de cuadrícula de formulario;
Tipo
TDBCalendar=class(TCalendar)
Fin;
Registro del programa;
Rendimiento
Registro del programa ;
Inicio
Registrar componente (ejemplo [TDBabendar])
Fin;
Fin
Hacer el control de solo lectura
Debido a que este calendario de datos responde a los datos de manera de solo lectura, el usuario no tiene control sobre el cambio de los datos y espera que se reflejen en la base de datos.
Hacer un calendario de solo lectura implica los siguientes dos pasos.
●Agregar atributo de solo lectura.
●Permitir las actualizaciones necesarias.
Agregar un atributo de solo lectura
Agregar una opción de solo lectura a un control de calendario es un proceso sencillo. Agregar una propiedad proporciona una manera de hacer que un control sea de solo lectura en tiempo de diseño. Cuando el valor de la propiedad se establece en Verdadero, se anulará la selección de todos los elementos del control.
(1) Agregar un dominio privado para declaración de propiedad y preservación de valor.
Tipo
TDBCalendar=class(TClendar)
Privado
solo miedo: booleano;
Público
Constructor Crear(aopropietario:t componente) reescribir;
Publicar
propiedad Solo lectura: lectura booleana FReadOnly escritura FReadOnly valor predeterminado Verdadero;
Fin ;
Constructor TDBCalendar Create(aoowner:t componente)
Inicio
Creación heredada (propietario)
fread only:= True;
Fin;
⑵ Anula el método SelectCell para no permitir la selección cuando el control es de solo lectura.
Función TDBCalendar seleccionar celda(ACol Arow:Longint)Boolean;
Inicio
Si es solo un amigo, entonces
Resultado :=false
Otros
Resultado:=SelectCell heredada(Acol ARow)
Fin
También declare SelectCell en la instrucción TDBcalendar; .
Si ahora agrega Calendario al formulario, encontrará que el widget ignora por completo los eventos del mouse y las pulsaciones de teclas y no puede cambiar la posición seleccionada al cambiar la fecha. Las respuestas de control se actualizarán a continuación.
Permitir actualizaciones requeridas
El calendario de solo lectura utiliza el método SelectCell para implementar varios cambios, incluida la configuración de los valores de Fila y Col. Cuando la fecha cambia, el método UpdateCalendar establece los valores de Fila y Col., pero como SelectCell no permite cambiarlo, la selección sigue siendo la misma incluso si cambia la fecha.
Puedes agregar una bandera booleana al calendario que permita cambios cuando la bandera sea verdadera.
Tipo
TDBCalendar=class(TCalendar)
Privado
fupdating:Boolean;
Protección
p>
función seleccionar celda(Acol Arow:Longint)Booleano; anular;
Público
Calendario de actualización del proceso;
Fin; p>
Función TDBCalendar seleccionar celda(ACol ARow:Longint)Boolean;
Iniciar
si (sin actualización) y FReadOnly entonces
Resultado: = Falso {Permitir selección al actualizar}
Otro
Resultado:=Celda de selección heredada (acolarow) {De lo contrario, llame al método heredado}
Fin;
Procedimiento para actualizar el calendario;
Iniciar
Actualización:= Verdadero{Establecer indicador para permitir actualizaciones}
Probar
p >ActualizaciónCalendario heredado{Actualizar como de costumbre}
Finalmente
FUpdating:= False; {Borrar siempre la bandera}
Fin;
Fin;
Actualmente el calendario todavía no permite a los usuarios modificarlo, pero puede reflejar correctamente los cambios al cambiar los atributos de fecha. Ahora que tenemos un verdadero control de sólo lectura, el siguiente paso es agregar capacidades de exploración de datos.
Agregar una conexión de datos
La conexión entre el control y la base de datos es manejada por un objeto llamado Datalink. Delphi proporciona varios tipos de enlaces de datos. El objeto de enlace de datos que conecta el control a un único campo de la base de datos es TFieldDatalink.
Los controles relacionados con datos poseen objetos DataLink, lo que significa que el control es responsable de crear y destruir DataLinks.
Para crear un enlace de datos como un objeto de propiedad, se requieren los siguientes tres pasos.
Declarar el dominio del objeto.
●Declarar atributos de acceso
●Inicializar el enlace de datos.
(1) Declarar campo de objeto
Cada parte debe declarar un campo de objeto para el objeto que posee, por lo que el objeto de calendario DataLink declara un campo de tipo TFieldDataLink.
Los enlaces de datos en la sección de calendario se declaran de la siguiente manera
Tipo
TDBCalendar = class(TSampleCalendar)
Privado
FDataLink:TFieldDataLink;
…
Fin;
(2) Declarar propiedades de acceso
Cada control relacionado con datos Hay una propiedad DataSource, que describe la fuente de datos que la aplicación proporciona al control. El acceso a la base de datos de un solo campo también requiere una propiedad DataField para describir el campo en la fuente de datos.
Lishi Xinzhi/Article/program/Delphi/201311/25115