Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Propiedades y registros (https://www.clubdelphi.com/foros/showthread.php?t=57910)

roman 01-07-2008 21:25:52

Propiedades y registros
 
Código Delphi [-]
type
  TMiObjeto = class
  private
    FPosition: TPoint;

  public
    property X: Integer read FPosition.X;
    property Y: Integer read FPosition.Y;
  end;

Nada. No hay duda. Es sólo que hasta hace unos minutos no sabía que se podía hacer algo así. Gracias por su atención :)

// Saludos

dec 01-07-2008 22:01:29

Hola,

Tiene su punto. ;)

Delphius 02-07-2008 02:09:37

A primera vista me dije "eso no compila". Fue sorpresa cuando si lo hizo:eek:

Hoy no me acuesto sin aprender algo nuevo.:)

Saludos,

esocrates 02-07-2008 02:15:29

Cita:

Empezado por roman (Mensaje 297537)
Código Delphi [-]
type
  TMiObjeto = class
  private
    FPosition: TPoint;

  public
    property X: Integer read FPosition.X;
    property Y: Integer read FPosition.Y;
  end;

Nada. No hay duda. Es sólo que hasta hace unos minutos no sabía que se podía hacer algo así. Gracias por su atención :)

// Saludos

Uds. que saben mucho más que yo. ¿Pueden explicarme de qué se trata esto?
Muchas gracias por adelantado
Un saludo

Al González 02-07-2008 05:57:37

¡Hola!

Para mí también fue un descubrimiento reciente, creo haberlo visto hace tiempo en la unidad Grids.pas.

Cita:

Empezado por esocrates (Mensaje 297651)
...¿Pueden explicarme de qué se trata esto?...

En el ejemplo dado por Román, se define un clase de nombre TMiObjeto en la cual se declaran dos propiedades —X y Y—. Esto quiere decir que, teniendo una variable objeto O instanciada de tipo TMiObjeto, podríamos escribir en el código O.X u O.Y para leer esas propiedades del objeto.

Lo interesante es que el especificador de acceso Read (el cual sirve para indicarle al compilador de dónde o cómo el programa va a obtener el valor de la propiedad a la hora de ejecutarse una expresión como las mencionadas), en este caso no indica meramente el nombre de un campo o de un método función, que es lo más común.

Es raro toparse con una declaración de propiedad donde uno de sus especificadores de acceso (Read o Write) se refiere a un elemento particular de uno de sus campos y no al campo en su totalidad. No obstante es válido, según se ha visto.

Si utilizamos la opción Find in Files del entorno de Delphi y, con la opción Regular expressions marcada, buscamos la cadena

Property .* Read .*\..*;

en los archivos fuentes de la VCL, encontraremos algunos ejemplos.

Este hilo me hizo reflexionar un poco más sobre el tema, llevándome a pensar que el compilador admite cualquier referencia "estática" de valor estructurado, mientras el punto de partida sea un campo propio de la clase y los tipos de datos sean iguales, pero sin importar la profundidad de dicha referencia. Por lo tanto el siguiente código debe también compilar sin problemas:

Código Delphi [-]
Type
  TR = Record
    A, B :Integer;
  End;
 
  T1 = Class
    Protected  // o Private
      FRs :Array [1..2] Of TR;
    Public
      Property A1 :Integer Read FRs [1].A;
      Property A2 :Integer Read FRs [2].A;
  End;

Interesante tema, Román.

Un abrazo específico.

Al González. :)

Neftali [Germán.Estévez] 02-07-2008 09:40:39

Código:

property X: Integer read FPosition.X;
Eso se ve bonito. :)
Gracias.

esocrates 02-07-2008 12:33:10

Muchas gracias a todos por esta novedad insospechada para mí y por tan claras explicaciones. Una vez más queda demostrada la importancia de este Foro para los que somos aficionados a la programación con Delphi.
Un saludo y hasta pronto

roman 02-07-2008 16:40:18

Cita:

Empezado por Al González (Mensaje 297672)
Para mí también fue un descubrimiento reciente, creo haberlo visto hace tiempo en la unidad Grids.pas.

Pues de hecho justamente ahí lo vi. Estaba buscando otra cosa en TCustomGrid y me topé con eso. Con la VCL a veces pasa como cuando consultas un diccionario; comienzas buscando una palabra, ves otra que te llama la atención y terminas recorriendo varías palabras sin relación alguna.


Cita:

Empezado por Al González (Mensaje 297672)
Si utilizamos la opción Find in Files del entorno de Delphi y, con la opción Regular expressions marcada, buscamos la cadena

Property .* Read .*\..*;

en los archivos fuentes de la VCL, encontraremos algunos ejemplos.

Pues ¿creerás que tampoco me había percatado de la opción de expresiones regulares en la búsqueda? Y eso me hace preguntarme, ¿por qué entonces delphi no ha puesto (al menos hasta la versión 7) un motor de expresiones regulares disponibles al programador? ¿Existe ya en Delphi 2007?

Cita:

Empezado por Al González (Mensaje 297672)
Por lo tanto el siguiente código debe también compilar sin problemas:

Pensé algo similar pero no lo probé, ¿lo hiciste tú?


// Saludos

Al González 02-07-2008 19:28:07

Cita:

Empezado por roman (Mensaje 297757)
...Con la VCL a veces pasa como cuando consultas un diccionario; comienzas buscando una palabra, ves otra que te llama la atención y terminas recorriendo varias palabras sin relación alguna...

Así es, creo que eso pasa con cualquier banco de datos sobre un tema que nos interesa de manera importante.


Cita:

Empezado por roman (Mensaje 297757)
...¿creerás que tampoco me había percatado de la opción de expresiones regulares en la búsqueda?...

Te creo, pero me cuesta...:eek:


Cita:

Empezado por roman (Mensaje 297757)
...¿por qué entonces delphi no ha puesto (al menos hasta la versión 7) un motor de expresiones regulares disponibles al programador?...

Buscando reg[a-z]*exp en Delphi 7 encontré que hay algo de eso en la unidad ToolsAPI.pas. Al parecer existen unas interfaces mediante las cuales una aplicación puede interactuar con el IDE y aprovechar mucha de su funcionalidad. Es como seguramente están construidos los famosos accesorios llamados "wizards" o "expertos". Aunque entiendo que lo ideal sería contar con una biblioteca nativa de clases o funciones para manejo de expresiones regulares. ¿Si existe en el IDE por qué no como clase independiente del él? Buena reflexión.


Cita:

Empezado por roman (Mensaje 297757)
...Pensé algo similar pero no lo probé, ¿lo hiciste tú?...

Sí, y vaya que se cumple la teoría. El código compila. :)


Un abrazo expresado con regularidad.

Al González.

roman 02-07-2008 19:31:07

Cita:

Empezado por Al González (Mensaje 297832)
Buscando reg[a-z]*exp en Delphi 7 encontré que hay algo de eso en la unidad ToolsAPI.pas. Al parecer existen unas interfaces mediante las cuales una aplicación puede interactuar con el IDE y aprovechar mucha de su funcionalidad. Es como seguramente están construidos los famosos accesorios llamados "wizards" o "expertos".

A eso me refiero. El motor lo tienen pero no lo hacen accesible. Porque podría usarse -quizá- para expertos o wizard, pero no para aplicaciones finales.

// Saludos


La franja horaria es GMT +2. Ahora son las 14:09:29.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi