• Miércoles 12 de Marzo de 2025, 05:37

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 - DrakerDG

Páginas: 1 [2] 3
26
Robótica / Robots Miniatura
« en: Miércoles 14 de Septiembre de 2005, 14:19 »
:comp: Robots miniatura con movilidades impresionantes

En este link pueden ver todos los de esta serie, desafortunadamente esta en japones, pero las imagenes estan muy interesantes

Serie Silf

En especial centré mi interes en el robot humanoide Silf-H2, el cual tiene las siguientes especificaciones:

Altura    :   252mm
Ancho     :    95mm
Grosor    :    50mm
Peso      :   730gr (Baterias incluidas)
Actuadores:    21 motores DC en total
-  Piernas:    12 motores
-   Brazos:     6 motores
-   Cabeza:     2 motores
-  Cintura:     1 motores
Sensor    :   CCD sensor de imagen de 100Kpixeles
Baterias  : Ni-MH (Paquete de 7.2V/2100mAh)

En este link pueden ver mas información

Silf-H2

Tambien hay disponibles videos de este robot

Silf-H2 (Video 1)

Silf-H2 (Video 2)

27
Robótica / Re: Diseño De Brazo Mecánico
« en: Jueves 8 de Septiembre de 2005, 18:12 »
:comp: Otra fotografía del brazo del ejemplo. :blink:

En el siguiente post publique unos mensajes al final que tienen otras fotografías:

Creación De Un Robot...

28
Robótica / Diseño De Brazo Mecánico
« en: Jueves 8 de Septiembre de 2005, 18:06 »
Principios mecánicos de un brazo robot

 :comp: Uno de los problemas clásicos en el diseño de brazos mecánicos es su peso, el cual genera un torque (fuerza angular) que debe ser soportado por motores, que a su vez tienen que tener fuerza adicional para soportar el torque generado por el peso de un objeto que pueda sujetar. Torque: Es la fuerza aplicada en una palanca que hace rotar alguna cosa. Al aplicar fuerza en el extremo de una llave se aplica un torque que hace girar las tuercas. En términos científicos el torque es la fuerza aplicada multiplicada por el largo de la palanca (Torque = F x D) y se mide comúnmente en Newtons metro.

Hace algunos años elaboré un brazo y solucione este problema aplicando el principio de centro de masas.

El centro de masas es un punto del espacio que representa una especie de media de las posiciones y las masas de los trozos que forman el sistema. Si pensamos, por ejemplo, en una pelota de tenis, su centro de masas está precisamente en su centro, en el interior de la pelota. Si pensamos en dos naranjas separadas por un metro, su centro de masas está a medio metro de cada una de ellas. En cuanto a la Tierra y la Luna, su centro de masas está en la línea que las une, más cerca del centro de la Tierra que de la Luna, ya que la Tierra es mayor y tiene más masa, de hecho, está tan cerca que está dentro de la Tierra. El centro de masas de una cosa plana está en el punto donde podrías equilibrarla sobre la punta de un lápiz.

Para comprender esta explicación, sólo necesitamos saber que es algo que depende de la masa y la posición de las partes del sistema, que en casos comunes está más o menos cerca de su centro, en el significado usual de la palabra, y que está más cerca de las partes con más masa del sistema que de las que tienen menos masa: Como en el caso de la Tierra y la Luna.

¿Cómo podemos aplicar este concepto a un brazo mecánico?

Imaginemos un elemental, sin pinza ni codo, solamente una articulación, en este caso el hombro. Este tiene la capacidad de girar para proporcionarle a nuestro brazo un movimiento de abajo hacia arriba en el plano vertical, por ejemplo unos 270 grados, teniendo como referencia de cero unos 45 grados por debajo del plano horizontal. El brazo tiene un peso uniformemente distribuido, es decir su centro de masa está justamente a la mitad. El motor que genera el movimiento tiene que tener la capacidad de soportar el torque que genera ese peso justo a la mitad de la distancia del brazo o sea su centro de masas: Torque = Peso X Largo/2. Este torque será mayor entre más largo y pesado sea nuestro brazo, una solución sería acortarlo o eliminar peso con materiales más liviano. Pero siempre tenemos torque que vencer.

¿Qué ocurre si corremos el centro de masas hacia el eje? Al correr el centro de masas al eje de giro del hombro, el torque que este produce el literalmente cero (Torque = Peso X 0), pero ¿cómo es posible correr el centro de masas de un brazo? Pues la solución es relativamente sencilla, solo hay que colocar una pequeña extensión en el hombro, y a esta colocarle un contrapeso lo suficientemente pesado como para contra restar el peso de la otra parte del brazo. Suena contradictorio pero funciona, y un ejemplo practico es él sube y baja, pues no se necesita de una gran fuerza para hacerlo girar, pese a que en su eje se soporta el peso de todo el sistema: El sube y baja y los dos niños. En un sistema balanceado, el eje recibe el peso sobre sí mismo y no fuera de él, o sea da lo mismo que el brazo este en posición horizontal o vertical o en cualquier ángulo que uno desee.

Como contrapeso se puede utilizar el mismo motor que hará girar el brazo y posiblemente un peso con plomo si es necesario. Lo mismo se puede aplicar para cada sección de un brazo con codo. Con este principio lo único que nuestro motor debe soportar es el torque que genera el peso de un objeto que nuestro brazo pueda sujetar.

Un ejemplo de esta solución se puede observar en la imagen adjunta. :D

29
Robótica / Re: Utilizar El Joystick Para Controlar Un Robot
« en: Jueves 8 de Septiembre de 2005, 00:25 »
:comp: De hecho tengo uno, pero ya está viejito, pues el desarrollo del hardware fue en base a un programita en DOS, el cual no funciona muy bien en XP, por lo que me está constando pasar los diagramas y demás a un formato más trasportable.   También el software es viejito (VB4), pero las librerías de control de puertos no funcionan en XP, ya tengo otras que si lo hacen (IO.dll) pero tengo que re-teclear un poco, pero el tiempo no me alcanza.  En la foto adjunto verás el proyecto.

