• Viernes 8 de Noviembre de 2024, 07:16

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - DeathWatch

Páginas: [1]
1
JavaScript / Re: alert(elemento.id) o (elemento.value) no regresa valor
« en: Domingo 7 de Marzo de 2010, 06:59 »
Resuelto...  :good:

Pronto escribiré la solucion...  ;)

2
JavaScript / alert(elemento.id) o (elemento.value) no regresa valor
« en: Viernes 5 de Marzo de 2010, 07:18 »
Hola, que hay, como estan  :)

Tengo una duda que no consigo solucionar. Ojala me puedan ayudar...
 
Les explico

Tengo una aplicacion HTA. En una seccion tengo lo siguiente:

Código: Text
  1. for (i=0; i<unvalor; i++)
  2.         {
  3. ArrSelec = ArrSelec + '<input type="checkbox" name="SelecOpt" id="' + i +'" checked> | <span name="IdAttr" value="valorx">' + Valor1 + '</span> | ' + Valor2 + '<br>';
  4.         };
  5.  
  6.  

Lo anterior es el problema, lo que escribo en la siguiente linea es solo para explicarme mejor.
Código: Text
  1. Sector2.innerHTML = 'Capacidad: ' + SizeF_F + ' KB<br>---------------------------<br>' + ArrSelec;
  2.  
Con esto muestro en una seccion de la aplicacion, un inputbox, un Valor1, y un Valor2.

Ahora, tengo el siguiente problema. Tengo una funcion:
Código: Text
  1. function CopiDats()
  2. {
  3. var IdSelecOpt = document.getElementsByName('SelecOpt');
  4.  
  5. for (i=0; i<IdSelecOpt.length; i++)
  6.     {
  7.     if (IdSelecOpt[i].checked == true)
  8.         {
  9.         alert(IdSelecOpt[i].id);
  10.         }
  11.     }
  12. }
  13.  
  14.  
  15.  
  16.  
  17.  

Esto si me funciona y me muestra el id de los elementos seleccionados.

Pero si escribo:
Código: Text
  1. function CopiDats()
  2. {
  3. var x = document.getElementsByName('IdAttr');
  4. alert(x.length);
  5. }
  6.  
Me regresa 0, cuando en si hay varios elementos <span name="IdAttr">

Si me expliqué?

Gracias de antemano por su ayuda  :P

Un saludo  :hola:

3
Perfecto!!! Mas que entendido  :good:  :good:  :good:

Muchas gracias Nebire, por tus aclaraciones.
Igual, gracias por tu tiempo.

Por aqui andaremos, consultando, y aportando (dentro de lo que se sepa y se pueda  :P)

Un saludo
Excelente semana :beer:

4
Hola que hay  :D

Ps antes que nada, gracias otra vez Nebire por tu tiempo y tus respuestas.
Me has aclarado varias cosas nuevamente, las cuales me serviran de mucho.

Dejame decirte tambien que esto de las clases es practicamente nuevo para mi  :(
Estuve buscando lo que me sugeriste del patron Singleton (instancia unica) y lo que alcance a entender es que se usa para evitar mas de una instancia a un objeto, pero que se pueden hacer varias referencias a ese objeto, usando esa unica instancia, lo que me hace pensar que usando un dll igual se podria crear una clase, y hacer varias referencias a un objeto por medio de tal clase, y que funcione como el ejemplo de multi-threading que escribi, pero no me queda nada claro... por que si? por que no?...  :angry:  :hitcomp:
Simplemente sobrepasa mi nivel de conocimiento  :argh:

Pero bueno...

Por otro lado, seguire buscando el metodo GetObject, pues no me queda claro para que sirve entonces el primer parametro...
Citar
DeathWatch escribió:
Si no lo registro, usando Set Ejec_1 = GetObject("C:Documents and SettingsDeathWatchMis documentosXEjecutor.exe", "XProyEjec.XClsEjec"), funcionaría?
Set Ejec_1 = GetObject("C:Documents and SettingsDeathWatchMis documentosXEjecutor.dll", "XProyEjec.XClsEjec")

Citar
Nebire escribió:
Luego, si por ejemplo tu aplicación opera con un tipo de archivo cuya extensión fuera pongamos ".banco" , podrías utilizar la función getobject para crear el objeto cargando ya el archivo indicado...
Código: Visual Basic
  1. dim miObjeto as object
  2. Set miObjeto= GetObject("C:archivo.banco", "MiproyectoActivexexe.Suclase")
  3.  

Y por tanto como podrás ver, nada tiene que ver esta ruta con la ruta donde se localiza el exe activeX
"MiproyectoActivexexe.Suclase" hace referencia al proyecto y clase del ActiveX, pero "C:archivo.banco", donde se carga, que carga (las clases del archivo .banco?), para que sirve el 1er parametro si el 2do no hace referencia a él, si es para que al ya estar cargado, posteriormente se pueda instanciar por ejemplo ("MiPoryectoArchivoBanco.Subclase"), etc?

 :brickwall:  :brickwall:

En fin... seguire investigando...

Te agradezco mucho tus aportaciones. Me han servido de mucho.
Ya le agregaré tales mejoras a mis progamas.

Un saludo  :)

5
Hola de nuevo, ya ando por aqui otra vez  :P

Nada mas para comentar y consultar algunas cosas:

En
Citar
Nebire escribio:
Eres tú quien pregunta y tienes dudas... yo lo tengo muy claro.
:huh:
Yo se que tu lo tienes claro, puesto que me explicaste y me ayudaste a resolver mi problema.
Me referia a si no habia enredado mucho comentando lo que estaba haciendo, de forma que solo yo me estuviera entendiendo, y si habia explicado esta vez la raiz del problema que tenia.

Pero bueno, es igual  ^_^ , nada mas lo comenté, porque desde luego no me referia a que no supieras lo que me estabas explicando, o que no entendieras lo que estaba yo haciendo, sino que si lo que habia escrito, era entendible...  :P

Cambiando de tema...

Creo que si tengo un error de concepto  :P
Que bueno que me lo dices.
Y creo que ese error lo tenemos muchos, por lo que he visto en muchos foros  :o
Ya estuve echandole un ojo a ROT y a GetObject.
A ver si entendi bien lo que me comentabas... pongo un ejemplo
Hice un VBScript con el codigo:
dim fso, carp

Código: Visual Basic
  1. set fso=GetObject("", "Scripting.FileSystemObject")
  2. set carp=fso.GetFolder("C:Documents and SettingsDeathWatchMis documentosScripts")
  3. x=carp.Name
  4. msgbox x
  5. set fso=Nothing
  6. set carp=Nothing
  7.  

Me mostró el nombre de la carpeta.
Esto es porque en ROT ya existe la clase Scripting.FileSystemObject? Es a lo que te referías?
En mi ejemplo, al  registrar el Exe ActiveX con /RegServer, debo usar GetObject en lugar de CreateObject?
Si no lo registro, usando Set Ejec_1 = GetObject("C:Documents and SettingsDeathWatchMis documentosXEjecutor.exe", "XProyEjec.XClsEjec"), funcionaría? (Esto lo voy a probar personalmente, pero si no funciona, si me pudieras comentar la razon, porfas)

Una ultima pregunta  :P
Usando el ejemplo que puse, si en lugar de un Exe ActiveX fuera un Dll ActiveX, tal cual con los objetos form y timer y demas, he indicando en las propiedades del proyecto, Subprocesos independientes, si escribo
Set Ejec_1 = GetObject("C:Documents and SettingsDeathWatchMis documentosXEjecutor.dll", "XProyEjec.XClsEjec")
podria funcionar? respetando el multi-threading?

Realmente aunque el programa final se va a ejecutar en un equipo diferente, el programa principal y el ActiveX, ya sea Exe o Dll, van a estar siempre en una usb, en la misma ruta. Por eso lo pregunto.
(Por cierto, es para facilitar un proceso en el trabajo... no es una herramienta de hacking, ni nada por el estilo :P )

Te agradezco nuevamente tu tiempo y tus comentarios.
Me han servido de mucho

