Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #31  
Antiguo 08-04-2011
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 20
rgstuamigo Va por buen camino
Cita:
Empezado por Al González Ver Mensaje
.. Ignoraba que Delphi "permitiese" referencias de escritura en el parámetro Self (para mí siempre ha sido una referencia de solo lectura), pero no me extraña en absoluto que el compilador la deseche sin generar instrucción máquina alguna para esa sentencia (lo puedes verificar con la ventana CPU).
...
Muy interesante tu interversion amigo Alberto, para serte franco yo tambien ignoraba la cuestion de que el parámetro Self era solo para lectura, pero la cuestion es que Delphi no se queja al momento de hacer:
Código Delphi [-]
Self:=nil;
Si es solo para lectura y ha sido pensado para eso, pues creo que debería mostrar un error¿verdad? o no permitir directamente tal instruccion y es por eso mi confucion.
Como dije claramente en mi anterior post no tengo una solucion para lo que se pretendía hacer, el hecho de que hubiera hecho uso de Self, fué solo un intento y creo que lo explique claramente. Pero me llama la atencion el código que propones en tu clase "TMagiaClientDataSet"
Código Delphi [-]
Constructor TMagiaClientDataSet.Create (AOwner :TComponent);
  Begin
    Inherited Create (AOwner);
    AutoApplyDetails := True;
    AutoCancelDetails := True;
    AutoEdit := True;
    ChangeCheckFieldTypes := [ftString, ftSmallint, ftInteger, ftWord,
      ftBoolean, ftFloat, ftCurrency, ftBCD, ftDate, ftTime, ftDateTime,
      ftAutoInc, ftFixedChar, ftWideString, ftLargeint, ftVariant, ftGuid,
      ftTimeStamp, ftFMTBcd];

    If DataSets = Nil Then
      DataSets := TDataSetList.Create;

    DataSets.Add (Self);//<- muy pero muy interesate 
  End;
La verdad que me has abierto nuevas perpectivas.., aunque no exactamente siguiende ese mismo camino. por ejemplo:
Cita:
Advertencia:
Lo que voy a exponer a continuacion no significa que pueda llegar a una solucion concreta del tema, sino mas bien hacer conocer una "idea" para quizas poder implementar una solucion desde otro punto de vista.
Todos sabemos que el problema es lo siguiente:
Teniendo creado(instanciado) un formulario de una determinada clase de la siguiente forma:
Código Delphi [-]
if not Assigned(MyForm) then //<- favor poner atencion a ésta linea
   MyForm := TChildForm.Create(Application);//MyForm en una variable privada

MyForm.Show;
y sabiendo que en la clase TChildForm en su evento OnClose tenemos
Código Delphi [-]
procedure TChildForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caFree;//ya sabemos que está linea provocará un liberacion del formulario atraves del método Release.
end;
Ahora el asunto es: ¿cómo lograr saber que el objeto al que hace referencia la variable "MyForm" ha sido liberado?
OJO: todos sabemos que cuando un objeto se libera, pues la referencia que le apuntaba de igual forma sigue referenciando a la misma direccion de memoria donde estaba el objeto.Es decir el espacio de memoria del objeto se libero pero su apuntador(referencia) sigue apuntadolo.
Pues ..en lo anteriores post hemos discutido que la solucion sería poner al apuntador en nulo (nil)despues de la destruccion del objeto y luego para saber si la referencia apunta a un Objeto válido podriamos poner
Código Delphi [-]
if MyForm=nil then
...
o bien usando la funcion Assigned
Código Delphi [-]
if not Assigned(MyForm) then
...
Ahora vá la pregunta ¿Existe alguna forma de determinar que la referencia de un objeto apunta a un objeto no destruido sin estar poniendola a nulo cada vez que se libera el objeto?. Es decir.. yo como programador pienso y digo hipoteticamente:"No quiero que la referencia del objeto se ponga en nulo al momento de destruirse el objeto , más bien quiero que siga apuntado a la misma direccion aunque el objeto ya esté liberado"
Pero si más adelante en mi código quisiera saber si el objeto fue destruido o nó ¿como lo haría? ¿? qué código debiera poner en lugar de
Código Delphi [-]
if MyForm=nil then// éste código ya no serviría ya que MyForm no apunta a nulo pero el objeto ya fué liberado
...
o bien
Código Delphi [-]
if not Assigned(MyForm) then //tampoco sirve
...
¿Cómo lo soluciono?¿Delphi posee algun mecanismo o funcion que me permita solucionarlo?
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
 



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
Forms: FreeAndNil ó Release y la validación Assigned? jbautista Varios 13 09-02-2010 17:33:03
Assigned y Free gluglu Varios 4 14-05-2007 21:03:37
Problemas FreeAndNil OscarG OOP 4 09-11-2005 12:48:46
Free Pascal 2.0 marcoszorrilla Noticias 6 19-05-2005 12:04:51
Componente free... Mauro® Varios 10 12-06-2004 13:15:24


La franja horaria es GMT +2. Ahora son las 19:53:53.


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