Lunes 18 de Noviembre de 2024, 11:36
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
Visual Basic 6.0 e inferiores
(Moderador:
F_Tanori
) »
Comprobar Si Existe Un Ocx
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Comprobar Si Existe Un Ocx (Leído 3233 veces)
tiquinho
Miembro activo
Mensajes: 96
Comprobar Si Existe Un Ocx
«
en:
Jueves 6 de Mayo de 2004, 12:10 »
0
Buenas genios!
Tengo una pequeña duda:
Tengo un programa en el que uso dos OCX de comunicación específicos de los dos programas con los que se comunica. Mi pregunta es: ¿Existe la posibilidad de ejecutar mi programa en un pc donde no se han instalado alguno de los otros programas(o los dos), comprobar que no existe el OCX en cuestión para ejecutar o no las funciones que utilizo?
Lo que pasa es que no puedo incluir el OCX como archivo de dependencia(creo que es algo así) pq si lo sobreescribe sobre el que existe, el otro programa no lo reconoce y no funciona.
Otra posibilidad sería crearme mi propio OCX que se comunicase con el OCX original, pero me gustaría sabes si existe la posibilidad de hacer lo que pregunto
Gracias
Tweet
Brroz
Miembro de PLATA
Mensajes: 1058
Re: Comprobar Si Existe Un Ocx
«
Respuesta #1 en:
Lunes 10 de Mayo de 2004, 17:52 »
0
Hola tiquinho.
Puedes hacer algo como lo que te cuento:
Cuando instales la aplicación, comprueba si existen previamente en el path donde vas a instalar los ocx que necesitas. Si están presentes, desregístralos y renombralos si los quieres conservar. Copia tu versión de ocx con la aplicación. Registra los ocx y listo.
Para registrar/desregistrar los componentes usa algo así:
Registrar
Código: Text
Shell "Regsvr32 /S C:\Ruta\Archivo.ocx"
Desregistrar
Código: Text
Shell "Regsvr32 /U /S C:\Ruta\Archivo.ocx"
El modificador /S sirve para registrar de forma silenciosa, es decir, sin que salga el típico mensaje de aviso.
Suerte.
tiquinho
Miembro activo
Mensajes: 96
Re: Comprobar Si Existe Un Ocx
«
Respuesta #2 en:
Lunes 10 de Mayo de 2004, 18:44 »
0
hola Brroz:
Creo que no he hecho bien la pregunta, así que lo volveré a intentar:
El tema es que no necesito instalar el ocx, porque ya lo instala el programa con el que me comunico(el que debería estar instalado), y si no está instalado, no necesito para nada el ocx, por lo que en principio no tengo que instalarlo yo. Aquí es donde yo me pregunto:¿pasará algo si instalo mi programa(sin el ocx) en un pc donde no estea presente el ocx?
A lo mejor la solución es declarar el objeto de ese ocx dinámicamente, comprobando primero que existe en el pc,no? ¿Sería posible?
Por cierto,cuando dices :"cuando instales la aplicación..." ¿a qué refieres exactamente? Yo hasta ahora había pensado usar el Asistente de Empaquetado que venía con el Visual 6.0, aunque después de ver algunas conversaciones del foro cambio al Visual Studio Installer,¿permite este hacer más cosas?(digo como crear archivos, o escribir en el registro sólo al instalar, sin tenerlo que hacer en el programa)
Gracias por contestar!
Brroz
Miembro de PLATA
Mensajes: 1058
Re: Comprobar Si Existe Un Ocx
«
Respuesta #3 en:
Martes 11 de Mayo de 2004, 15:24 »
0
Hola tiquinho.
Si es posible que no exista un ocx que usas en un formulario determinado, y no deseas instalar tu ese ocx, debes supervisar el error que se producirá en el momento en que intentes abrir ese formulario (si no me equivoco un error 339). Algo así:
Supongamos que este es el formulario principal desde el que intentas abrir el formulario con el ocx en cuestión (llamémosle Form2, por ejemplo). Supongamos pues que Form2 se abre al pulsar un botón de Form1. Imaginemos también que para el caso de que no exista el ocx, en vez de un formulario Form2, abriremos un formulario Form3 con otra historia...
Código: Text
Private Sub Command1_Click()
On Error Goto Err_Command1_Click
Dim frmX As Form, ind1 As Boolean
Set frmX = New Form2
frmX.Show
Goto Exit_Command1_Click
Open_Form3:
Set frmX = New Form3
FormX.Show
Exit_Command1_Click:
Set frmX = Nothing
Exit Sub
Err_Command1_Click:
If Err.Number = 339 And Not ind1 Then
ind1 = True
Resume Open_Form3
Else
MsgBox "(" & Err.Number & ") " & Err.Description, vbCritical, "Command1"
Resume Exit_Command1_Click
End If
End Sub
Cuando decía eso de "Cuando instales la aplicación..." se me estaba yendo un poco la olla y estaba en la situación de que tú instalabas la aplicación mediante un programilla de factura propia .Realmente es algo muy sencillo, no sé porque a veces hay tantas historias con los instaladores... obtener el archivo de dependencias con el empaquetador de vb e identificar los archivos que realmente hacen falta (y esto si es que ya no lo sabemos de antemano) y hacer un pequeño programa que cree directorios, copie archivos, registre componentes, etc.
Espero que el ejemplo de ahora sí te sea de ayuda.
Suerte.
tiquinho
Miembro activo
Mensajes: 96
Re: Comprobar Si Existe Un Ocx
«
Respuesta #4 en:
Martes 11 de Mayo de 2004, 17:55 »
0
Gracias por echarme un cable. Brroz, aunque creo que tendré que buscar otra forma de solucionarlo, porque ese ocx lo utilizo en el formulario principal de mi programa, por lo que supongo que será más complicado aplicar lo que me pusiste, o ¿sería posible hacer lo mismo, pero en vez de antes de lanzar un Form2, declarar mi objeto?
Como ves, sigo empeñado en declarar el objeto en tiempo de ejecución, pero no sé como podría hacerlo, ahora mismo lo tengo insertado en el formulario en tiempo de diseño, ¿hay forma de hacerlo en tiempo de ejecución? ¿Sería algo así?:
Código: Text
Private Sub Form1_Load()
On Error Goto Err_Ocx
Static var as New MyOcx
Exit Sub
Err_Ocx:
MsgBox "Ocx no instalado", vbCritical
End Sub
Esto era lo que tenía pensado hacer al principio, pero no me dejaba, por lo que inserté el objeto directamente y me propuse solucionarlo después.
¿Que tipo de objetos puedo usar con el New?, porque he probado y sólo me deja con los form y pocos más
Muchas gracias por todo
Brroz
Miembro de PLATA
Mensajes: 1058
Re: Comprobar Si Existe Un Ocx
«
Respuesta #5 en:
Martes 11 de Mayo de 2004, 18:29 »
0
Hola.
Entonces veo dos posibles soluciones, aunque ninguna de las dos acaba de gustarme mucho:
1- Crea dos formularios 'principales' uno con el ocx y otro sin él. Aplica el código de antes pero desde una sub 'Main' que debe ser el inicio de la aplicación. Esta solución es redundante pero efectiva 100%.
2- Puedes intentar añadir dinámicamente el control ocx, pero con unas consideraciones...
Fíjate en este código para un formulario: añade un CommandButton en tiempo de ejecución.
Código: Text
Option Explicit
Private WithEvents cmd1 As CommandButton
Private Sub Form_Load
Set cmd1 = Me.Controls.Add("VB.CommandButton", "cmd1")
cmd1.Visible = True
cmd1.Caption = "púlsame"
End Sub
Private Sub Form_Unload(Cancel As Integer)
Set cmd1 = Nothing
End Sub
Private Sub cmd1_Click()
MsgBox "Me pulsaste"
End Sub
Podrías hacer lo mismo sustituyendo el tipo CommandButton por el de tu ocx, pero si el ocx no existe, el programa casca en la declaración de la variable cmd1, con lo que estás en la misma de antes: sólo puedes interceptar este error desde un método que llame al formulario.
Una posible solución a esto podría ser declarar la variable como 'Object' e interceptar el posible error en el evento Load del form. Esta solución sería ideal si no fuera porque no podrás interceptar los eventos del control (una variable 'Object' no se puede declarar 'WithEvents'), sin embargo, si sólo utilizas ciertos métodos del control y no te importan los eventos que puede generar el ocx, estás de suerte, este es la forma que mejor se adapta a tus necesidades... El código quedaría algo asi:
Código: Text
Option Explicit
Private miOcx As ClaseMiOcx
Private Sub Form_Load
On Error Goto Err_Form_Load
Set miOcx = Me.Controls.Add("Proyecto.ClaseMiOcx", "NombreDeControl")
miOcx.Visible = True
miOcx.PropiedadX = "algún valor..."
Err_Form_Load
If Err.Number = 999 Then 'Ahora mismo no sé el nº de error, pero se sabe enseguida provocándolo...
Msgbox "No cuentas con la funcionalidad de tal ocx..."
Else
MsgBox "(" & Err.Number & ") " & Err.Description
Unload Me
End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
Set miOcx = Nothing
End Sub
Luego claro está, en el código deberías habilitar o no ciertas opciones, controlar si la variable miOcx = Nothing y cosas por el estilo
A ver si esto te ayuda algo más. Suerte.
tiquinho
Miembro activo
Mensajes: 96
Re: Comprobar Si Existe Un Ocx
«
Respuesta #6 en:
Martes 11 de Mayo de 2004, 20:24 »
0
Muchisimas gracias!
Creo q tengo la suerte de que no me hacen falta los eventos, así que aplicaré lo segundo que me dices. Muchisimas gracias otra vez, en serio, gracias a ti, primero sé más cosas, y segundo y más importante, no tengo que cambiar tanto mi programa, que ya tenía más modificaciones encima, casi necesito un mapa pa entenderlo yo, jeje
Brroz
Miembro de PLATA
Mensajes: 1058
Re: Comprobar Si Existe Un Ocx
«
Respuesta #7 en:
Miércoles 12 de Mayo de 2004, 12:47 »
0
Hola tiquinho.
Supongo que te habrás dado cuenta de los gazapos que tiene el código (cosa de hacer las cosas con prisas y al vuelo). Para que quede más claro y no dé lugar a confusión, aquí lo escribo de nuevo. Me alegra que la solución te sea útil.
Código: Text
Option Explicit
Private miOcx As Object
Private Sub Form_Load
On Error Goto Err_Form_Load
Set miOcx = Me.Controls.Add("Proyecto.ClaseMiOcx", "NombreDeControl")
miOcx.Visible = True
miOcx.PropiedadX = "algún valor..."
' .
' .
' .
Exit Sub
Err_Form_Load
If Err.Number = 999 Then 'Ahora mismo no sé el nº de error, pero se sabe enseguida provocándolo...
Msgbox "No cuentas con la funcionalidad de tal ocx..."
Else
MsgBox "(" & Err.Number & ") " & Err.Description
Unload Me
End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
Set miOcx = Nothing
End Sub
Chao.
tiquinho
Miembro activo
Mensajes: 96
Re: Comprobar Si Existe Un Ocx
«
Respuesta #8 en:
Jueves 13 de Mayo de 2004, 11:49 »
0
Tío eres un fenómeno, hasta te corriges a ti mismo
La verdad es que no me había dado tiempo a probarlo
pero en cuanto pueda lo acabo, que es lo único que me queda de esa parte.
Muchas gracias de nuevo!
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
Visual Basic 6.0 e inferiores
(Moderador:
F_Tanori
) »
Comprobar Si Existe Un Ocx