PDA

Ver la Versión Completa : Componente OCX de VB en Delphi


Aprendiz
25-01-2005, 15:16:47
Buenas a todos.

El problema es que tengo un OCX que me han suministrado que está desarrollado en VB por lo que me han dicho. Me lo han pasado con un programa de ejemplo también desarrollado en Visual y funciona a la perfección. Es un OCX de conexión con una cerradura electrónica de proximidad.

Bueno para delphi lo que hago es irme a Components - Import ActiveX Control y pulso Install. El procedimiento habitual vamos. Lo instalo en el paquete de users y en teoría ya tendría que funcionar e instalarme el componente en la paleta ActiveX. Bueno pues no lo hace, no da ningún error se añade la nueva unit_TLB que crea el delphi pero no registra nada.

Este error ya ha salido por los foros más de una vez, he estado repasando antiguos mensajes, pero nunca se le dio una solución.

Repasando el _TLB que me genera el delphi, cosa que hace de manera automática, he podido ver que no genera la clase para crear un componente en Delphi, simplemente registra lo que tiene del OCX pero no crea nada nuevo, con lo cual no Registra tampoco nada en la paleta ActiveX.

La pregunta va más orientada a VB supongo, por que me da que hay que generar las OCX en VB de alguna determinada manera para que realmente sea entendible por el resto de lenguajes y no ocurra esto. Pero claro no estoy seguro.

¿Sabeis como se puede arreglar esto?

PD: Ahora estoy intentando trabajar directamente con el OCX registrado e instalado a través de código con el 'CreateOleObject', pero no acaba de funcionar, además no se como capturar los Eventos que genera el componente OCX. Si se os ocurre algo por favor compartidlo llevo ya casi dos semanas con la broma.

Gracias por adelantado...

Neftali [Germán.Estévez]
25-01-2005, 15:46:16
Prueba a hacerlo desde:
Project/Import Type Library/Add... y luego Install

Además prueba a registrar el OCX con regsvr32.exe por si es un servidor.

Aprendiz
25-01-2005, 16:07:45
Perdón, no lo puse pero el resultado es exactamente el mismo, ya lo he probado.

También había registrado la clase.

Saludos,

orfeo
12-02-2006, 23:41:36
Buenas a todos.

El problema es que tengo un OCX que me han suministrado que está desarrollado en VB por lo que me han dicho. Me lo han pasado con un programa de ejemplo también desarrollado en Visual y funciona a la perfección.

Tengo el mismo problema con un ocx creado en VB6 (creado con la opcion Control ActiveX). Uso Delphi 6, W2k+SP4

Realizo una aplicacion VB6, y el ocx anda perfecto.

El ocx solo tiene dos funciones:

Public Function suma(a As Double, b As Double) As Double
Public Function retString() As String

pero cuando lo importo desde Delphi desde la opcion "import ActiveX/component" me sucede lo mimos, me crea la TLB.pas, en ella puedo ver las funciones exportadas de ocx en las interfaces "_UserControl1 = nterface(IDispatch)" y " _UserControl1Disp = dispinterface"

pero no veo ninguna clase, ni tampoco conponente nuevo en la paleta de componentes, pero me dice que el componente creado esta instalado.
Al no haber dicha clase, el componente no se registra en la seccion de paletas.

Tambien probe "Import Type Library" pero es el mismo resultado.

Tambien he estado dando vueltas for foros, pero nada...

Algo raro es que si veo el .ocx con Dependency Walker solo veo que exporta DllRegisterServer, DllUnregisterServer, DllCanUnloadNow,DllGetClassObject. no veo a suma y retString.
Otra cosa rara es que cuando le doy instalar al paquete que envuelve al Active X (creado por Delphi), me dice que se instalo satifactorimente, pero no me indica los coponente registrados. No me registra el ActiveX.


Y estoy estancado...

Aprendiz
13-02-2006, 08:25:31
Hola,

Pues siento no poder ayudarte pero yo no pude solucionarlo finalmente. Después de estar dandole vueltas unos cuantos dias acabé por hacer una solución intermedia traspasando información entre un programa VB y el de delphi mediante ficheros de texto. En fin, si alguien sabe la solución de todas formas, que la diga que tengo curiosidad. :)

