Delphi - Creacion dinamica componentes

 
Vista:

Creacion dinamica componentes

Publicado por Javi (7 intervenciones) el 30/04/2003 19:20:27
Hola, no llevo mucho tiempo programando en delphi, asi que perdonarme
si la respuesta a mi problema es una tonteria, pero llevo ya tiempo
intentando solucionarlo y no puedo :)

El problema es el siguiente :

Tengo esta clase basica:

type
TDatosUsuarios = class
public
Nombre : String;
Conectado : Boolean;
end;

Estoy usando el componente de INDY TCP Servidor, he aqui el codigo de
los metodos que esto utilizando

procedure TInicioServidor.IniServidorConnect(AThread: TIdPeerThread);
var
Datos : ^TDatosUsuarios;
begin
SecCritica.Acquire; // ENTRA SECCIÓN CRÍTICA

// ESTO ES LO QUE NO SE COMO HACERLOOOO :( :(
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Datos := @(TDatosUsuarios.Create);
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

AThread.Connection.Tag := Integer (Datos);

if (NumeroClientesActuales < MAXIMOS_CLIENTES) then
begin
NumeroClientes := NumeroClientes + 1;
Datos.Conectado := True;
end else
begin
Datos.Conectado := False;
AThread.Connection.Disconnect;
end;

SecCritica.Release; // SALE SECCIÓN CRÍTICA
end;

procedure TInicioServidor.IniServidorExecute(AThread: TIdPeerThread);
var
Usuario : ^TDatosUsuarios;
b
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Creacion dinamica componentes

Publicado por Ernesto De Spirito (706 intervenciones) el 30/04/2003 21:09:03
Es más simple de lo que crees:

var
Datos : TDatosUsuarios;
begin
Datos := TDatosUsuarios.Create;

Cuando declaras una variable tipo objeto, se entiende que se trata de un puntero a un objeto, no el objeto mismo como ocurre en C++. Si vienes de C++ te va a costar un poco adaptarte.

Ernesto De Spirito
http://www.latiumsoftware.com/es/index.php
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Creacion dinamica componentes

Publicado por Javi (7 intervenciones) el 30/04/2003 23:22:30
Hola, de esta forma no me sirve. Porque cuando se sale del método
IniServidorConnect, la instancia es destruida (creo, corrigeme si me
equico) y yo necesito destruirla en otro momento y en otro método.

Gracias y un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Creacion dinamica componentes

Publicado por Diego Romero (636 intervenciones) el 01/05/2003 12:43:38
No, simplemente queda fuera de ámbito pero no se destruye. Si continuas haciendolo así te quedarás sin memoria y no podrás liberarla destruyendo las instalcias.
Para mi el objeto Datos debe ser global y no solo local al evento OnConnect. Pero tendrás el problema de que Datos al ser una sola referencia a una instancia de objeto no podrás destruir las anteriores. Te sugiero crear una lista de objetos con la clase predefinida TList.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar