PDA

Ver la Versión Completa : Duda con 'Self' ...Urgente


IVAND
30-08-2003, 01:15:23
Hola a todos

Tengo una unidad en la cual se ejecutan varios procedimientos, pero ahora quiero incluir uno que construye un Objeto
Digamos un (Form) y lo ejecuta todo bien pero cuando trato de compilar me da un aviso

[Error] Procedim.pas(622): Undeclared identifier: 'Self'

El procedimiento es el siguiente

procedure ShowForm(FormClass: TFormClass);
begin
With FormClass.Create(Self) do
try
ShowModal;
finally
Free;
end;
end;

La pregunta es la siguiente ¿ Porqué si lo ejecuto dentro de una form si compila y si lo hago dentro de solamente una Unit
me da ese error ? y como poder superarlo

Nota : Sera que falta incluir alguna unidad ?

De Antemano, Gracias

:D

jachguate
30-08-2003, 01:41:55
Self es una variable implicita, que funciona solamente en el contexto de un objeto, ya que contiene una referencia a si mismo (self). Es decir, a la instancia del objeto dentro del cual se hace la llamada al método en tiempo de ejecución.

De tal forma, si tenes una clase TForm1, utilizar self en uno de sus métodos te permitirá acceder a los métodos, propiedades y atributos de la instancia de TForm1 sobre la que se este actuando en ese momento.

En cambio, si lo utilizas dentro de la clase TMiClase, Self es una variable de tipo TMiClase.

En tu caso particular, podes agregar un parámetro al procedimiento, que traiga el owner del formulario, o por definicion crearlos con el objeto application como owner o por ultimo, sin owner.

Algo como


With FormClass.Create(Application) do
o
With FormClass.Create(nil) do




Espero haberme explicado lo suficiente.

Hasta luego.

;)

jachguate
30-08-2003, 01:44:19
Aclaro que te respondi, porque no me di cuenta del "urgente" del título de tu post... el cual me disgusta bastante.

TE recomiendo que leas la guia de estilo de los foros (vinculo al pie de este mensaje) y que en un futuro tengas un mejor criterio para titular tus posts.

Hasta luego.

IVAND
31-08-2003, 17:13:10
Gracias por tu respuesta jachguate, por lo de Urgente, espero no haber ocasionado mas disgustos, para la proxima tendre mas cuidado



De antemano, Gracias
:)