Buen fin de semana  :good:

6
Amigo(a), mil mil gracias. No sabes cuanto te lo agradezco!!!  :D   :D   :good:   :beer:

Te juro que lo siguiente que te escribo no es para hacerte la “barba”, como decimos aquí en Mexico. Con tus ejemplos he entendido mejor esto de las clases, y la clave para que se solucionara mi problema, fue el ultimo comentario que hiciste:
Citar
fíjate que no señalo ninguna ruta... ¿ por qué ? te preguntaras... porque cuando he compilado el proyecto automáticamente se ha registrado la librería.

Y la solucion fue:
Código: Visual Basic
  1. Dim Ejec_1 As Object
  2. Set Ejec_1 = CreateObject("XProyEjec.XClsEjec")
  3. Ejec_1.Ejecutor 1
  4. Set Ejec_1 = Nothing
  5.  

O sea, usando tu ejemplo, yo lo que estaba haciendo era:
Set Ejec_1 = CreateObject("C:Documents and SettingsDeathWatchMis documentos ExeActiveX.exe")
en lugar de escribir:
Set Ejec_1 = CreateObject("ExeActiveX2.EXejemplo")
siendo que ya la habia registrado en:
Shell ("C:Documents and SettingsDeathWatchMis documentosExeActiveX.exe /RegServer")

Mira, te escribo todo el rollo que estaba haciendo, hasta que me trabé…

Buscando un tipo multi-threading en VB, me encontre con la siguiente pagina:
todoexpertos.com/categorias/tecnologia-e-internet/programacion/visual-basic/respuestas/168589/se-pueden-ejecutar-consultas-en-paralelo
donde se explica como realizar varias consultas al mismo tiempo.
Ese ejemplo me sirvio para darme una idea de cómo ejecutar varias aplicaciones al mismo.

Entonces realice lo siguiente:
1.- Abri un Proycto Exe ActiveX, con nombre XProyEjec.
En donde mencionas lo de “En proyecto propiedades del proyecto modelo de subprocesos -> activa la casilla que que mejor te convenga”, marco la casilla Subprocesos por objeto.
2.- Cree una clase llamada XClsEjec, con el siguiente codigo:
Código: Visual Basic
  1. Public Sub Ejecutor(ValNum As Integer)
  2. Dim frmEjec As XProyEjec.XFrmEjec
  3. Set frmEjec = New XProyEjec.XFrmEjec
  4.  
  5. Load frmEjec
  6.  
  7. frmEjec.MultiProcs ValNum
  8.  
  9. Set frmEjec = Nothing
  10.  
  11. End Sub
  12.  

3.- Luego agregue un nuevo proyecto Exe Standard, y genero un formulario, el cual tiene el siguiente codigo:
Código: Visual Basic
  1. Private VN As Integer
  2.  
  3. Public Sub MultiProcs(ValN As Integer)
  4. VN = ValN
  5. End Sub
  6.  

4.- Y al form, le agregue un Timer, con el siguiente codigo:
Código: Visual Basic
  1. Private Sub Timer1_Timer()
  2. MsgBox VN
  3.  
  4. Unload Me
  5. End Sub
  6.  

5.- Y genero el archivo XEjecutor.exe


6.- Luego, abro un proyecto Exe Standard independiente. Quito el formulario y agrego un modulo, con el siguiente codigo:
Código: Visual Basic
  1. Sub Main()
  2. Shell ("C:Documents and SettingsKyllMis documentosActiveXThreadsXEjecutor.exe /RegServer")
  3.  
  4. Prueba
  5. End Sub
  6.  

Y un sub donde tenia el problema.
Aun cuando habia registrado el ActiveX, si escribía

Código: Visual Basic
  1. Sub Prueba()
  2. Dim Ejec_1 As New XProyEjec.XClsEjec
  3. Dim Ejec_2 As New XProyEjec.XClsEjec
  4.  
  5. Set Ejec_1 = New XProyEjec.XClsEjec
  6. Set Ejec_2 = New XProyEjec.XClsEjec
  7.  
  8. Ejec_1.Ejecutor 1
  9. Ejec_2.Ejecutor 2
  10.  
  11. Set Ejec_1 = Nothing
  12. Set Ejec_2 = Nothing
  13.  
  14. End Sub
  15.  

