PDA

Ver la Versión Completa : Pasar punteros a objentos en un procedimiento


paldoc
08-05-2003, 21:03:41
Hola amigos, soy nuevo en este foro y un principiante en el lenguaje de programación.
Me podría decir alguíen si se puede pasar en un procedimiento un puntero a un objeto (Label, Shape,...) para poder modificar el objeto dentro del procedimiento.
Si es posible ¿Como se debe declarar ?

Graciasconfused:

__cadetill
08-05-2003, 21:22:15
mas o menos seria una cosa asi

* Llamada -> pasamos un TLabel y un TEdit


begin
Actualizar(Label1, Edit5);
end;


* declaracion -> recibimos el TLabel y el TEdit


procedure Actualizar(L : TLabel; E . TEdit);
begin
L.Caption := 'Nuevo caption';
E.Text := 'Nuevo texto';
end;


En delphi, cuando se pasa un objeto por parametro, siempre se esta pasando un puntero a el, por lo tanto, si modificas cualquier propiedad dentro del procedimiento Actualizar, seguira estando al salir de el.

Bueno, espero que te sirva

Bacterion
09-05-2003, 16:39:35
Bien, básicamente es que toda "variable" objeto es, en realidad, una referencia a objeto.

Vamos:
var
MiSuperObjeto: TMiSuperObjeto;

Sería "como" poner
var
MiSuperObjeto: ^TMiSuperObjeto;

Son siempre punteros a objeto, mientras que el resto de tipos "primitivos" (real, entero, etc...), son el contenedor de un valor del tipo (vamos tienes la referencia y el espacio de memoria asociado).

De ahí viene que si no se le asigna un objeto a la variable, en realidad no estés apuntando a algún sitio valido.

Usea:

var
MiSuperObjeto: TMiSuperObjeto;
begin
MiSuperObject.SuperMetodo; // lanzará una violación en masa de los bits pares de la cpu.

Luego, si haces lo que cadetill indica, siempre pasas una referencia al objeto (y por lo tanto, operarás, realmente, con ese objeto).