Tutorial básico de DELPHI: desarrollo de funciones de gestión de datos de Delphi basadas en objetos (V)[1]
Capítulo 20: Desarrollo de funciones de gestión de datos Delphi basadas en objetos (V)
Procedimiento almacenado WriteComponentResFie que escribe archivos DFM
Este El procedimiento almacenado requiere dos parámetros. El parámetro FileName especifica el nombre del archivo DFM que se escribirá. El parámetro de instancia es de tipo TComponent y especifica el nombre del componente en el que se escribirá, normalmente una subclase de un objeto TForm.
La importancia de este proceso es que puede generar componentes de formulario Delphi e insertar los componentes en el formulario mientras el programa se está ejecutando, y esta función escribe el formulario en el archivo DFM, lo que admite la reutilización de datos dinámicos. Archivos DFM
El programa de este proceso es el siguiente
Procedimiento WriteComponentResFile( const FileName: string; Instance: TComponent)
var
Secuencia: TStream;
comenzar
Secuencia:= TFileStream Create(FileName fmCreate)
probar
Stream WriteComponentRes(Instancia ClassName Instancia)
finalmente
Stream Free
fin
fin; > Función Crear un archivo usando FileStream Usar el método WriteComponetRes del objeto Stream para escribir una instancia en la secuencia
Función para leer archivos DFM ReadComponentResFile
La función ReadComponentResFile recibe dos parámetros: FileName e Instancia. El parámetro FileName especifica el nombre del archivo DFM que se va a leer y el parámetro Instance especifica el componente que se va a leer del archivo DFM.
Esta función obtiene la instancia y todos los componentes que posee del archivo DFM y devuelve el componente
El propósito de esta función es admitir la reutilización de archivos DFM y se usa junto con el procedimiento WriteComponentResFile p>
El programa de esta función es el siguiente
function ReadComponentResFile(const FileName: string; Instance: TComponent)
TComponent
var
Secuencia: TStream;
comenzar
Secuencia:= TFileStream Create(FileName fmOpenRead)
probar
Resultado := Transmitir ReadComponentRes( Instancia)
finalmente
Transmitir gratis
finalizar
finalizar; El programa usa el objeto FileStream para abrir FileName, especifica el archivo DFM, luego usa el método ReadComponentRes del objeto Stream para leer la instancia y usa el resultado como valor de retorno de la función
Leer ComponentRes de Recursos de la aplicación Delphi
Función InternalReadComponentRes Los componentes de lectura de los recursos de la aplicación Delphi se incrustan en los recursos de la aplicación después de que el programa se compila y vincula, y el formato cambia, es decir,
El objeto TResourceStream presentado en la primera sección Es un objeto utilizado para manipular datos en medios de recursos. La sección 1 presentó el objeto TResourceStream, que se utiliza para manipular datos en medios de recursos.
La función InternalReadComponentRes usa TResourceStream, el programa es el siguiente
función InternalReadComponentRes(const ResName: string;
var Instancia: TComponent) var Instancia: TComponent) Booleano
var
HRsrc: THandle;
comenzar { Evitar evento de excepción EResNotFound }
HRsrc:= FindResource ( HInstance PChar(ResName) RT_RCDATA)
Resultado: = HRsrc lt; gt;
si no es el resultado, salga
FreeResource(HRsrc)
con TResourceStream Create(HInstance ResName RT_RCDATA )
prueba
Instancia := ReadComponent(Instancia)
finalmente
Gratis
final;
Resultado: = Verdadero;
end;
HInstance es una variable global definida por Delphi VCL, que representa el identificador de la aplicación actual. Función API de acceso a recursos FindResource para determinar si el recurso descrito por ResName existe, porque ResourceStream es un recurso que no está disponible para la aplicación. La función utiliza la función API de acceso a recursos FindResource para determinar si el recurso descrito por ResName existe. Debido a que hay otras operaciones como FindResource en el proceso de creación de TResourceStream, la función llama a FreeResource. Finalmente, la función llama al método ReadComponent de Stream. objeto para leer el componente, debido a que la Instancia de la función es un parámetro de tipo var, puede acceder a la Instancia para obtener el componente de lectura.
Convierta archivos DFM a archivos TXT o de archivos TXT a archivos DFM
Al abrir un archivo DFM directamente usando el comando Archivo/Abrir o seleccionando una ventana emergente en el diseño del formulario ventana, el entorno de diseño visual de Delphi permite a los programadores ver y modificar el contenido de los archivos DFM en forma de texto en un editor de código. La información de texto se muestra en el editor cuando abre un archivo DFM directamente usando el comando Archivo/Abrir o cuando selecciona el comando Ver como texto en el menú emergente de la ventana de diseño del formulario. A este texto lo llamamos guión de diseño de formulario. La función de edición de guiones proporcionada por Delphi es un gran complemento al diseño visual de Delphi. Por ejemplo, debido a que el código y el script DFM están estrechamente vinculados, no puede agregar ni eliminar secciones del script de forma arbitraria. Las adiciones y modificaciones arbitrarias pueden generar inconsistencias. Sin embargo, los archivos DFM generados dinámicamente no tienen esta limitación. La unidad de biblioteca de clases de Delphi VCL proporciona procedimientos para convertir archivos DFM y sus scripts en flujos binarios.
Estos procedimientos son ObjectBinaryToText y ObjectTextBinary ObjectResourceToText y ObjectTextToResource. El procedimiento almacenado ObjectBinaryToText convierte partes almacenadas en una secuencia binaria en una representación basada en texto para que puedan ser procesadas por funciones de procesamiento de texto para que puedan usarse en un editor de texto para realizar búsquedas y reemplazos. Finalmente, el texto se puede convertir. Devuelve la parte del flujo binario.
El programa principal del procedimiento almacenado ObjectBinaryToText es el siguiente.
procedimiento ObjectBinaryToText(Entrada Salida: TStream)
var
NestingLevel: Integer
SaveSeparator: Char
Lector:
Escritor: riter;
Procedimiento WriteIndent;
const
Espacios en blanco: matriz[ ] de Char = ; /p>
var
I:Entero;
comenzar
for I := to NestingLevel do Writer Write(Blanks SizeOf(Blanks))
fin;
procedimiento WriteStr(const S: cadena)
procedimiento WriteStr(Const S. cadena) comienzo
Escritor Write( S [ ] Longitud(S))
fin
procedimiento NewLine
comienzo
WriteStr(# # )
WriteIndent
fin
procedimiento ConvertHeader
comienzo
....
finalizar;
Procedimiento ConvertBinary
comenzar
...
finalizar
Procedimiento ConvertValue; /p>
comenzar
...
finalizar;
procesar ConvertProperty
procesar ConvertBinary
Inicio
...
Inicio
Inicio
...
Fin <; /p>
Procedimiento ConvertObject;
Inicio
...
fin
inicio
< p; > NestingLevel: =;Lector: = TReader Crear (Entrada)
SaveSeparator: = DecimalSeparator
DecimalSeparator: =; intente
intente p>
Escritor: = riter Crear (Salida)
intente
Lector ReadSignature
< p; > ConvertObject;finalmente
Writer Free
fin
finalmente
DecimalSeparator := SaveSeparator ; <
/p>
Reader Free
end;
end;
El programa ConvertObject llamado en el programa es recursivo
Programa ConvertObject
comenzar
ConvertHeader
Inc (NestingLevel)
mientras que Reader EndOfList no ConvertProperty; p> Reader ReadListEnd
mientras que Reader EndOfList no ConvertObject
Reader ReadListEnd
Dec(NestingLevel)
WriteIndent; /p>
WriteStr(end # # )
end;
La variable NestStingLevel representa el nivel de anidamiento del componente WriteIndent es el espacio antes del carácter inicial de cada línea. escrito Proceso ConvertHeader Hay dos formas de texto de título convertido para procesar la información de bandera heredada de los componentes
Heredar TestForm: TTestForm[ ]
o
Objeto TestForm. :
El primero establece ffInherited y ffChildPos, pero el segundo no
El proceso ConvertProperty se utiliza para convertir propiedades
El proceso ConvertProperty
;comenzar
WriteIndent
WriteStr (Reader ReadStr)
WriteStr ( = )
ConvertValue; p> WriteStr (# # )
p>end;
La declaración WriteIndent escribe el espacio antes del nombre del atributo. La declaración WriteStr (Reader ReadStr) escribe el nombre del atributo. El procedimiento almacenado convierte el valor del atributo en una cadena según el tipo de atributo y luego escribe Streamlishixinzhi/Articulo/programa/Delphi/201311/25088