La Red de Conocimientos Pedagógicos - Currículum vitae - Tutorial básico de DELPHI: Desarrollo de funciones de gestión de datos basadas en objetos de Delphi (4) [2]

Tutorial básico de DELPHI: Desarrollo de funciones de gestión de datos basadas en objetos de Delphi (4) [2]

Evento OnSetName

Declarar propiedad OnSetName: TSetNameEvent;

El evento OnSetName ocurre antes de que el objeto Leer establezca la propiedad Nombre del componente. El parámetro var Nombre de. el proceso de procesamiento de eventos OnSetName es un parámetro var, por lo que el controlador de eventos puede modificar el valor de Nombre antes de asignar Nombre al componente. Esto es muy útil para filtrar los nombres de los componentes en el formulario.

Lo siguiente. El controlador de eventos OnSetName se denomina Los componentes cuyos nombres contienen Button se reemplazan con PushButton

procedimiento TForm ReaderSetName (Reader: TReader; Component: TComponent;

var Name: cadena)

var

PosBotón: Entero

comenzar

PosBotón := Pos(Nombre del botón)

if ButtonPos <> entonces

Nombre := Copiar(Nombre ButtonPos) + PushButton +

Copiar(Nombre ButtonPos + Longitud(Nombre))

fin;

Método ReadValue

Función de declaración ReadValue: TValueType;

El método ReadValue lee el tipo del elemento inmediatamente después de la secuencia. Después de que la función regresa, el puntero. de la secuencia se mueve después del indicador de tipo de valor

TValueType es un tipo de enumeración. Cada elemento almacenado en la secuencia del objeto Filer está precedido por un byte que identifica el tipo de elemento. Este byte se lee antes. cada elemento se lee para indicar qué método llamar. Para obtener el valor del byte del elemento, es uno de los tipos de valor definidos por TValuetype

Método NextValue

Función de declaración. Nextvalue: TValuetype;

La función del método Nextvalue También devuelve el tipo del siguiente elemento en el flujo de objetos Reader. La diferencia con ReadValue es que no mueve la posición del puntero.

Método ReadBoolean

Función de declaración ReadBoolean: Boolean;

El método ReadBoolean lee un valor booleano de la secuencia del objeto Reader y mueve el puntero de posición de la secuencia en consecuencia

Método ReadChar

Declara la función ReadChar: char;

El método ReadChar lee un carácter de la secuencia del objeto Reader

El método ReadFloat

Declarar la función ReadFloat: Extended;

El método ReadFloat lee un flotante de los puntos de flujo

Método ReadIdent

Función de declaración ReadIdent: string <; /p>

El método ReadIdent lee identificadores de la secuencia

Método ReadInteger

p>

Declarar función ReadInte

ger: Longin

El método ReadInteger lee números enteros de la secuencia

El método ReadString

declara la función Leer cadena: cadena

> El método ReadString lee una cadena de la secuencia del objeto Reader y devuelve el contenido de la cadena. La cadena es escrita por el método WriteString del objeto Writer

Implementación del objeto TReader

.

Delphi utiliza principalmente la función del objeto Filer para leer y escribir varios tipos de datos (incluidos los objetos componentes) en archivos DFM. Una característica esencial de estos datos es la longitud variable, y el objeto Filer abstrae y empaqueta la lectura. y escribir operaciones de datos en objetos y proporciona una gran cantidad de Los métodos de lectura y escritura facilitan las llamadas a programas, por lo que el objeto Filer se puede usar ampliamente en aplicaciones para aprovechar al máximo la tecnología orientada a objetos de Delphi. El objeto Filer está incluido con Stream. Por un lado, se puede acceder a datos en cualquier formato en varios medios de almacenamiento. Por otro lado, debido al uso completo del enlace dinámico orientado a objetos, el uso de varios métodos de lectura y escritura es consistente, por lo que el método. La llamada es muy simple. A continuación nos centramos en la implementación de las propiedades y métodos relacionados con las operaciones de lectura y escritura de datos en el objeto Reader.

Implementación de los atributos de TReader

En la implementación de atributos de. Objeto TReader, nos centramos en la implementación de Position

