![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
Gracias, Marcelo. Mi comprensión del manejo de interfaces no es mala, y está claro lo que dices. Pero rescato este punto:
Cita:
Me parece que la clase TObservers (tipo de la propiedad Observers de TComponent), debería llamar al método IObserver.Removed en su método RemoveObserver (tomando la interfaz IObserver del parámetro AIntf), pero como puede verse no ocurre tal cosa: Es probable que Embarcadero añada algún cambio después de la línea "LList.Remove(AIntf);", si es que no lo ha hecho ya, en las siguientes versiones. Alguien que tenga XE7 instalado, ¿sería tan amable de verificar si el método TObservers.RemoveObserver sigue igual o presenta alguna modificación en su código fuente? El archivo de código es System.Classes.pas. Muchas gracias. Al.
__________________
Tras casi seis años de trabajar para una empresa alemana como desarrollador Delphi, se vieron forzados a dejarme ir (temas presupuestales). Así que ahora estoy abierto a escuchar nuevas ofertas. |
|
#2
|
||||
|
||||
|
En Delphi XE7 está exactamente el mismo código que muestras en el post anterior, es decir, no han arreglado nada.
Saludos |
|
#3
|
||||
|
||||
|
Hola Al,
Lamentablemente no hay mucho que yo pueda hacer. Al no contar con esa versión de Delphi. Sabiendo que entre XE5 y XE7 no hubo mucho tiempo de salida era de esperarse que no hubiera algún cambio en dicha clase. Al menos que exista otra clase que implemente dicha interfaz y haga algo con él no sabría que pensar. Lo más probable es que exista para que el desarrollador pueda definir sus propios observadores y puede que le sea de utilidad un método Removed que deseen disparar cuando se elimina de la lista. No encuentro otra explicación. Recuerda que el que ellos no lo hayan usado o darle funcionalidad a ese método... tu puedes tener tu Observer con dicha funcionalidad. Para evacuar esta duda habría que buscar en la VCL y/o FMX si por casualidad no hay alguna clase que implemente dicha interfaz. Saludos, |
|
#4
|
||||
|
||||
|
Gracias por la confirmación, ElKurgan. En la empresa todavía no hemos adquirido la actualización a XE7, pero estoy seguro que lo haremos en un par de meses.
![]() ------ Gracias Marcelo. En la VCL/FMX sí hay un par de clases que implementan la interfaz IObserver. Se trata de TBindObserver y TEditLinkProxy, de las cuales no hay documentación por el momento. El código de los métodos Removed de dichas clases realizan acciones que van en la lógica de lo que hemos venido comentando. Incluso el segundo de ellos —TEditLinkProxy.Removed— termina llamando al método Removed de una interfaz derivada de IObserver (IEditGridLinkObserver), pero no parece ser llamado por nadie. Aquí podría haber recursividad pero, como es lógico, todo proceso recursivo debe iniciar por una tangente de entrada que para el método IObserver.Removed parece no existir. Sigo pensando que al método TObservers.RemoveObserver le falta ese desencadenamiento. La buena noticia es que este es virtual, y ya me adelanté a crear una clase derivada TghObservers, con la suerte de que el método que se encarga de crear la propiedad Observers de TComponent (GetObservers) también es virtual. Lo anterior quiere decir que puedo definir clases de componentes donde su propiedad Observers, declarada de tipo TObservers, sea un objeto TghObservers, asegurándome con ello de que el método Removed sea llamado para cada interfaz observador que sea eliminada de esa lista. Lo malo es que Delphi todavía no tiene redefinición de clases (herencia insertada), con lo cual me ahorraría escribir varias redefiniciones del método GetObservers, prácticamente repitiendo el mismo código, cuando haya que derivar de diferentes clases nativas descendientes de TComponent (lo que es bastante común). Este es mi borrador del método virtual RemoveObserver redefinido en TghObservers. De paso he agregado el evento OnObserverRemoved, a semejanza del evento OnObserverAdded ya presente en la clase padre. Salvo que se arroje más luz sobre el tema y haya que replantearlo, esta pretendida mejora estaría disponible en la primera liberación de GH Freebrary para Delphi XE5 a XE7. ![]() De todas formas agradeceré cualquier otro dato que tengan. Un saludo. Al González.
__________________
Tras casi seis años de trabajar para una empresa alemana como desarrollador Delphi, se vieron forzados a dejarme ir (temas presupuestales). Así que ahora estoy abierto a escuchar nuevas ofertas. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Duda sobre interfaz gráfica de sistema | Spk2000ar | Varios | 1 | 13-05-2011 19:34:02 |
| OJO NOVATOS: Excelentes artículos sobre la interfaz de usuario. | AzidRain | Varios | 5 | 27-03-2008 19:16:45 |
| Problemas para desplegar información detallada | Nelly | Varios | 20 | 10-04-2007 19:54:21 |
| Necesito documentacion detallada sobre ECO | edalmasso | Varios | 2 | 12-01-2006 09:47:57 |
| Información sobre DOA | Ana | Conexión con bases de datos | 3 | 05-07-2003 14:11:13 |
|