En la siguiente link publiqué otras al final de este tema:

Creación De Un Robot, Inicio ...

 :hola:

P.D.  ¿Pudiste bajar del ftp de SoloCódigo el archivo zip que subí y te funcionó?  Yo lo baje en otra PC y me dió error al intentar descomprimirlo, como que no se cargó al ftp completamente.   Si en dado caso no se puede descomprimir te puedo enviar uno por correo.

JoystickEX.zip <_<

30
Visual Basic 6.0 e inferiores / [Código Fuente] Controlar El Joystick Desde Visual Basic con el API
« en: Miércoles 7 de Septiembre de 2005, 17:30 »
Este ejemplo puede detectar los joystick instalados en el sistema y si están conectados. También saber cuantos botones y ejes tiene. Con el apoyo de graficas y sonido muestra el estado del joystick seleccionado.  Produce diferentes sonidos cuando se presionan los botones o se mueven las palancas del joystick y/o pad.  Muestra los valores que detecta por medio del registro de consulta, en este caso el JOYINFOEX de la función joyGetPosEx.  Se puede cambiar ID del joystick en tiempo de ejecución si hay más de uno conectados al sistema.

Para el desarrollo del mismo utilicé varias funciones:

joyGetPosEx

joyGetDevCaps

joyGetNumDevs

Con sus respectivas estructuras de registros:

JOYINFOEX

JOYCAPS

Adicionalmente utilicé otra función del API para reproducir archivos WAV, por ejemplo: Al pulsar un botón del joystick.

sndPlaySound



Autor: DrakerDG

31
Visual Basic / Visual Basic Explorer
« en: Miércoles 7 de Septiembre de 2005, 10:59 »
:comp: Denle un vistazo a la siguiente pagina, es en ingles pero está interesante:

Visual Basic Explorer

 :suerte:

32
Robótica / Utilizar El Joystick Para Controlar Un Robot
« en: Miércoles 7 de Septiembre de 2005, 10:43 »
:comp: Encontré información interesante sobre el uso de funciones del API para el control del Joystick utilizando Visual Basic.  Sé que para la gran mayoría esto no es nada nuevo, pero para los que no o los que de todos modos les llame la atención desarrolle un ejemplo.

Lo publiqué en el siguiente post:

Controlar El Joystick Desde Visual Basic con el API

 :hola:

JoystickEX.zip

33
Visual Basic 6.0 e inferiores / Controlar El Joystick Desde Visual Basic
« en: Miércoles 7 de Septiembre de 2005, 10:39 »
:comp: Encontré información interesante sobre el uso de funciones del API para el control del Joystick utilizando Visual Basic.  Sé que para la gran mayoría esto no es nada nuevo, pero para los que no o los que de todos modos les llame la atención desarrolle un ejemplo.

Para el desarrollo del mismo utilicé varias funciones:

joyGetPosEx

joyGetDevCaps

joyGetNumDevs

Con sus respectivas estructuras de registros:

JOYINFOEX

JOYCAPS

Adicionalmente utilicé otra función del API para reproducir archivos WAV, por ejemplo:  Al pulsar un botón del joystick.

sndPlaySound

Este ejemplo puede detectar los joystick instalados en el sistema y si están conectados. También saber cuantos botones y ejes tiene. Con el apoyo de graficas y sonido muestra el estado del joystick seleccionado.  Produce diferentes sonidos cuando se presionan los botones o se mueven las palancas del joystick y/o pad.  Muestra los valores que detecta por medio del registro de consulta, en este caso el JOYINFOEX de la función joyGetPosEx.  Se puede cambiar ID del joystick en tiempo de ejecución si hay más de uno conectados al sistema.

Pueden bajar este ejemplo del siguiente link:

JoystickEX.zip

Nota:  De ser posible, para las personas que lo revisen, les agradecería me postearan sus comentarios y/o críticas al respecto.

 :gracias:

34
Visual Basic 6.0 e inferiores / Re: Copiar Foto Activa A Carpeta
« en: Miércoles 7 de Septiembre de 2005, 00:05 »
:comp: Dreamer:
Ante todo fue un placer.

Referente a tus dudas residuales, en el caso de la función MPathX(), es solo para manejo de rutas sin el nombre del archivo, como por ejemplo:

Código: Text
  1.  
  2. C:\ProgDOS\X Download\Software
  3.  
  4. o
  5.  
  6. C:\ProgDos\Mis documentos\Electronica\
  7.  
  8.  
  9.  

Que al ingresarla en la función, le agrega un \ al final si no lo tiene, y si ya lo tiene, simplemente no hace nada, es decir:

