Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-08-2006
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Asignar NIL a un formulario

Hola a todos

Como puedo asignar el valor nulo a un formulario que creo dinamicamente, y lo libero utilizando screen.

Si hago de esta forma, me da este error cuando lo compilo "Cannot assign to a read-only property"

Código Delphi [-]
    For i:=0 to screen.FormCount-1 Do
    begin
         If screen.Forms[i].name=forma Then
         begin
              screen.Forms[i].Free;
              screen.Forms[i]:=NIL; //Aqui marca el error
              break;
         end;
    end;

Si hago de esta otra forma, me da este error cuando lo compilo "Constant object cannot be passed as var parameter"

Código Delphi [-]
    For i:=0 to screen.FormCount-1 Do
    begin
         If screen.Forms[i].name=forma Then
         begin
              FreeAndNil(screen.Forms[i]);//Aqui marca el error
              break;
         end;
    end;

Muchisimas gracias por adelantado
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #2  
Antiguo 17-08-2006
Avatar de droguerman
droguerman droguerman is offline
Miembro
 
Registrado: abr 2005
Ubicación: tierra
Posts: 999
Poder: 20
droguerman Va por buen camino
hubiera sido bueno que expliques como desear utilizar eso, si es para luego iterar en screens puedes usar la funcion assigned que te dice si un puntero tiene una referencia valida
__________________
self.free;
Responder Con Cita
  #3  
Antiguo 17-08-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
No entiendo porque quieres hacer eso. Al eliminar el formulario con Free también es eliminado de la lista Forms, ya no esta en la lista. De echo si quieres eliminar todos los formularios la forma correcta seria empezar por el ultimo, de lo contrario te dará error, es decir:

Código Delphi [-]
For i:=screen.FormCount-1 downto 0 Do
    begin
         If screen.Forms[i].name=forma Then
         begin
              screen.Forms[i].Free;
         end;
    end;
Responder Con Cita
  #4  
Antiguo 17-08-2006
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Muchisimas gracias a los dos por responder, quiero hacer de esa forma porque creo mi menu dinamicamente y lo cargo en un TreeView, y cuando voy moviendome entre los items o haciendo un click en el item muestro su forma correpondiente en un panel, pero antes de mostrar la nueva fora libero la anterior forma cargada con Free. Mi problema es el siguiente que si hago dos veces click en el mismo item se carga la forma primero despues se destruye y se vuelve a cargar, lo que yo quisiera es poder preguntar si la forma (teniendo su nombre como cadena), ya ha sido creada para no volver a crearla.

La primera ves cuando la forma no se ha creado apunta a nulo, todo bien hasta, pero cuando ya se ha creado y despues lo libero con Free o Destroy, no apunta a nulo entonces como hago la pregunta, porque no funciona tampoco con assigned.


Espero se entienda, creo que me estoy enredando mucho.
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #5  
Antiguo 17-08-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Si te entiendo, tu creas una forma y utilizas una variable que apunta a ella. Algo como esto:

Código Delphi [-]
  Miforma:= TMiforma.Create(nil);

Sin embargo a la hora de borrarlo utilizas la lista Forms de la variable Screen, supongo que lo haces así para no tener que preocuparte de que formulario fue el ultimo que abriste. Pero como has dicho, el contenido de la variable no cambia y esta pasa a apuntar a una forma que ya no existe. Se me ocurre una posible solución:

Código Delphi [-]
function Existe(F: TForm): Boolean;
var
  i: integer;
begin
  for i:= 0 to Screen.FormCount - 1 Do
    if Screen.Forms[i] = F then
    begin
      Result:= TRUE;
      Exit;
    end;
  Result:= FALSE;
end;

Esta función te dirá si la variable apunta a una forma real, o por el contrario su valor ya no sirve.
Responder Con Cita
  #6  
Antiguo 17-08-2006
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Si, asi lo hare seoane, muchisimas gracias
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Asignar la propiedad de un DBLookupCombobox JoanKa Varios 2 23-05-2006 18:14:02
Asignar maskedit soloriv Varios 2 28-07-2005 17:29:48
pasar datos de un formulario vista a cualquier formulario @-Soft OOP 2 28-09-2004 21:56:01
Asignar valor a una prppiedad formulario hijo???? mguixot OOP 8 14-09-2004 12:09:14
Problema al asignar variables Majo Varios 2 11-05-2004 16:56:58


La franja horaria es GMT +2. Ahora son las 00:05:55.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi