Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-02-2013
Theluar Theluar is offline
Miembro
NULL
 
Registrado: ago 2011
Posts: 44
Poder: 0
Theluar Va por buen camino
Question Como Crear y destruir Tframe's?

Hola amigos del club, Estoy haciendo un programa en cual utilizo muchos frames dentro de un Form, y deacuerdo a cada button les cambio la propiedad enabled y visibled a true o false;

El problema he puesto muchos frames, siento que a la hora de ejecutar el programa pierde mucho tiempo creando frame que quizas un usuario no utilizara,
quiero saber la manera de mandarlos crear cuando los necesite y destruirlos cuando los deje de utilizar, y volver a crearlos cuando se vuelva a usar , etc.etc....

No se cual seria la manera mas efieciente de hacer esto.

tengo un P_Form(Form principal), varios P_frames (Frame principal) y adentro de estos frames tengo otros S_frame(Frame secundarios)


Cualquier idea para realizar mi tarea se las agradesco de antemano .
Responder Con Cita
  #2  
Antiguo 28-02-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 37
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Theluar.

Ignoro las declaraciones y la organización del código de tu aplicación, por lo que sólo puedo darte respuestas genéricas y tal vez no las mas óptimas...

Para crearlo:
Código Delphi [-]
procedure TfrmMain.btnShowFrame2Click(Sender: TObject);
begin
  if not Assigned(FindComponent('Frame2')) then
     with TFrame2.Create(Self) do Parent := Self
end;

Para liberarlo:

.- desde el form principal:
Código Delphi [-]
procedure TfrmMain.btnFreeFrame2Click(Sender: TObject);
begin
  FindComponent('Frame2').Free
end;

.- desde el mismo Frame:
Código Delphi [-]
...
type
  TFrame2 = class(TFrame)
    ...
    btnCerrar: TButton;
    procedure btnCerrarClick(Sender: TObject);
    ...
  private
    procedure CMRelease(var Msg: TMessage); message CM_RELEASE;
  public
  end;

implementation

procedure TFrame2.CMRelease(var Msg: TMessage);
begin
  Free
end;  

procedure TFrame2.btnCerrarClick(Sender: TObject);
begin
  PostMessage(Handle, CM_RELEASE, 0, 0)
end;
...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 28-02-2013
Theluar Theluar is offline
Miembro
NULL
 
Registrado: ago 2011
Posts: 44
Poder: 0
Theluar Va por buen camino
Hola ecfisa,

el código que me mandaste me sirvió a la perfección, muchas gracias, aunque se que no me explique de manera completa mi problema,

ahora lo único que me falla y que no explique en la pregunta original es que :

Quisiera saber también como evitar que se creen los Tframe cuando inicia el programa.?

Y otra cosa si no es mucha molestia podrías instruirme un poco acerca de tu código. ya que veo que realiza lo que pido, pero no se que es lo que hace realmente cada palabra reservada, por ejemplo assigned(), self, pero mas que nada de esto:

Código Delphi [-]
PostMessage(Handle, CM_RELEASE, 0, 0)

ya que no tengo ni idea de lo que significa.

de nuevo muchas gracias por tu ayuda ha sido de mucha utilidad.

Saludos.

Última edición por Theluar fecha: 28-02-2013 a las 09:48:42.
Responder Con Cita
  #4  
Antiguo 28-02-2013
Theluar Theluar is offline
Miembro
NULL
 
Registrado: ago 2011
Posts: 44
Poder: 0
Theluar Va por buen camino
Disculpa por mi pregunta tonta ya la resolví solo vasto analizar un poco el código , que pena enserio, gracias por tu ayuda...
Responder Con Cita
  #5  
Antiguo 28-02-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 37
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por Theluar Ver Mensaje
Y otra cosa si no es mucha molestia podrías instruirme un poco acerca de tu código. ya que veo que realiza lo que pido, pero no se que es lo que hace realmente cada palabra reservada, por ejemplo assigned(), self, pero mas que nada de esto:
Código Delphi [-]
PostMessage(Handle, CM_RELEASE, 0, 0)
Hola Theluar.

Básicamente la función Assigned comprueba si un puntero está o no asignado.
Evaluar:
Código Delphi [-]
  if not Assigned(p) then
Es equivalente a:
Código Delphi [-]
  if p = nil then
Podes ampliar esta información en la propia ayuda de Delphi buscando por Assigned.



La ayuda de Delphi dice sobre Self :
Cita:
Within the implementation of a method, the identifier Self references the object in which the method is called.


No se debe llamar directamente a a Free desde el TFrame. La función PostMessage, pone un mensaje en la cola de mensajes que luego es capturado en el procedimiento CMRelease. En ese punto las taréas que pendientes que hubiera ya fueron procesadas, entonces sí llamamos a Free.

La constante CM_RELEASE esta declarada:
Código Delphi [-]
const
  CM_RELEASE = CM_BASE + 33;

Donde:
Código Delphi [-]
const
  CM_BASE = $B000;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 28-02-2013
Theluar Theluar is offline
Miembro
NULL
 
Registrado: ago 2011
Posts: 44
Poder: 0
Theluar Va por buen camino
Muchas gracias por tu explicación me servio para llenar algunos huecos de conocimiento que tenias, de todas formas me echare un clavado a la ayuda de Delphi, y pues tendré que Mejorar mi ingles ya que por este motivo se me ha dificultado un poco al encontrar la solución a mis problemas, Pero valla que en esta area se nececita mucho..

De nuevo muchas gracias por tu ayuda y por tus consejos y sugerencias.

Saludos.
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
Cómo destruir un label que he creado CarlosAlberto Varios 3 24-03-2012 14:05:11
Crear y destruir formas dinamicamente ing_gera C++ Builder 1 16-02-2007 00:45:23
como destruir toolbar creada por codigo? kinteam1 OOP 2 15-05-2006 00:31:48
Como destruir o liberar una forma maguib Varios 1 11-03-2005 19:39:02
como se puede destruir un objeto en ejecucion o_rlando20 OOP 1 14-05-2003 02:23:32


La franja horaria es GMT +2. Ahora son las 12:02:40.


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