Código: Text
  1.  
  2.  
  3. MPathX("C:\ProgDOS\X Download\Software")
  4.  
  5. Resulta: C:\ProgDOS\X Download\Software\
  6.  
  7. y
  8.  
  9. MPathX("C:\ProgDos\Mis documentos\Electronica\")
  10.  
  11. Resulta: C:\ProgDos\Mis documentos\Electronica\
  12.  
  13.  
  14.  

Respecto los controles de imagen, que por cierto son PictureBox (no Image), están para ajustar el tamaño de la imagen y este mantenga simetría con el tamaño original.   De hecho el control Image es el que tiene la propiedad strech, pero esta no conserva la proporción respecto al tamaño original si no que puede que la estire hacia los lados o hacia arriba y abajo.  

Continúa descubriendo y aprendiendo sobre programación

 :suerte:

35
DirectX / Re: Ayuda Con Directx Y Visual Basic
« en: Martes 6 de Septiembre de 2005, 23:40 »
:comp:  Encontré un lugar en el cual tienen datos interesantes sobre DirectX, está en ingles, pero tiene ejemplos que se pueden bajar para revisarlos.

VisualBasic Explorer

 :suerte:

37
Visual Basic 6.0 e inferiores / Re: Imprimir Contenido De Formulario Factura
« en: Domingo 4 de Septiembre de 2005, 00:07 »
:comp: Pueder utilizar el objeto Printer de Visual Basic.  Esto aparece en el help:

Código: Text
  1.  
  2. Printer (Objeto, colección Printers)
  3.            
  4.  
  5. El objeto Printer le permite comunicarse con una impresora del sistema (inicialmente la impresora predeterminada).
  6.  
  7. Lacolección Printers le permite obtener información acerca de todas las impresoras del sistema disponibles.
  8.  
  9. Sintaxis
  10.  
  11. Printer
  12.  
  13. Printers(índice)
  14.  
  15. El marcador de posición índice representa un entero entre 0 y Printers.Count-1.
  16.  
  17. Comentarios
  18.  
  19. Para presentar texto y gráficos en el objeto Printer, utilicemétodos gráficos. Una vez que el objeto Printer contenga el resultado que desea imprimir, puede usar el método EndDoc para enviar directamente el resultado a la impresora predeterminada de la aplicación.
  20.  
  21. Debe comprobar y posiblemente revisar la distribución de los formularios si quiere imprimirlos. Si utiliza el método PrintForm para imprimir un formulario, las imágenes gráficas se pueden recortar en la parte inferior de la página y el texto puede pasar a la página siguiente.
  22.  
  23. La colección Printers le permite consultar las impresoras disponibles de forma que pueda especificar la impresora predeterminada de su aplicación. Por ejemplo, quizá quiera saber cuál de las impresoras disponibles usa un determinado controlador de impresoras. El siguiente código comprueba todas las impresoras disponibles para encontrar la primera impresora cuya orientación de página sea Vertical y después la establece como la impresora predeterminada:
  24.  
  25. Dim X As Printer
  26. For Each X In Printers
  27.    If X.Orientation = vbPRORPortrait Then
  28.       ' La define como predeterminada del sistema.
  29.       Set Printer = X
  30.       ' Sale del bucle.
  31.       Exit For
  32.    End If
  33. Next
  34.  
  35. Mediante la instrucción Set se designa una de las impresoras de la colección Printers como impresora predeterminada. El ejemplo anterior designa como impresora predeterminada de la aplicación la impresora identificada por la variable de objeto X.
  36.  
  37. Nota   Si utiliza la colección Printers para especificar una impresora determinada, como Printers(3), sólo puede tener acceso a sus propiedades en modo de sólo lectura. Para leer y escribir las propiedades de una impresora concreta, primero tiene que definirla como impresora predeterminada de la aplicación.
  38.  
  39.  
  40.  

Y esta información referente a cómo se usa:

Código: Text
  1.  
  2. Imprimir con el objeto Printer
  3.  
  4.  
  5. Hay varias maneras de colocar texto y gráficos en el objeto Printer. Para imprimir con el objeto Printer, siga las instrucciones siguientes:
  6.  
  7. Asigne el miembro específico de la colección Printers al objeto Printer si quiere imprimir en una impresora distinta de la impresora predeterminada.
  8.  
  9.  
  10. Coloque texto y gráficos en el objeto Printer.
  11.  
  12.  
  13. Imprima el contenido del objeto Printer con los métodos NewPage o EndDoc.
  14. Propiedades del objeto Printer
  15. Las propiedades del objeto Printer coinciden inicialmente con las de la impresora predeterminada definida en el Panel de control de Windows. En tiempo de ejecución, puede establecer cualquiera de las propiedades del objeto Printer, entre las que se incluyen: PaperSize, Height, Width, Orientation, ColorMode, Duplex, TrackDefault, Zoom, DriverName, DeviceName, Port, Copies, PaperBin y PrintQuality. Para obtener más detalles y la sintaxis de estos métodos, vea la Referencia del lenguaje.
  16.  
  17. Si la propiedad TrackDefault es True y cambia la impresora predeterminada en el Panel de control de Windows, los valores de las propiedades del objeto Printer reflejarán las propiedades de la nueva impresora predeterminada.
  18.  
  19. No puede modificar algunas de las propiedades en medio de la impresión de una página una vez establecida la propiedad. La modificación de estas propiedades sólo afectará a las páginas siguientes. Las instrucciones siguientes muestran cómo puede imprimir cada página con una calidad de impresión diferente:
  20.  
  21. For pageno = 1 To 4
  22.    Printer.PrintQuality = -1 * pageno
  23.    Printer.Print "La calidad de esta página es"; pageno
  24.    Printer.NewPage
  25. Next
  26.  
  27. Los valores de la calidad de impresión pueden variar de – 4 a  – 1, o un entero positivo correspondiente a la resolución de la impresora en puntos por pulgada (PPP). Por ejemplo, el código siguiente establecería la resolución de la impresora a 300 PPP:
  28.  
  29. Printer.PrintQuality = 300
  30.  
  31. Para obtener más información   Para obtener información acerca de las propiedades del objeto Printer, vea la propiedad correspondiente en la Referencia del lenguaje.
  32.  
  33. Nota   El efecto de los valores de las propiedades del objeto Printer depende del controlador suministrado por el fabricante de la impresora. Puede que algunos valores no tengan efecto o que varios valores de propiedades diferentes tengan todos el mismo efecto. Los valores fuera del intervalo permitido puede que produzcan o no un error. Para obtener más información acerca de los controladores concretos, vea la documentación del fabricante.
  34.  
  35. Propiedades de escala
  36. El objeto Printer tiene estas propiedades de escala:
  37.  
  38. ScaleMode
  39.  
  40.  
  41. ScaleLeft y ScaleTop
  42.  
  43.  
  44. ScaleWidth y ScaleHeight
  45.  
  46.  
  47. Zoom
  48. Las propiedades ScaleLeft y ScaleTop definen las coordenadas x e y, respectivamente, de la esquina superior izquierda de una página imprimible. Si modifica los valores de ScaleLeft y ScaleTop, puede crear los márgenes izquierdo y superior de la página impresa. Por ejemplo, puede usar ScaleLeft y ScaleTop para centrar un formulario impreso (PFrm) en la página, con estas instrucciones:
  49.  
  50. Printer.ScaleLeft = -((Printer.Width - PFrm.Width) / 2)
  51. Printer.ScaleTop = -((Printer.Height - PFrm.Height) _
  52.    / 2)
  53.  
  54. Muchas impresoras aceptan la propiedad Zoom. Esta propiedad define el porcentaje de escala del resultado. El valor predeterminado de la propiedad Zoom es 100, que indica que el resultado se imprimirá al 100 por ciento del tamaño (tamaño real). Puede usar la propiedad Zoom para reducir o ampliar la página con respecto al papel en el que se imprime. Por ejemplo, si Zoom es 50, la página impresa aparece con la mitad de alto y la mitad de ancho de la página de papel. La sintaxis siguiente establece la propiedad Zoom a la mitad del tamaño del objeto Printer predeterminado:
  55.  
  56. Printer.Zoom = 50
  57.  
  58. Colocar texto y gráficos
  59. Puede establecer las propiedades CurrentX y CurrentY del objeto Printer, de la misma forma que para los formularios y los cuadros de imagen. Con el objeto Printer, estas propiedades determinan dónde se coloca el resultado en la página real. Las instrucciones siguientes establecen las coordenadas de dibujo a la esquina superior izquierda de la página actual:
  60.  
  61. Printer.CurrentX = 0
  62. Printer.CurrentY = 0
  63.  
  64. También puede usar los métodos TextHeight y TextWidth para colocar texto en el objeto Printer. Para obtener más información acerca del uso de estos métodos de texto, vea "Presentar en una ubicación específica", anteriormente en este capítulo.
  65.  
  66. Imprimir formularios en el objeto Printer
  67. Puede que le interese que la aplicación imprima uno o varios formularios junto con la información de dichos formularios, especialmente si el diseño del formulario corresponde a un documento impreso como una factura o una ficha de hora. La manera más sencilla de hacer esto es mediante el método PrintForm. Para obtener la mayor calidad en una impresora láser, utilice el método Print y los métodos gráficos con el objeto Printer. Recuerde que el uso del objeto Printer requiere más tiempo de desarrollo, puesto que tiene que volver a crear el formulario en el objeto Printer antes de imprimirlo.
  68.  
  69. Volver a crear un formulario en el objeto Printer también requiere volver a crear:
  70.  
  71. El esquema del formulario, incluidos el título y las barras de menús.
  72.  
  73.  
  74. Los controles y su contenido, incluidos texto y gráficos.
  75.  
  76.  
  77. El resultado de los métodos gráficos aplicado directamente al formulario, incluido el método Print.
  78. El número de elementos que debe volver a crear en el objeto Printer depende de la aplicación y de la parte del formulario que necesite imprimir.
  79.  
  80. Volver a crear el texto y los gráficos de un formulario
  81. Cuando cree texto y gráficos en un formulario mediante los métodos Print, Line, Circle, PaintPicture o PSet, puede que desee que una copia de esta resultado aparezca en el objeto Printer. La manera más sencilla de conseguirlo es escribir un procedimiento independiente del dispositivo que vuelva a crear el texto y los gráficos.
  82.  
  83. Por ejemplo, en el procedimiento siguiente se utiliza el método PaintPicture para imprimir la propiedad Picture de un formulario o de un control en cualquier objeto de resultado, como una impresora u otro formulario:
  84.  
  85. Sub PrintAnywhere (Src As Object, Dest As Object)
  86.    Dest.PaintPicture Src.Picture, Dest.Width / 2, _
  87.       Dest.Height / 2
  88.    If Dest Is Printer Then
  89.       Printer.EndDoc
  90.    End If
  91. End Sub
  92.  
  93. Después, puede llamar a este procedimiento y pasarle los objetos de origen y de destino:
  94.  
  95. PrintAnywhere MiForm, Printer
  96. PrintAnywhere MiForm, TuForm
  97.  
  98. Para obtener más información   Para obtener más información, vea "Print (Método)", "Line (Método)", "Circle (Método)" "Pset (Método)" o "PaintPicture (Método)" en la Referencia del lenguaje.
  99.  
  100. Imprimir los controles de un formulario
  101. El objeto Printer puede recibir el resultado del método Print y de los métodos gráficos, como los métodos Line o PSet. Pero no puede colocar controles directamente en el objeto Printer. Si la aplicación tiene que imprimir controles, debe escribir procedimientos que vuelvan a dibujar cada tipo de control utilizado en el objeto Printer o usar el método PrintForm.
  102.  
  103. Imprimir el contenido del objeto Printer
  104. En cuanto haya colocado el texto y los gráficos en el objeto Printer, utilice el método EndDoc para imprimir el contenido. El método EndDoc avanza la página y envía todo el resultado pendiente a la cola. La cola intercepta el trabajo de impresión en su camino hacia la impresora y lo envía al disco o a la memoria, en donde se mantiene hasta que la impresora está preparada para recibirlo. Por ejemplo:
  105.  
  106. Printer.Print "Ésta es la primera línea de texto _
  107.    de una pareja."
  108. Printer.Print "Ésta es la segunda línea de texto _
  109.    de la pareja."
  110. Printer.EndDoc
  111.  
  112. Nota   Visual Basic llama automáticamente a EndDoc si la aplicación termina sin haberlo llamado de forma explícita.
  113.  
  114. Crear documentos de múltiples páginas
  115. Cuando imprima documentos grandes, puede especificar en el código dónde quiere que empiece una nueva página, mediante el método NewPage. Por ejemplo:
  116.  
  117. Printer.Print "Ésta es la página 1."
  118. Printer.NewPage
  119. Printer.Print "Ésta es la página 2."
  120. Printer.EndDoc
  121.  
  122. Cancelar un trabajo de impresión
  123. Puede terminar el trabajo de impresión actual mediante el método KillDoc. Por ejemplo, puede consultar al usuario, a través de un cuadro de diálogo, para determinar si se debe imprimir o terminar un documento:
  124.  
  125. Sub PrintOrNot()
  126.    Printer.Print "Ésta es la primera línea para " & _
  127.       "ilustrar el método KillDoc."
  128.    Printer.Print "Ésta es la segunda línea para " & _
  129.       "ilustrar el método KillDoc."
  130.    Printer.Print "Ésta es la tercera línea para " & _
  131.       "ilustrar el método KillDoc."
  132.    If vbNo = MsgBox("¿Desea imprimir el documento?", _
  133.          vbYesNo) Then
  134.       Printer.KillDoc
  135.    Else
  136.       Printer.EndDoc
  137.    End If
  138. End Sub
  139.  
  140. Si el Administrador de impresión del sistema operativo controla el trabajo de impresión, el método KillDoc elimina todo el trabajo enviado a la impresora. Sin embargo, si el Administrador de impresión no controla el trabajo de impresión, puede que la página uno ya se haya enviado a la impresora y no se verá afectada por KillDoc. La cantidad de datos enviada a la impresora varía ligeramente de un controlador de impresora a otro.
  141.  
  142. Nota   No puede usar el método KillDoc para terminar un trabajo de impresión iniciado con el método PrintForm.
  143.  
  144.  
  145.  

 :suerte:

38
Visual FoxPro / Re: Impresión De Reportes
« en: Sábado 3 de Septiembre de 2005, 05:54 »
:comp: Bueno el problema es un poco difícil cuando se trata con detalles de cantidades de registros variables.  

Sería bueno que indicaras cual es la forma en que ordenas tus registros en la configuración del reporte.

En mi caso, resolví este problema estandarizando la cantidad de los registros del detalle, pero entiendo que hay situaciones en las que las diferencias son significativas entre una factura y otra.

Si es posible publica el reporte, para ver como configuraste los encabezados, los grupos, los detalles y el pie de página, para ver en que forma se te puede ayudar.  Si incluyeras una muestra de la o las tablas de las cuales se realiza la consulta, o la tabla de la consulta con la cual llenas los datos, o el código, sería más beneficioso.

 :suerte:

39
Visual Basic 6.0 e inferiores / Re: Creacion Ocx Combo Personalizado
« en: Sábado 3 de Septiembre de 2005, 00:24 »
:blink: Raro el problema, adjunto un ejemplo relacionado con el DataCombo, revisalo y me cuentas.

Abri el archivo Group1.vbg (dobleclick) asi te abre el control ActiveX y el formulario de prueba.

 :suerte:

40
Visual Basic 6.0 e inferiores / Re: Como Se Puede Detectar Que Windows Se Va A Apagar
« en: Viernes 2 de Septiembre de 2005, 23:52 »
:comp: En windows no se como se puede hacer, pero en DOS se puede por medio del comando shutdown -a,  intente correrlo desde Visual Basic por medio del Shell, pero no evitó que se cerrar el windows.

Por otro lado es posible que puedas bloquer los recursos que tiene el usuario para apagar el sistema, bloqueando la barra de inicio y Ctl+Alt+Del.  en el siguiente link muestran la manera de hacerlo.

Manual de como bloquear CTRL+ALT+SUP, ALT+TAB, Y OTROS con Visual Basic en Win XP

En este link aparece este manual y otros datos interesantes de Visual Basic. :suerte:

41
Visual Basic 6.0 e inferiores / Re: Copiar Foto Activa A Carpeta
« en: Viernes 2 de Septiembre de 2005, 23:41 »
:comp: Te explico el la estructura if siguiente:

Código: Text
  1.  
  2. If ((Trim(txtNew.Text) & "a") <> "a") And _
  3. (Mid(Trim(LCase(txtNew.Text)), Len(Trim(txtNew.Text)) - 3, 4) = ".jpg") Then
  4. On Error GoTo ErrorX
  5. fS.CopyFile Label6.Tag, sFphX
  6. 'File2.Refresh
  7. MsgBox "Archivo copiado en: " & sFphX
  8. End If
  9.  
  10.  
  11.  

txtNew.Text es un string, específicamente el nombre de un archivo con todo y su path, la función Trim() los espacios en blanco del inicio y/o final de un string, que para el caso de un path no sirven de nada.  Seguido la condición ((Trim(txtNew.Text) & "a") <> "a", determina si realmente txtNew.Text no es una cadena vacía, pues si lo fuera "a" = "a".  Por medio del AND exigimos que a parte de no ser cadena vacía la extensión del archivo sea JPG.  La función Mid(,,) nos extrae los últimos cuatro caracteres y los compara con ".jpg".

Si el texto de txtNew.Text cumple con estas dos condiciones, por ejemplo la ruta siguiente:

"C:\Mi carpeta\Mi imagen.jpg"

Esta no es una cadena vacía y los últimos cuatro caracteres son ".jpg".  Por lo tanto entra al IF.

La sentencia On Error GoTo ErrorX es para controlar si existe algún error durante el proceso de copia.  De haber uno se va a la etiqueta ErrorX:.   De lo contrario continua a la sentencia siguiente, donde utiliza a fS para realizar la copia por medio del método CopyFile del cual los argumentos son el archivo origen seguido del archivo destino.

Luego actualiza el cuadro File2 por medio de la sentencia File2.Refresh.  La siguiente sentencia despliega un cuadro de texto por medio de Msgbox y listo.  Veo que desactivaste la sentencia que actualiza el cuadro de File2.  Esta acción actualiza el cuadro, es decir que muestra el nuevo archivo copiado.

MPathX

Código: Text
  1.  
  2. Public Function MPathX(ByVal sPhX As String) As String
  3. Dim sPhY As String
  4. sPhY = sPhX
  5. If Mid(sPhY, Len(sPhY), 1) &#60;&#62; &#34;&#092;&#34; Then
  6. sPhY = sPhY & &#34;&#092;&#34;
  7. End If
  8. MPathX = sPhY
  9.  
  10. End Function
  11.  
  12.  
  13.  

La función MPathX solo es de verificación, para que siempre él ultimo caracter del path sea un slash invertido "\", si la usas con la propiedad CommonDialog1.FileName, te da un error, puesto que esta función es solo para paths (rutas) sin el nombre del archivo. Es decir

Si MiPath es una variable tipo string y le asignamos el path determinado:

MiPath = "C:\Mis documentos\Mis imagenes"

Este path no tiene el slash invertido al final, en cambio al utilizar la función MPathX queda lo siguiente:

MiPath = MPathX("C:\Mis documentos\Mis imagenes")

Por lo que MiPath es ahora igual a:  "C:\Mis documentos\Mis imagenes\"

Para ver cuales son los caracteres que tiene la propiedad CommonDialog1.FileName escribe una sentencia con el procedimiento Msgbox de este manera:

Msgbox CommonDialog1.FileName

Esta desplegará una ventana con el valor de CommonDialog1.FileName.

De todos modos te envío otra versión del código donde empleo el CommonDialog

 :suerte:

42
Visual Basic 6.0 e inferiores / Re: Trabajando Con Formularios
« en: Viernes 2 de Septiembre de 2005, 14:55 »
:comp: No muy te entendí pero revisa los ejemplos que adjunto a este post (MDIForm.exe) descomprimelo.  Son dos ejemplos de proyectos con MDI Forms.  En el proyecto Texted utiliza el comanto Forms.Count para saber cuantos formularios están aviertos.  :suerte:

43
Visual FoxPro / Re: Actualizar Vistas
« en: Viernes 2 de Septiembre de 2005, 14:37 »
:comp: Puedes utilizar un objeto Timer para que cada cierto tiempo realice un REQUERY() de tu vista y listo :good:

44
Visual FoxPro / Re: Error "c0000005" - ¿por Qué Ocurre?
« en: Viernes 2 de Septiembre de 2005, 14:27 »
:comp: Conozco ese tipo de error, de hecho en VisualFox cuando se genera en alguna aplicación o ejecutable un error cualquiera, automáticamente se guarda en un archivo (Ej.: vfp7err.log) los errores con información importante para poder determinar donde se produce el error.  En mi caso lo eh encontrado en la carpeta "C:\Archivos de programa\Archivos comunes\Microsoft Shared\VFP\".  A continuación te pasteo un ejemplo que a mí me ocurrió:

Código: Text
  1.  
  2. Fatal error: Exception code=C0000005 @ 09/20/04 09:35:10 AM. Error log file: C:&#092;Archivos de programa&#092;Archivos comunes&#092;Microsoft Shared&#092;VFP&#092;vfp7rerr.log
  3.   Called from -  frmfind.op.p2.txtdato.interactivechange line 38  {c:&#092;seime&#092;forms&#092;frmfind.sct c:&#092;seime&#092;forms&#092;frmfind.sct}
  4.   Called from -  frminout.cmdfind.click line 13  {c:&#092;seime&#092;forms&#092;frminout.sct c:&#092;seime&#092;forms&#092;frminout.sct}
  5.   Called from -  frmmain.toolbar01.cmdprof.click line 3  {c:&#092;seime&#092;forms&#092;frmmain.sct c:&#092;seime&#092;forms&#092;frmmain.sct}
  6.   Called from -  digiarm line 39  {C:&#092;SEIME&#092;progs&#092;digiarm.prg c:&#092;seime&#092;digisoft.exe}
  7.  
  8.  
  9.  

Primero te indica el error (en este caso C0000005), la fecha y la hora en que ocurrió.  Pero lo más importante es que escribe los eventos y las líneas que provocaron el error.  Como se puede observar hay varios eventos tabulados, el primero (frmfind.op.p2.txtdato.interactivechange line 38) es el que indica en que línea exactamente se produjo el error, los siguientes son los eventos precedentes para llegar a esa parte del código, por lo que su interpretación es de abajo hacia arriba.  

En este caso en particular, parto de un ejecutable llamado digisoft.exe, en el programa digiarm.prg indica la línea en que se inicia el procesamiento de eventos con READ EVENTS.
La siguiente indica que en el formulario frmmain.sct por medio del evento frmmain.toolbar01.cmdprof.click  en la línea 3 se abre el formulario llamado frminout.sct, del cual por medio del evento frminout.cmdfind.click  en la línea 13 llama al formulario frmfind.sct, y en este ultimo por medio del evento frmfind.op.p2.txtdato.interactivechange específicamente llegamos a la línea 38 en donde se produjo el error C0000005 y me saca del problema.

Siguiendo esta información, el error se producía en un proceso de búsqueda, ya que el formulario en el que estaba me servía para buscar información de artículos de inventario.  El problema radicaba en el manejo de las áreas y punteros de este formulario y del formulario precedente frminout.sct. En este hacia uso de la información recolectada en el anterior y realizaba una búsqueda, accesando una tabla de la misma base de datos de la consulta del formulario frmfind.sct.  

Cuando uno trabaja con archivos, es importante llevar un control en el manejo de apertura de áreas y punteros.  Ya que las áreas son espacios de memoria (buffer).  Mi error consistía en abrir una base de datos (OPEN DATABASE), luego una tabla con el SELECT, cerraba la tabla con él USE, pero no liberaba correctamente el buffer de la base de datos.  Al realizar varias consultas, acumulaba X cantidad de buffers (las veces que se realizaba esta operación) y llegaba un momento en que el espacio de memoria de buffers era demasiado grande y es en ese momento en que se producía el error.

Solución:  cambie la forma de consultar las tablas, procuro utilizar mas consultas en vez de abrir las bases de datos, y al realizar consultas liberó los punteros de las tablas involucradas por medio del USE.  Por ejemplo:

Código: Text
  1.  
  2. SELECT *&#59;
  3.  FROM sPath + 'data&#092;digisoft!usuario'&#59;
  4.  WHERE (alltrim(str(usuario.codigo)) LIKE this.tag)&#59;
  5.  AND ((usuario.estatus &#62;= nEMn)&#59;
  6.  AND (usuario.estatus =&#60; nEMx))&#59;
  7.  ORDER BY usuario.codigo&#59;
  8.  INTO CURSOR myresp
  9.  
  10. * Como utilicé la tabla usuario, llamo al puntero que el SELECT de la consulta
  11. * llamó y procedo a liberarlo de la memoria con USE.
  12. * El comando use localiza la posición de memoria del puntero y libera el espacio
  13. * de memoria correspondiente.
  14.  
  15. SELECT usuario
  16. USE
  17.  
  18.  
  19.  

Es aconsejable hacer uso moderado del manejo de áreas (espacios de memoria), pues este error es causa en la mayoría de los casos por desbordamiento de pila (Stack overflow).  Realmente este tipo de error se da en cualquier programa en el cual se haga uso de apertura y cierre de archivos.  En la imagen adjunta está un ejemplo de este error.

Espero que toda esta historia te sirva.  :suerte:

45
Visual Basic 6.0 e inferiores / Re: """busco Ejemplo Vb Para Enviar Mails""""
« en: Viernes 2 de Septiembre de 2005, 02:51 »
:comp: Hay algo muy importante que tienes que tener en cuenta:  Hay empresas de Internet que solo te dejan enviar correo por su servidor SMTP y no por ningún otro.  Si este es el caso la una forma de sacar correos es por medio de su servidor.  Por ejemplo en mi caso yo tengo el servicio con una empresa de esta naturaleza, por lo que sí tengo correo con otra entidad un correo que puedo revisar desde el Outlook, tengo que hacer lo siguiente:

Ejemplo:
Si mi correo es:  mycorreo@esteserver.com
Y los servidores SMTP y POP de este correo es mail1.esteserver.com.
Solo puedo utilizar el segundo (POP), ya que el primero no lo puedo accesar porque la empresa que me da el servicio no me deja.

En cambio la empresa que me da el servicio tiene su propio servidor SMTP, que para este ejemplo es:
mgent.contact.com.gt

Por lo que tengo que utilizar ese otro servidor para esta cuenta de correo o cualquiera en vez del que le corresponde.

Los dos códigos que te refiero en el post anterior los probé de la manera que te digo y funcionaron bien. :suerte:

46
Visual Basic 6.0 e inferiores / Re: Copiar Foto Activa A Carpeta
« en: Viernes 2 de Septiembre de 2005, 02:26 »
:think: Ok, te envío una versión que solo trabaja con imágenes, y te explico como funciona:

Corre el programa y en la parte donde aparecen carpetas, selecciona una donde sepas que hay una imagen del tipo JPG.  En el cuadro de a la par aparecen, si los hay archivos tipo JPG, haces click en cualquiera y automáticamente te aparece la imagen en un cuadrito situado en la esquina superior de tu izquierda, a la derecha aparece el nombre del archivo en una etiqueta y abajo de esta en un cuadro de texto.   Cambia el nombre del cuadro de texto y/o cambia la carpeta o destino donde lo quieras copiar y listo, incluso puedes crear una nueva carpeta (botón: nueva carpeta), por ultimo solo presionas el botón de "copiar imagen" y eso es todo.


De ser posible envíame el código que actualmente te da el problema, para así poder revisarlo y ver ese error que comentas.  

Tómalo con calma, hay momentos en que la mente se tupe y por mas que busque uno la solución es difícil. :suerte:

Código: Text
  1.  
  2. NOTA:  Necesito saber que sistema operativo utilizas, pues ocurre lo siguiente, la operación de copiar un archivo en tu disco duro, desde un código (script), para unos firewalls y sistemas de seguridad ajenos o propios del sistema, es tomado como una operación de riesgo moderado de seguridad, que dependiendo de como configures tú o tus programas de seguridad, pueden o no permitirle a una aplicación o código que realicé esta operación.  En algunos casos (como el mío), en el primer intento de realizar una copia, mi sistema de seguridad me preguntó si lo permitía.  Si en caso contrario se le indica a uno de estos programas que no lo permita, solo se puede cambiar este bloqueo desde la consola de configuración que el sistema de seguridad tenga.  Revisa esto también, pues puede que sea la causa del error que mencionas.
  3.  
  4.  
  5.  

Revisa el archivo adjunto (es otra versión).

47
Visual Basic 6.0 e inferiores / Re: Copiar Foto Activa A Carpeta
« en: Jueves 1 de Septiembre de 2005, 20:39 »
&lt;_&lt; Antes de abrir otra discusión del mismo tema revisa bien los post escritos en tu primera discusión.

Discusión Anterior: "Copiar Foto A Carpeta"

En este link hay un archivo adjunto "FileSystem.exe" el cual es un ejemplo que funciona y que ocupe parte de mi tiempo para desarrollarlo.  Ya lo probaste?
También está la explicación sacada del help de VB sobre el código utilizado.  Como también un ejemplo escrito, que hace lo que necesitas en seis líneas.

Si aún no has revisado este recurso, hazlo pues tiene cosas que te pueden servir.
 &lt;_&lt;  :no:

48
Visual Basic 6.0 e inferiores / Re: No Se Me Ejecuta Macro Desde Vb
« en: Jueves 1 de Septiembre de 2005, 20:05 »
:comp: Gracias por la información de vuelta.

Es importante que todos los usuarios del foro que sea, tengamos esta costumbre, pues la retroalimentación de un tema, solidifica los conocimientos de todos.  

Sigamos este ejemplo. :blink:

49
:comp: Aquí tienen más información del puerto paralelo y sus registros.

Tambien incluyo una libreria (IO.dll) por medio de la cual se pueden accesar a estos registros desdede Windows 95 a Windows XP.

Las declaraciones en Visual Basic son las siguientes:

Código: Text
  1.  
  2. Public Const LPT1x = &H378
  3.  
  4. Public Declare Sub PortOut Lib &#34;IO.DLL&#34; (ByVal Port As Integer, ByVal Data As Byte)
  5. Public Declare Sub PortWordOut Lib &#34;IO.DLL&#34; (ByVal Port As Integer, ByVal Data As Integer)
  6. Public Declare Sub PortDWordOut Lib &#34;IO.DLL&#34; (ByVal Port As Integer, ByVal Data As Long)
  7. Public Declare Function PortIn Lib &#34;IO.DLL&#34; (ByVal Port As Integer) As Byte
  8. Public Declare Function PortDWordIn Lib &#34;IO.DLL&#34; (ByVal Port As Integer) As Long
  9. Public Declare Sub SetPortBit Lib &#34;IO.DLL&#34; (ByVal Port As Integer, ByVal Bit As Byte)
  10. Public Declare Sub ClrPortBit Lib &#34;IO.DLL&#34; (ByVal Port As Integer, ByVal Bit As Byte)
  11. Public Declare Sub NotPortBit Lib &#34;IO.DLL&#34; (ByVal Port As Integer, ByVal Bit As Byte)
  12. Public Declare Function GetPortBit Lib &#34;IO.DLL&#34; (ByVal Port As Integer, ByVal Bit As Byte) As Boolean
  13. Public Declare Function RightPortShift Lib &#34;IO.DLL&#34; (ByVal Port As Integer, ByVal Val As Boolean) As Boolean
  14. Public Declare Function LeftPortShift Lib &#34;IO.DLL&#34; (ByVal Port As Integer, ByVal Val As Boolean) As Boolean
  15. Public Declare Function IsDriverInstalled Lib &#34;IO.DLL&#34; () As Boolean
  16.  
  17.  
  18. '********************************************************
  19. '*********    Function Descriptions   *******************
  20. '********************************************************
  21.  
  22. 'PortOut - Outputs a byte to the specified port.
  23.    
  24. 'PortWordOut - Outputs a word (16-bits) to the specified port.
  25.    
  26. 'PortDWordOut - Outputs a double word (32-bits) to the specified port.
  27.    
  28. 'PortIn - Reads a byte from the specified port.
  29.    
  30. 'PortWordIn - Reads a word (16-bits) from the specified port.
  31.    
  32. 'PortDWordIn - Reads a double word (32-bits) from the specified port.
  33.    
  34. 'SetPortBit - Sets the bit of the specified port.
  35.    
  36. 'ClrPortBit - Clears the bit of the specified port.
  37.    
  38. 'NotPortBit - Nots (inverts) the bit of the specified port.
  39.    
  40. 'GetPortBit - Returns the state of the specified bit.
  41.    
  42. 'RightPortShift - Shifts the specified port to the right. The LSB is
  43. '                 returned, and the value passed becomes the MSB.
  44.    
  45. 'LeftPortShift - Shifts the specified port to the left. The MSB is
  46. '                returned, and the value passed becomes the LSB.
  47.    
  48. 'IsDriverInstalled - Returns non-zero if io.dll is installed and
  49. '                    functioning. The primary purpose of this function
  50. '                    is to ensure that the kernel mode driver for
  51. '                    NT/2000/XP has been installed and is accessible.
  52.  
  53. 'Funciones personalizadas (ejemplo).  
  54.  
  55. Public Function OutPort1(ByVal Num As Byte) As Byte
  56.     PortOut LPT1x, Num
  57.     OutPort1 = Num
  58. End Function
  59.  
  60. Public Function InPort2() As Byte
  61. Dim XB As Byte
  62.     XB = PortIn(LPT1x + 1)
  63.     InPort2 = XB
  64. End Function
  65.  
  66. Public Function OutPort3(ByVal Num As Byte) As Byte
  67.     PortOut LPT1x + 2, Num
  68.     OutPort3 = Num
  69. End Function
  70.  
  71. Public Function InPort3() As Byte
  72. Dim XB As Byte
  73.     XB = PortIn(LPT1x + 2)
  74.     InPort3 = XB
  75. End Function
  76.  
  77.  
  78.  

Revisen el archivo adjunto.

 :suerte:

50
Visual Basic 6.0 e inferiores / Re: No Se Me Ejecuta Macro Desde Vb
« en: Jueves 1 de Septiembre de 2005, 14:03 »
:comp: Generé una aplicación en la cual modifiqué el código que muestras en tu post.

El codigo abre un archivo excel (icluido) y al presionar el boton generar automaticamente crea diferentes versiones de gráficos de los datos en la hoja 1.

Las linea de comando que estan en verde (originales de tu código), están anuladas porque me tiran diferentes errores, no logré saber porqué.

 :suerte:

Páginas: 1 [2] 3