Saludos.

JuanPa1
15-05-2006, 18:44:34
Hola, yo igual tengo el mismo problema pero creo que estoy cerca de resolverlo. El asunto es que el componente que importas es un componente no visual, es decir, no se va a poner en la paleta de componentes. Lo que podrias hacer y lo que yo estoy haciendo es utilizando la clase que me genera, osea el .pas y esa clase tienes que declararle un objeto o instancia para luego ya poder utilizar las funciones y procedimientos que tiene dicho objeto....

FerCastro
15-05-2006, 21:01:24
Yo tuve el mismo problema, un DLL (OCX) no visual y ya lo hice trabajar en Delphi 2005. Si gustas contactarme a mi correo:

gersomfernando@gmail.com

Con gusto te puedo ayudar.

Saludos!!

Fernando

rodrigo
09-02-2007, 22:19:15
Hola,

No se si ya lo solucionaron, pero por las dudas, les cuento que en los newsgroups de borland encontré la forma de hacer que Delphi genere la clase y la instale en la paleta de activex. Ahora puedo seleccionar el componente y ponerlo en un form.

Bueno, hay que ir al menu
tools->environment options->type library

y tildar "Ignore special CoClass Flags when importing", y tildar todas las subopciones necesarias como "Can Create", etc... hasta que genere el código de la clase e instale el componente en la paleta de componentes.

Espero les sirva

Saludos

FerCastro
09-02-2007, 23:36:53
No se si tuviste tiempo de revisar tu correo, por ahi te mandé algo.

Saludos

Fernando Castro
México, D.F.

hugohiram
12-02-2007, 19:55:20
Hola

Yo tambien estoy teniendo el mismo problema con un DLL (OCX) no visual, he logrado instalarlo en una máquina con Delphi 7 y puedo verlo en la paleta de activeX, pero al hacer la llamada no funciona, ahora estoy intentando instalarlo en una pc con Delphi 2005 y no puedo hacerlo correctamente, lo importo a "activeX", pero no veo este grupo en la paleta, intento también hacerlo en standar y otros, pero no se agrega a ninguno.

He hecho los pasos de rodrigo pero no logro instalarlo bien.

gracias.

FerCastro
12-02-2007, 20:30:42
Me puedes mandar tu dirección de correo para enviarte unas imágenes de cómo hacerlo?

Saludos!!

Fernando Castro
México, D.F.
gersomfernando@gmail.com

rodrigo
19-02-2007, 16:55:07
Hola,

Yo tampoco podia hacerlo funcionar hasta que encontre esta pagina:

http://www.x64.com/pt/vbdelphi.html

esta en ingles, pero basicamente es cambiar en el .pas que te generó (XXX_TLB.pas) la definicion de la clase, metodos y propiedades que apuntan al "interface" por el "dispint".

Me olvidaba, trabajo en Delphi7.

Otra mas, si a alguien le sirve copio .pas generado por Delphi y .pas modificado.

Espero te sirva

Saludos
Rodrigo

yacolca2008
13-06-2007, 03:42:09
Buenas, quisiera saber si despues de importar un ocx creado en visual basic puedo usar el ejecutable sin necesidad de tener el ocx a su costado...

Yo he utilizado delphi 5 y no me sale ..
Utilize la 6 Y ME SALIO UN ERROR DE IMPORTACION
En la 7 salio correctamente

ahora cuando borro el ocx sale un error en el ejecutable..

No hay alguna forma de que el ocx ya no se use despues de compilarlo desde delphi ?

Neftali [Germán.Estévez]
13-06-2007, 11:15:20
quisiera saber si despues de importar un ocx creado en visual basic puedo usar el ejecutable sin necesidad de tener el ocx a su costado...

Hola, antes de nada te recomiendo que leas la Guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php).
Si tienes una nueva pregunta no continues con un hilo abierto,aunque esté relacionado, abre un nuevo hilo.

En cuanto a la pregunta, la respuesta es no. Delphi al importar un OCX, crea una interficie para acceder a ese componente de forma cómoda, una capa intermedia, pero el que realmente hace el trabajo sigue siendo el OCX, por lo tanto es imprescindible que lo tengas.