Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   SetBitmap no funciona con assign (https://www.clubdelphi.com/foros/showthread.php?t=29584)

elcigarra 26-01-2006 01:09:07

SetBitmap no funciona con assign
 
Tengo un componente con una propiedad TBitmap definida como
Código Delphi [-]
property MiBmp : TBitmap read FMiBmp write SetMiBmp;
Con FMiBmp y SetMiBmp definidos en private.

Porqué ocurre que si en tiempo de ejecución intento cambiar su gráfico así:
Código Delphi [-]
MiComponente1.MiBmp := Image1.picture.Bitmap;

Se dispara el procedimiento SetMiBmp mientras que si lo escribo así:
Código Delphi [-]
MiComponente1.MiBmp.Assign(Image1.picture.Bitmap);

no ejecuta ese procedimiento?

jachguate 26-01-2006 01:54:32

claro que no, porque estas obteniendo el bitmap y asignando una propiedad de este...

Según la declaración de tu propiedad, se lee directamente el FMiBmp.

Hasta luego.

;)

elcigarra 26-01-2006 13:02:05

Disculpa mi ignorancia pero no entiendo la diferencia entre las dos... Puedes abundar un poco?

roman 26-01-2006 17:26:51

Cuando pones

Código Delphi [-]
MiComponente1.MiBmp := Image1.picture.Bitmap;

estás asignando un valor a la propiedad MiBmp. Como en la declaración de esta propiedad tienes puesto un método de acceso para escritura (write), entonces la asignación es equivalente a:

Código Delphi [-]
MiComponente1.SetMiBmp(Image1.picture.Bitmap);

En el segundo caso:

Código Delphi [-]
MiComponente1.MiBmp.Assign(Image1.picture.Bitmap);

No estás asignando un valor a la propiedad, no hay una sentencia de la forma

Código:

objeto.propiedad := valor;
Lo que estás haciendo es usar el método Assign del objeto

Código:

MiComponente1.MiBmp
Piensa lo que tendría que hacer el compilador cuando encuentra:

Código:

MiComponente1.MiBmp.Assign(Image1.picture.Bitmap);
Como ha de usar el método Assign de MiBmp, primero debe saber quién es MiBmp, es decir, debe leer la propiedad. En la declaración de la propiedad ve que no hay método deacceso de lectura (read) sino una referencia directa a FMiBmp, entonces usa el método Assign de este objeto FMiBmp.

Que no te confunda el hecho de estar usando un método que porcasualidad se llama Assign, con el hecho de estar asignando un valor a una propiedad como en el primer caso que planteas.

// Saludos

jachguate 26-01-2006 20:29:11

Yo no podría haberlo explicado mejor... :)

elcigarra 27-01-2006 12:40:02

Gracias Román, muy elocuente lo tuyo como siempre. Gracias jachguate también.


La franja horaria es GMT +2. Ahora son las 22:24:52.

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