![]() |
Font.Assign(Owner.Font); vs Font:=owner.Font;
¿Que diferencia hay entre escribir...
Código:
Font.Assign(Owner.Font); Código:
Font:=owner.Font; Por alguna razón, cuando introduzco la segunda linea en mi código, el programa funciona perfectamente, pero me da un fallo al cerrar...? |
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! |
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:
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. ;) |
:)
Gracias a los dos; otro día miraré exhaustivamente vuestros posts (porque ahora no tengo ganas de pensar) y ya os contaré si caigo. |
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. |
Cita:
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! |
Cita:
en delphi se reduce a:
pero la asignación directa, sigue asignando el puntero y no otra cosa. Ya lo ha dicho fede: 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. ;) |
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 |
:)
Gracias Entonces... := No debería Delphi entonces utilizar dos simbolos? ^ O la antigua sintaxis? |
Ah! Feliz año... y feliz navidad... fuera de fecha...
|
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. ;) |
La franja horaria es GMT +2. Ahora son las 05:51:57. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi