Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-12-2005
Avatar de eliash
eliash eliash is offline
Miembro
 
Registrado: nov 2005
Ubicación: Galicia, España
Posts: 38
Poder: 0
eliash Va por buen camino
Font.Assign(Owner.Font); vs Font:=owner.Font;

¿Que diferencia hay entre escribir...
Código:
Font.Assign(Owner.Font);
y...
Código:
Font:=owner.Font;
Se lo pregunte al buen Kambiz pero no resolvió mi duda...
Por alguna razón, cuando introduzco la segunda linea en mi código, el programa funciona perfectamente, pero me da un fallo al cerrar...?
Responder Con Cita
  #2  
Antiguo 22-12-2005
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Font es una variable que contiene un objeto, si utilizas un assign, copias las porpiedades de otro objeto sobre el tuyo, pero si lo asignas Font := Owner.Font, estas asignando a esa variable el objeto contenido en Owner.Font y posiblemente hayas perdido referencia al otro objeto.
Seguramente te da un error al cerrar, porque cuando uno de los objetos libera el font, y ambos objetos apuntan al mismo objeto, el otro si lo quier utilizar para algo va a producir un access violation.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 22-12-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Lo explicado por Fede es cierto si, por ejemplo, el control del Font que recibe la asignación lo tenes vos y no hay nada tras bambalinas.

Ocurre que con la VCL, vos regularmente podes hacer algo como:

Código Delphi [-]
Canvas2.Font := Canvas1.Font

Y siendo que el Font en el canvas es una propiedad, regularmente su método de asignación evitará que Font de Canvas2 apunte a Font de Canvas1, y llamará a assign para copiar sus valores.

Por ello es que pueden hacerse muchas "asignaciones" de modo seguro en la VCL.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #4  
Antiguo 26-12-2005
Avatar de eliash
eliash eliash is offline
Miembro
 
Registrado: nov 2005
Ubicación: Galicia, España
Posts: 38
Poder: 0
eliash Va por buen camino

Gracias a los dos; otro día miraré exhaustivamente vuestros posts (porque ahora no tengo ganas de pensar) y ya os contaré si caigo.
Responder Con Cita
  #5  
Antiguo 28-12-2005
Avatar de eliash
eliash eliash is offline
Miembro
 
Registrado: nov 2005
Ubicación: Galicia, España
Posts: 38
Poder: 0
eliash Va por buen camino
Ya lo entiendo!!....
O sea, con assign copio las propiedades de A y las pongo en B
con:= Hago que B sea A, pero en realidad no es más que el mismo objeto con dos nombres
Es así?
Gracias por las molestias.
Responder Con Cita
  #6  
Antiguo 28-12-2005
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por eliash
con:= Hago que B sea A, pero en realidad no es más que el mismo objeto con dos nombres
No con dos nombres, con dos apuntadores. Digamos dos variables apuntan al mismo objeto.

Es buena la observación de jachguate que se me pasó, muchas propiedades de objetos de la VCL internamente hacen un Assign, así que previenen que sobreescribamos el objeto.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #7  
Antiguo 29-12-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Cita:
Empezado por eliash
en realidad no es más que el mismo objeto con dos nombres
No olvides que en delphi, cualquier variable de tipo "objeto" no es mas que un apuntador. Lo que en el viejo pascal era:

Código Delphi [-]
  objeto^.miembro := valor;
en delphi se reduce a:
Código Delphi [-]
  objeto.miembro := valor;

pero la asignación directa, sigue asignando el puntero y no otra cosa.

Ya lo ha dicho fede:
Código Delphi [-]
  b := a;
hace que b apunte a donde apunta a, y no que el objeto a se copie al objeto b (que de hecho, podría sin problemas no existir en el momento de la asignación).

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #8  
Antiguo 29-12-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Como corolario a las excelentes explicaciones de nuestro moderadores, podríamos decir:

La VCL hace un Assign en muchos casos (copiando el objeto entero), pero el objeto Font es una excepción, por tanto, siempre que queramos copiar el objeto, es mejor usar Assign, nos libera de dudas y aclara el código.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #9  
Antiguo 03-01-2006
Avatar de eliash
eliash eliash is offline
Miembro
 
Registrado: nov 2005
Ubicación: Galicia, España
Posts: 38
Poder: 0
eliash Va por buen camino

Gracias
Entonces...

:= No debería Delphi entonces utilizar dos simbolos?

^ O la antigua sintaxis?
Responder Con Cita
  #10  
Antiguo 03-01-2006
Avatar de eliash
eliash eliash is offline
Miembro
 
Registrado: nov 2005
Ubicación: Galicia, España
Posts: 38
Poder: 0
eliash Va por buen camino
Ah! Feliz año... y feliz navidad... fuera de fecha...
Responder Con Cita
  #11  
Antiguo 10-01-2006
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Esto podes tomarlo como una simplificación al lenguaje, que hace que los neofitos se asusten menos, y quienes estan un poco mas experimentados, tendrán con la aclaración para no olvidarlo. A mi, en lo personal, me es, hasta cierto punto, indiferente.

Saludos.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 00:51:05.


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