Red de conocimientos turísticos - Lugares de interés turístico - Tutorial básico de Delphi: desarrollo de componentes personalizados de DELPHI (3) [3]

Tutorial básico de Delphi: desarrollo de componentes personalizados de DELPHI (3) [3]

La forma de controlar si Delphi almacena una propiedad es agregar una directiva de almacenamiento después de la declaración de propiedad, seguida de un nombre de método booleano o verdadero o falso. Puede agregar una expresión almacenada a la declaración o reformulación de cualquier propiedad. El siguiente código muestra el componente declarando tres nuevas propiedades: una propiedad siempre se almacena y la tercera propiedad depende del valor de un método booleano.

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