Ver Mensaje Individual
  #8  
Antiguo 11-08-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Reputación: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Bueno. Me temo que en poco puedo serte de ayuda en este caso Kanvictor. Lo cierto es que me limité a copiar y pegar el código fuente que el compañero jorodgar planteo en este Hilo hace ya tiempo. Adapté un poco el código fuente, pero, yo también me pregunté entonces de dónde demonios salía el objeto "TDDEClientConv", que es el que se utiliza en el componente.

El caso es que me lo pregunté, pero, no fui más allá, es decir, no puedo ayudarte porque yo tampoco comprendo muy bien con qué estamos tratando, esa es la verdad. Sin embargo, he echado un vistazo a la ayuda de Delphi, y, aunque no he querido profundizar mucho más, a lo menos puede verse que dicho objeto (y otros relacionados) están documentados en la ayuda.

Entonces, ¿te estoy diciendo que eches tú mismo un vistazo a la ayuda para averiguar de dónde sale el objeto de que hablamos y cómo es que podemos utilizarlo para estos menesteres que nos ocupan? Pues así es la verdad. Es decir, partimos de la base de que ninguno de los dos sabemos con qué estamos tratando. ¡Así que bien podrías ser tú el que me aclarara a mí las cosas!

No vayas a pensar que quiero pasar del tema, que no es eso, de veras. Lo que pasa es que para mí esto es tan nuevo como para ti, y tendría que comenzar por aprender qué demonios significan las siglas "DDE"... En Google aparecen algunos resultados que no he mirado, pero, que ahí están. Buscando por DDE, por supuesto.

Grosso modo parece tratarse de una forma de comunicación entre distintas aplicaciones. De hecho, el componente "THistorialUrls" lo que hace es "comunicarse" con las ventanas de los distintos navegadores y, a partir de ahí, localizar lo que nos interesa: la URL "activa" en el navegador y también el título de la ventana, que a su vez es el título de la página Web que esté visitándose en el momento en que miramos por él.

Pero no sabría ir más allá y lo cierto es que no es cuestión de decirte, ah, pues sí, mira, esto funciona así y asao... no es eso. Tendría, como he dicho, que ponerme a investigar, y, se ve que no tengo muchas ganas de hacerlo y no sé cómo decirlo de un modo que no parezca demasiado mezquino por mi parte...

Creo que echando un vistazo a los resultados de Google (que he enlazado más arriba) así como en la ayuda de Delphi (puesto que parece que dichos objetos están documentados) podría llegarse a la certeza de conocer qué hacen exactamente esos objetos, qué significan realmente las siglas "DDE", etc., etc., etc. Pero, me temo que esto va a quedar por tu cuenta Kanvictor... y espero que no te moleste mi franqueza, que a lo menos viene acompañada de sinceridad.

Lamento no poder decirte más, a lo menos hoy por hoy, porque, como he dicho, estoy tan perdido en estos temas como puedas estarlo tú mismo.

PD. En cuanto al "case" a que te refieres... bueno. Lo cierto es del objeto "TDDEClientConv" (que parece significar Cliente DDE para conversaciones -con servidores DDE y tal vez con otros clientes DDE) no hacemos uso sino de su método "SetLink". Así, el "case" lo que hace es averiguar sobre qué navegador queremos trabajar, esto es, con qué navegador tenemos que "conversar" mendiante el objeto susomentado.

Según la ayuda de Delphi para dicho método "SetLink":

Cita:
Specifies the service and topic of a DDE conversation and attempts to open the link if ConnectMode is ddeAutomatic.
Dicho método requiere dos parámetros, conviene a saber, el Servicio con el que queremos "conversar", que en nuestro caso puede ser, literalmente "FireFox", y, un segundo parámetro de nombre "Topic", que, intuyo establece de qué queremos conversar con dicho Servicio. Este segundo parámetro siempre es el mismo (repito, para lo que nos ocupa, porque en la ayuda de Delphi existe un ejemplo sobre este método que utiliza otro "Topic" para "conversar" con cierta aplicación), digo que es: "WWW_GetWindowInfo".

Con eso parece ser que establecemos una comunicación con "FireFox" (por ejemplo) solicitándole información sobre la ventana del programa. Veamos un poco de código del "case" al que has hecho referencia:

Código Delphi [-]
    case navegador of
      nFireFox:
        if DDE.SetLink(rsFireFox, rsGWindowInfo) then
          SepararDatos(DDE.RequestData(rsRequestData),
            datos.Url, datos.TituloWeb);

La secuencia sería más o menos esta: ¿Es FireFox el navegador del que queremos averiguar información? En ese caso, establezcamos un "enlace DDE" con el programa FireFox y solicitémosle información acerca de su ventana (como queda dicho). El método "SetLink" devolverá "False" si hay algún problema, así que, en caso de que devuelva "True" lo que hacemos es utilizar la "respuesta" de la aplicación con la que estamos conversando: "DDE.RequestData".

Este último método "RequestData" requiere de una constante,... que no sé bien de dónde sale (recuerda que me limité en su día a copiar el código fuente del compañero susomentado), y es "0xFFFFFFFF", aunque yo la "guardo" en una variable un poco más "agradable", que, como puede verse, es "rsRequestData".

Bien. Una vez tenemos la respuesta de la aplicación con la que estamos conversando, lo que tenemos que hacer es "parsear" la respuesta, puesto que lo que nos interesa nos llega un poco "sucio". Para eso utilizamos el método "SepararDatos" de "mi componente", quien básicamente hace lo que digo, separar el polvo de la paja y ofrecernos la URL que estamos buscando y el título de la ventana (página Web que el usuario esté visitando).

Pero,... como ves, no sé mucho más que tú sobre "DDE" y las posibles "conversaciones" que podemos lograr mediante este "sistema" con otras aplicaciones. Creo que me estoy liando demasiado, así que lo dejo aquí, porque, me temo que he sido demasiado prolijo y tendré suerte si has llegado a leer hasta aquí sin pensar alguna vez, qué pesado el tío este, hay que ver que se enrrolla más que las persianas...

PD. En este resultado de la búsqueda en Google que antes he mencioando, podemos ver al menos una defición de las siglas "DDE":

Cita:
DDE (Dinamic Data Exchange, Intercambio Dinámico de Datos), un método de comunicación entre procesos implementado en Microsoft Windows y OS/2. Cuando se ejecutan simultáneamente dos o más programas compatibles con DDE, pueden intercambiar información y comandos. Por ejemplo, una hoja de cálculo con un enlace DDE a un programa de comunicaciones debe ser capaz de mantener actualizados los valores que presenta una hoja de cálculo con la información bursátil recibida por el canal de comunicaciones.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 11-08-2006 a las 15:47:40.
Responder Con Cita