Recibia Error de compilacion: No se ha definido el tipo definido por el usuario.
Y lo sigo recibiendo. Supongo que si no se hace referencia entrando a Proyecto – Referencias, y agregando el ActiveX, no se puede hacer referencia de la manera que expuse anteriormente.

Y si probaba con:

Código: Visual Basic
  1. Sub Prueba()
  2. Dim Ejec_1 As Object
  3. Dim Ejec_2 As Object
  4.  
  5. Set Ejec_1 = CreateObject("C:Documents and SettingsDeathWatchMis documentosXEjecutor.exe")
  6. Set Ejec_2 = CreateObject("C:Documents and SettingsDeathWatchMis documentosXEjecutor.exe")
  7.  
  8. Ejec_1.Ejecutor 1
  9. Ejec_2.Ejecutor 2
  10.  
  11. Set Ejec_1 = Nothing
  12. Set Ejec_2 = Nothing
  13.  
  14. End Sub
  15.  

pues recibia el mensaje Error '429' en tiempo de ejecucion : El componente ActiveX no puede crear el objeto.


Asi que como bien dijiste, la solucion fue cambiar el Set para que quedara:
Set Ejec_1 = CreateObject("XProyEjec.XClsEjec")


Ese era todo el rollo.
Si no deje algo en claro, comentamelo, para tratar de exponerlo un poco mejor.

Pues nuevamente, te agradezco mucho tu tiempo y tu ayuda.  :beer:  :good:  :good:

Un saludo  :hola:

7
Que onda, como estan  :)

Yo aca con una de muchas consultas (y participaciones desde luego) aqui en el foro  :P

Miren, tengo creado un Exe ActiveX, llamado XEjecutor.

Tengo otro Exe normal que hace uso del ActiveX, pero estoy teniendo una serie de problemas:

Dentro de este exe normal, si escribo:

Código: Visual Basic
  1. Dim Ejec_1 As Object
  2.  
  3. Set Ejec_1 = CreateObject("C:Documents and SettingsDeathWatchMis documentosXEjecutor.exe")
  4.  
  5.  
me arroja Error '429' en tiempo de ejecucion :
El componente ActiveX no puede crear el objeto.
Pero igual si en lugar de XEjecutor.exe le cambio el nombre a lasdjflk.exe, me da el mismo error, asi que creo que no esta haciendo referencia al archivo.

Por otro lado si escribo:

Código: Visual Basic
  1. Sub Main()
  2. ' Aqui, se supone que registro el Exe ActiveX, y aparentemente si lo hace, supongo yo...
  3. Shell ("C:Documents and SettingsDeathWatchMis documentosXEjecutor.exe /RegServer")
  4. ' Aqui llamo al Sub Prueba
  5. Prueba
  6. End Sub
  7.  
  8.  
  9. Sub Prueba()
  10. ' Aqui instancio al proyecto XProyEjec, a la clase XClsEjec, que se encuentran dentro del ActiveX XEjecutor
  11. Dim Ejec_1 As New XProyEjec.XClsEjec
  12. Set Ejec_1 = New XProyEjec.XClsEjec
  13.  
  14. ' Llamo a un procedimiento llamado Proceso, dentro del ActiveX
  15. Ejec_1.Proceso 1
  16.  
  17. ' y despejo el objeto.
  18. Set Ejec_1 = Nothing
  19.  
  20. End Sub
  21.  
  22.  
Obtengo Error de compilacion:
No se ha definido el tipo definido por el usuario.

Donde esta mi falla?  :blink:  :brickwall:

Les comento que la idea NO es entrar en VB, a Proyecto - Referencias, porque este exe normal y el exe activex, siempre se van a ejecutar en una maquina diferente.

Ojala puedan ayudarme

Gracias de antemano  :good:
Un saludo

Páginas: [1]