La definición del atributo Position utiliza control de lectura y escritura. Son los métodos GetPosition y SetPosition

TReader = clase (TFiler)

privado

función GetPosition: Longint

procedimiento SetPosition (Valor: Longint)

público

propiedad Posición: Longint leer GetPosition escribir SetPosition;

end

p>

El método de control de lectura y escritura de Postition; es el siguiente

función TReader GetPosition: Longint

comenzar

Resultado:= FStream Position + FBufPos

p>finalizar;

procedimiento TReader SetPosition(Valor: Longint)

comenzar

FStream Posición := Valor

FBufPos := ;

FBufEnd := ;

end;

Introducidas en el objeto TFiler del objeto principal TReader, las variables FBufPos y FBufEnd se asignan internamente en el objeto Filer A. Búfer de tamaño BufSize FBufPos se refiere a la posición relativa en el búfer FBufEnd se refiere a la posición al final de los datos en el búfer (es posible que los datos en el búfer no llenen todo el búfer)

En. En el método GetPosition, puede ver que el valor de Posición del objeto Reader y el valor de Posición del objeto Stream son diferentes. El objeto Reader tiene un valor de desplazamiento FButPos adicional

Implementación de los métodos Defineproperty y DefineBinaryproperty<. /p>

Estos dos métodos son métodos virtuales en TF

Los métodos abstractos en iler tienen implementaciones específicas en TReader y objetos riter

Su implementación en TReader es la siguiente

procedimiento TReader DefineProperty (const Name: string; ReadData: TReaderProc;

WriteData: riterProc; HasData: Boolean)

comenzar

si CompareText(Nombre FPropName) = entonces

comenzar

ReadData(Self)

FPropName :=

end;

end;

procedimiento TReader DefineBinaryProperty (const Nombre: cadena; /p>

ReadData WriteData: TStreamProc; HasData: Boolean)

var

Stream: TMemoryStream

Count: Longint; p> p>

comenzar

si CompareText(Nombre FPropName) = entonces

comenzar

si ReadValue <> vaBinary entonces

comenzar

Dec(FBufPos)

SkipValue

FCanHandleExcepts := Verdadero

PropValueError; finalizar;

Secuencia:= TMemoryStream Crear

intentar

Leer(Count SizeOf(Count))

Stream SetSize(Count)

p>

Leer(Transmitir memoria^ Contar)

FCanHandleExcepts := Verdadero

ReadData(Transmitir)

finalmente;

Transmitir gratis

fin

FPropName :=

fin

fin; p>

En ambos métodos, se compara el valor del parámetro Nombre con el nombre de la propiedad actual. Si son iguales, se realiza la operación de lectura. Se crea un flujo de memoria en DefineBinaryproperty. y luego se llama a ReadData para leer los datos.

Implementación de FlushBuffer

El método FlushBuffer se utiliza para borrar el contenido del búfer interno del objeto Reader y mantener el objeto Reader y la secuencia. sincronizado en posición (Position) Su implementación es la siguiente

procedimiento TReader FlushBuffer

begin

FStream Position:= FStream Position (FBufEnd FBufPos)

FBufPos := ;

FBufEnd :=

fin

ReadListBegi;

n Métodos ReadListEnd y EndOfList

Estos tres métodos se utilizan para leer una serie de elementos de la secuencia del objeto Reader, y estos elementos se inician con el indicador de escritura WriteListBegin y finalizan con el indicador de escritura WriteListEnd. EndOfList en el bucle de lectura para determinar que se utilizan a menudo cuando el objeto Reader lee datos en la secuencia. Su implementación es la siguiente

procedimiento TReader ReadListBegin

begin

.

 CheckValue(vaList)

fin

procedimiento TReader ReadListEnd

comenzar

CheckValue(vaNull)

fin;

función TReader EndOfList: booleano

comenzar

Resultado:= ReadValue = vaNull

Dec(FBufPos; )

end;

La marca de inicio de la lista de proyectos es VaList y la marca de final de la lista de proyectos es VaNull. Tanto VaList como VaNull son constantes definidas por el tipo de enumeración TValueType lishixinzhi. /Artículo/programa/Delphi/201311/ 25093