• Jueves 25 de Abril de 2024, 21:21

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
1
Visual Basic 6.0 e inferiores / Re: Transmision Serie
« en: Viernes 20 de Abril de 2007, 23:31 »
Epa:
    No es mi intension hecerte quedar mal, no creas, al principio me partí la cabeza cuando intenté conectar un osciloscopio al serial e interpretar los códigos desde VB.  No entendía porque unos codigos si los leia y otros no, y todo por la funcion Len(), esta no contaba los codigos no imprimibles y por consiguiente me era imposible entender la trama de los codigos.  No detectaba algunos.  Hasta llegué a pensar que el osciloscopio no funcionaba bien, incluso culpe al cable y hasta el puerto serial, que si que en la ayuda del MSDN  estaba hasta abajo una notita en la informacion del Len(), donde comentaba la diferencia en caso de querer contar caracteres como byte o sea LenB().  

Por una letrita todo el lio que se me armó. :D .  Consecuentemente encontre que tambien tenía que usar MidB() en vez de Mid(), AscB() en vez de Asc(), y así sucecibamente. :hola:

2
Visual Basic 6.0 e inferiores / Re: Transmision Serie
« en: Jueves 19 de Abril de 2007, 01:03 »
Citar
Sinceramente no se mucho del tema, pero se me ocurre que si obtienes los datos byte por byte para pasarlo a hexadecimal puedes hacer:

Hex(Asc(Dato))

En este caso da error cuando se trate de bytes cuyo codigo en ASCII no sea imprimible. por lo que funciona si utilizas estas otras funciones:

Hex(AscB(Dato)

Código: Text
  1. While (Pos < LenB(Datos) - 1)
  2.    Hex(AscB(MidB(Datos,Pos,1) ' Eso se lo asignas a una variable o control donde quieras almacenar los datos
  3.    Pos = Pos + 1
  4.  Wend
  5.  

La B de estas funciones (AscB, LenB, MidB) garantiza que trabajara con la cadena de bytes sin pre-definir en ASCII, es decir con el valor del byte tal cual es.

3
Visual Basic 6.0 e inferiores / Re: Transmision Serie
« en: Miércoles 18 de Abril de 2007, 18:23 »
Citar
Si InputMode vale 1 (comInputModeBinary), habilito recibir caracteres no imprimibles o sea siempre se recibiran en ASCII.

En este caso hay una mala interpretacion. En el puerto serial recibes bytes y cada uno de estos puede tener un valor entre 0 y 255 (256 valores posibles).  Cuando tu control serial esta en valor 0, interpreta estos valores directamente a codigo ASCII, en este caso los valores son preinterpretados, por ejemplo si ingresa un codigo 00001101 (13 decimal) en ASCII es un Enter, 00100000 (32 decimal) un espacio en blanco, etc.  En el caso de configurar ImputMode a 1, no existe una pre-interpretacion, recibes el número binario tal cual es.  Lo que no puede hacer es asignar estos valores a un Label o Texto directamente pues estos controles interpretan automaticamente cualquier byte a ASCII, hay que tratarlos a nivel de variables unicamente.

Aquí incluyo una rutina que tengo para leer el puerto serial por medio de un control (name = comX), del cual leo los datos que me envía un osciloscopio, y dependiendo del codigo del byte ejecuto el programa correspondiente.

Código: Text
  1. Public Sub COM_IN()
  2. Dim Buffer As String
  3. Dim lBuf As Integer
  4. Dim cCH As Integer
  5. Dim cBT As Byte
  6. Dim cBX As Byte
  7. Dim sBX As String
  8. With frmOsc
  9. If CRdy Then
  10.     Buffer = .comX.Input
  11. Else
  12.     Buffer = ""
  13. End If
  14. lBuf = LenB(Buffer)
  15. For cCH = 1 To lBuf
  16.     cBT = AscB(MidB(Buffer, cCH, 1))
  17.     Xo = Xo + 1
  18.     If cBT = 127 Then
  19.         Xo = 0
  20.         If SetV.DATb(0) Then
  21.             For cBX = 0 To 127
  22.                 SetV.DATb(cBX + 5) = True
  23.             Next
  24.             SetV.DATb(133) = True
  25.             SetV.DATb(0) = False
  26.         End If
  27.     End If
  28.     If cBT = 126 Then
  29.         Xo = 0
  30.         .lblW.Visible = True
  31.     Else
  32.         .lblW.Visible = False
  33.     End If
  34.     If (Xo > 0) And (Xo < 138) Then
  35.         If (cBT <> SetV.DATx(Xo)) Or SetV.DATb(Xo) Then
  36.             Select Case Xo
  37.                 Case 1  'Volts per division
  38.                     cBX = (cBT And 12)
  39.                     Select Case cBX
  40.                         Case 0
  41.                             sBX = IIf(.TB.Buttons(8).Value, " 0.25 V/div", " 1 V")
  42.                             DVM(2) = "."
  43.                             DVM(4) = ""
  44.                             DVM(6) = ""
  45.                             SetV.VxDv = 1
  46.                         Case 4
  47.                             sBX = IIf(.TB.Buttons(8).Value, " 2.5 V/div", " 10 V")
  48.                             DVM(2) = ""
  49.                             DVM(4) = "."
  50.                             DVM(6) = ""
  51.                             SetV.VxDv = 10
  52.                         Case 8
  53.                             sBX = IIf(.TB.Buttons(8).Value, " 25 V/div", " 100 V")
  54.                             DVM(2) = ""
  55.                             DVM(4) = ""
  56.                             DVM(6) = "."
  57.                             SetV.VxDv = 100
  58.                     End Select
  59.                     .lcdE(3).Text = sBX
  60.                     cBX = (cBT And 48)
  61.                     Select Case cBX
  62.                         Case 0
  63.                             .lcdE(2).Text = " GROUND"
  64.                             .lcdE(2).CharColor = &HFF&
  65.                             DVM(7) = " GND"
  66.                         Case 16
  67.                             .lcdE(2).Text = " AC"
  68.                             .lcdE(2).CharColor = &H666A51
  69.                             DVM(7) = " VAC"
  70.                         Case 32
  71.                             .lcdE(2).Text = " DC"
  72.                             .lcdE(2).CharColor = &H666A51
  73.                             DVM(7) = " VDC"
  74.                     End Select
  75. '                    Beep
  76.                 Case 2  'Time / Frec per division
  77.                     Select Case cBT
  78.                         Case 0
  79.                             sBX = IIf(.TB.Buttons(8).Value, " 0.5 µs/div 20MS", " 50 ns 20MS")
  80.                             SetV.TxDv = 5
  81.                         Case 1
  82.                             sBX = IIf(.TB.Buttons(8).Value, " 1 µs/div 10MS", " 100 ns 10MS")
  83.                             SetV.TxDv = 10
  84.                         Case 2
  85.                             sBX = IIf(.TB.Buttons(8).Value, " 5 µs/div 2MS", " 0.5 µs 2MS")
  86.                             SetV.TxDv = 50
  87.                         Case 3
  88.                             sBX = IIf(.TB.Buttons(8).Value, " 10 µs/div 1MS", " 1 µs 1MS")
  89.                             SetV.TxDv = 100
  90.                         Case 4
  91.                             sBX = IIf(.TB.Buttons(8).Value, " 50 µs/div 200KS", " 5 µs 200KS")
  92.                             SetV.TxDv = 500
  93.                         Case 5
  94.                             sBX = IIf(.TB.Buttons(8).Value, " 100 µs/div 100KS", " 10 µs 100KS")
  95.                             SetV.TxDv = 1000
  96.                         Case 6
  97.                             sBX = IIf(.TB.Buttons(8).Value, " 0.5 ms/div 20KS", " 50 µs 20KS")
  98.                             SetV.TxDv = 5
  99.                         Case 7
  100.                             sBX = IIf(.TB.Buttons(8).Value, " 1 ms/div 10KS", " 0.1 ms 10KS")
  101.                             SetV.TxDv = 10
  102.                         Case 8
  103.                             sBX = IIf(.TB.Buttons(8).Value, " 5 ms/div 2KS", " 0.5 ms 2KS")
  104.                             SetV.TxDv = 50
  105.                         Case 9
  106.                             sBX = IIf(.TB.Buttons(8).Value, " 10 ms/div 1KS", " 1 ms 1KS")
  107.                             SetV.TxDv = 100
  108.                     End Select
  109.                     .lcdE(0).Text = sBX
  110.                     If cBT < 6 Then
  111.                         SetV.Tdim = IIf(.TB.Buttons(14).Value, "MHz", "µs")
  112.                     Else
  113.                         SetV.Tdim = IIf(.TB.Buttons(14).Value, "KHz", "ms")
  114.                     End If
  115.                 Case 3  'Trigger status
  116.                     cBX = (cBT And 120)
  117.                     If (cBT And 1) = 1 Then
  118.                         sBX = "SINGLE"
  119.                     Else
  120.                         sBX = "RUN"
  121.                     End If
  122.                     Select Case cBX
  123.                         Case 0
  124.                             sBX = " AUTO"
  125.                         Case 8
  126.                             sBX = " -EXTERN/" + sBX
  127.                         Case 16
  128.                             sBX = " +EXTERN/" + sBX
  129.                         Case 32
  130.                             sBX = " -INTERN/" + sBX
  131.                         Case 64
  132.                             sBX = " +INTERN/" + sBX
  133.                     End Select
  134.                     .lcdE(1).Text = sBX
  135. '                    Beep
  136.                 Case 4  'Triger level
  137.                     Select Case cBT
  138.                         Case 0
  139.                             SetV.Tlev = 1
  140.                         Case 2
  141.                             SetV.Tlev = 6
  142.                         Case 4
  143.                             SetV.Tlev = 5
  144.                         Case 8
  145.                             SetV.Tlev = 4
  146.                         Case 16
  147.                             SetV.Tlev = 3
  148.                         Case 32
  149.                             SetV.Tlev = 2
  150.                     End Select
  151. '                    Beep
  152.                 Case 5  'Signal info.
  153.                     .Dt(Xo - 5).Y1 = .SCR.Top + .SCR.Height - cBT * SV
  154.                     If SetV.DATb(Xo) Then
  155.                         .Dc(Xo - 5).Y1 = .Dt(Xo - 5).Y1
  156.                         .Dc(Xo - 5).Visible = .TB.Buttons(13).Value
  157.                         SetV.DATc(Xo) = cBT
  158.                         SetV.DATb(Xo) = False
  159.                     End If
  160.                 Case 6 To 132  'Signal info
  161.                     .Dt(Xo - 6).Y2 = .SCR.Top + .SCR.Height - cBT * SV
  162.                     .Dt(Xo - 5).Y1 = .SCR.Top + .SCR.Height - cBT * SV
  163.                     If SetV.DATb(Xo) Then
  164.                         .Dc(Xo - 6).Y2 = .Dt(Xo - 6).Y2
  165.                         .Dc(Xo - 5).Y1 = .Dt(Xo - 5).Y1
  166.                         .Dc(Xo - 5).Visible = .TB.Buttons(13).Value
  167.                         SetV.DATc(Xo) = cBT
  168.                     End If
  169.                 Case 133 'Signal info.
  170.                     .Dt(Xo - 6).Y2 = .SCR.Top + .SCR.Height - cBT * SV
  171.                     If SetV.DATb(Xo) Then
  172.                         .Dc(Xo - 6).Y2 = .Dt(Xo - 6).Y2
  173.                         SetV.DATc(Xo) = cBT
  174.                     End If
  175.                 Case 134   'Hundred DVM
  176.                     DVM(1) = Trim(Str(cBT))
  177.                 Case 135    'Ten DVM
  178.                     DVM(3) = Trim(Str(cBT))
  179.                 Case 136    'Unit DVM
  180.                     DVM(5) = Trim(Str(cBT))
  181.                 Case 137    'Negative Voltage.
  182.                     If (cBT And 8) = 8 Then
  183.                         DVM(0) = "-"
  184.                     Else
  185.                         DVM(0) = "+"
  186.                     End If
  187.                     If (cBT And 3) > 0 Then
  188.                         If (cBT And 8) = 8 Then
  189.                             DVM(8) = "<"
  190.                         Else
  191.                             DVM(8) = ">"
  192.                         End If
  193.                         Beep
  194.                     Else
  195.                         DVM(8) = ""
  196.                     End If
  197.             End Select
  198.             DVMtx = " " & DVM(0) & DVM(1) & DVM(2) & DVM(3) & DVM(4) & DVM(5) & DVM(6) & DVM(7)
  199.             If .lcdE(6).Text <> DVMtx Then
  200.                 .lcdE(6).Text = DVMtx
  201.             End If
  202.             If SetV.DATx(Xo) <> cBT Then
  203.                 SetV.DATx(Xo) = cBT
  204.             End If
  205.             If SetV.DATb(Xo) Then
  206.                 SetV.DATb(Xo) = False
  207.             End If
  208.         End If
  209.     End If
  210. Next
  211. End With
  212.  
  213. End Sub
  214.  

El buffer del serial se guarda en una variable tipo string. La clave de extraer cada byte del buffer es la funcion AscB() como byte.

Citar
Asc (Función)
     

Devuelve un tipoInteger que representa elcódigo de carácter correspondiente a la primera letra de una cadena.

Sintaxis

Asc(cadena)

Elargumento obligatorio cadena es unaexpresión de cadena válida. Si cadena no contiene caracteres, se produce unerror en tiempo de ejecución.

Comentarios

El intervalo del valor de retorno es entre 0 y 255 en sistemas que no sean DBCS, y entre –32768 y 32767 en sistemasDBCS.

Nota   La función AscB se utiliza con bytes de datos contenidos en una cadena. En lugar de devolver el código de carácter para el primer carácter, AscB devuelve el primer byte. La función AscW siempre devuelve el código de carácterUnicode en plataformas donde no se admite Unicode, en cuyo caso, el comportamiento es idéntico al de la función Asc.

Otra funcion importante es LenB(), ya que la funcion Len() pre-interpreta el codigo, y no toma el cuenta los carateres no imprimibles, por lo que daría un numero menor.

Citar
Len (Función)
     

Devuelve un tipoLong que contiene el número de caracteres en una cadena o el número de bytes necesarios para almacenar unavariable.

Sintaxis

Len(cadena | nombrevar)

La sintaxis de la función Len consta de las siguientes partes:

Parte Descripción
cadena Cualquierexpresión de cadena válida. Si cadena contieneNull, se devuelve Null.
Nombrevar Cualquier nombre devariable válido. Si nombrevar contiene Null, se devuelve Null. Si nombrevar es un tipoVariant, Len actúa igual que con un tipo String y siempre devuelve el número de caracteres que contiene.


Comentarios

Se deben especificar uno (y sólo uno) de los dosargumentos posibles. Contipos definidos por el usuario, Len devuelve el tamaño como se escribirá en el archivo.

Nota   Utilice la función LenB con datos de byte incluidos en una cadena, como en los lenguajes del conjunto de caracteres de doble byte (DBCS). En lugar de devolver el número de caracteres en una cadena, LenB devuelve el número de bytes utilizados para representar esa cadena. Con tipos de datos definidos por el usuario, LenB devuelve el tamaño en memoria, incluyendo cualquier relleno entre código que utiliza LenB, vea el segundo ejemplo en el tema de ejemplo.

Nota    Puede que Len no sea capaz de determinar el número real requerido de bytes de almacenamiento cuando se utiliza con cadenas de longitud variable entipos de datosdefinidos por el usuario.

4
Visual FoxPro / Re: Botones
« en: Martes 17 de Abril de 2007, 01:42 »
Si lo que necesitas es una calculadora en tu programa es mejor usar esto:

run /N calc.exe

Este codigo llama a la calculadora del sistema, en cambio si lo que necesitas es hacer especificamente una calculadora, puedes usar strings para almacenar los numeros y con macros & hacer las operaciones aritmeticas.  Tengo un formulario que hice hace algunos años, lo encuentro y te lo publico luego.

5
Visual Basic 6.0 e inferiores / Re: Transmision Serie
« en: Lunes 16 de Abril de 2007, 23:25 »
Si el control que utilizas es el que aparece en esta imagen:



Lo que tienes que cambiar es la propiedad ImputMode del control de valor 0 (0 - comInputModeText) a 1 (1 - comInputModeBinary), y listo ya tienes los datos byte por byte en en numeros binarios.

6
Visual FoxPro / Re: Integridad Referencial
« en: Sábado 7 de Abril de 2007, 00:03 »
Según te entiendo lo que llamas "muchos datos" te refieres a muchos campos esa sería la unica razon para que dividas los registros en varias tablas y las relaciones.  De no ser así ¿podrias exponer en este foro tu estructura y entender de mejor forma tu problema?

7
Visual FoxPro / Re: En Vfp: Boton De Comando Activa Un Wav O Mp3
« en: Viernes 6 de Abril de 2007, 12:22 »
Revisa el archivo adjunto (MPlayer.zip) en este esta el codigo de un formulario.

Para que funcione debes setear por defecto la carpeta donde desempaques el archivo zip.

SET DEFALULT TO "ruta donde lo desempaques"

Luego ejecutas el programa main.prg y listo.



Descargar archivo: MPlayer.zip

El programa tiene la capacidad de reproducir archivos en formato MP3, MIDI y WAV.  Pero en realidad puede reproducir cualquier archivo de audio que soporte el reproductor Windows Media.  El control que agregué es el Windows Media version 11, pero funciona si agregas versiones anteriores.

Revisalo y me cuentas. :comp:

8
Robótica / Re: Ideas Para Robótica
« en: Viernes 6 de Abril de 2007, 07:25 »
Interesante link, gracias :D

9
Visual Basic 6.0 e inferiores / [Código Fuente] Re: No funciona con mis joysticks
« en: Miércoles 28 de Marzo de 2007, 06:49 »
Hola culd:
   Disculpa que hasta ahora te contesto pero he estado un poco ocupado en el trabajo ya que viajo mucho.  Según lo que mencionas, te comento.

El cuadro combinado no indica el nombre de fabrica de cada joystick como aparece en windows, si no lo siguiente:

*Joistick 3 4 Axes 12 Buttons (Joystick Microsoft Controler)
*Joistick 4 4 Axes 12 Buttons (Joystick Microsoft Controler)

Primero el nombre generico:  Joystick, despues el numero de dispositivo que en tu caso son el 3 y 4, luego el numero de ejes (Axes) que para tus joystick son cuatro ejes, por darte un ejemplo la palanca ocupa 2, los otros dos podrian ser el control de altitud y/o mira.  Por ultimo la cantidad de botones (Buttons) que en teoria deberían de tener 12 cada uno.

Lo que no muy entiendo es porque te los reconoce como dispositivos 3 y 4, esto ocurre solo si tienes conectados otros 2 y que por ejemplo estén conectados y funcionando antes de conectar tus joystick gemelos.  

En el cuadro combinado aparece la tabla de dispositivos maximos que soporta tu PC, aunque no esten conectados, cuando uno los conecta y carga el drive, se posicionan desde el primero hasta llenar los espacios segun la cantidad de joystick conectados.  

Ahora respecto al JoystickStatus donde aparece unknow podemos hacer lo siguiente:

En el codigo del modulo modJoystick puedes modificar la funcion JoyEst de la siguiente manera:

Public Function JoyEst(ByVal IDx As Long) As String
'Indentify the Joystick status.
Dim xRes As String
Select Case IDx
   Case JOYERR_NOERROR
       xRes = "Ready"
   Case MMSYSERR_NODRIVER
       xRes = "No device driver present"
   Case MMSYSERR_INVALPARAM
       xRes = "Invalid parameter passed"
   Case JOYERR_PARMS
       xRes = "Invalid ID"
   Case JOYERR_NOCANDO
       xRes = "Request not completed"
   Case JOYERR_UNPLUGGED
       xRes = "Unplugged"
   Case Else
       xRes = "Unknown"
End Select
JoyEst = "(" & xRes & ") " & IDx   'Cambio
End Function

Lo unico que se modifica es la penultima lina agregandole & IDx, con esto en JoystickStatus aparecera un numero al final.  Necesito que lo copies por ahí y me lo envies.

Aparte enviame el listado de joysticks que aparecen en tu cuadro combinado desde el primero al ultimo.  Para hacer esto conecta antes tus joystick y asegurate que windows los reconoce, inicia la aplicacion y tomas los datos.  Intenta posicionarte en cada dispositivo del cuadro combinado e intenta activar botones o lo que sea de tus joysticks y me cuentas que pasa.

Puedes tomar una foto o un Printscreen o si puedes un video de lo que pasa, entre mas informacion me envies, de mejor manera te puedeo ayudar.

Atentamente
          DrakerDG

10
Citar
Bueno creo que no es necesario mandarlo a un usuario por correo ya quela pagina cuenta con su FTP, además tambien lo podrías colocar como archivo adjunto.

Opino igual, el objetivo principal de un foro es hacer publicas las soluciones para veneficio común.  Si tu archivo zip no es muy grande lo puedes adjuntar a tu post, de lo contrario en el ftp hay suficiente espacio.

Citar
Servidor: ftp.solocodigo.com
Usuario: vftp@solocodigo.com
Contraseña: solocodigo

11
Visual FoxPro / Re: Comenzando En Vfox
« en: Miércoles 28 de Septiembre de 2005, 09:35 »
:comp: En el evento Load no puedes llamar propiedades de ningun control del formulario, pues los controles aún no existen, es decir no están cargados.  Esto lo puede hacer en el evento Init del formulario.  Además el nombre del control por si solo no es reconocible, por lo que tiene que tener como prefijo el objeto al cual pertenece, en este caso el formulario, es decir:

Código: Text
  1.  
  2. * En el evento Init del formulario
  3. THISFORM.txtStdCode.Enabled=.F.
  4.  
  5.  
  6.  

Si en dado caso son varios los controles a los cuales les vas a cambiar alguna propiedad puedes usar el comando WITH de la siguiente forma

Código: Text
  1.  
  2. * En el evento Init del formulario
  3. WITH THISFORM
  4.   .txtStdCode.Enabled=.F.
  5.   * Otro controll....      
  6. ENDWITH
  7.  
  8.  
  9.  

En el comando del boton cmdPrevius:

Código: Text
  1.  
  2. If Bof()
  3.   Go Top
  4.   TStd.Refresh
  5. Else
  6.   Skip -1
  7.   if Bof()
  8.     Go Top
  9.     ThisForm.cmdPrevious.Enabled=.F.
  10.     ThisForm.cmdNext.Enabled=.T.
  11.   Else
  12.     TStd.Refresh      
  13.   EndIf
  14. EndIf
  15.  
  16.  
  17.  

Y en el boton cmdNext:

Código: Text
  1.  
  2. If Eof()
  3.   Go Bottom
  4.   TStd.Refresh
  5. Else
  6.   Skip 1
  7.   if Eof()
  8.     Go Bottom
  9.     ThisForm.cmdNext.Enabled=.F.
  10.     ThisForm.cmdPrevious.Enabled=.T.
  11.   Else
  12.     TStd.Refresh      
  13.   EndIf
  14. EndIf
  15.  
  16.  
  17.  

12
:smartass: Sagutxo:  Ingeniosa idea  :)

13
Visual Basic 6.0 e inferiores / Re: Como Esconder O Protejer Un Proceso
« en: Lunes 26 de Septiembre de 2005, 18:12 »
:comp: Revisá este link, talvez te de alguna idea:

¿Ocultar proceso de adm. de tareas?

y este otro:

Hacer oculto al programa en la lista de tareas

 :suerte:

14
Visual FoxPro / Re: Comenzando En Vfox
« en: Lunes 26 de Septiembre de 2005, 16:26 »
:comp: Una forma relativamente sencilla es incluir la(s) tabla(s) de tu base de datos en el Data Environment (Entorno de datos), el procedimiento es hacer click derecho sobre tu formulario y seleccionas esta opción.  Te aparece una ventana que dice Data Environment - Nombre de tu formulario, con el botón derecho sobre la superficie vacía de esta ventana, activas un menú en el cual con la opción Add puedes agregar la tabla de la base de datos que quieras.  Si en tu proyecto tienes ya una base de datos automáticamente aparece esta como opción por defecto para seleccionar.

Ya teniendo tus tablas o vistas en tu entorno de datos, en la propiedad ControlSource seleccionas el campo que tu quieras enlazar con el control y así sucesivamente.   Si la propiedad del control ReadOnly esta en False, al modificar el valor del control automáticamente se modifica el valor enlazado con la tabla.

Espero te sirva :hola:

15
Visual Basic 6.0 e inferiores / [Código Fuente] Ejemplo de acceso al puerto paralelo en WinXP
« en: Lunes 26 de Septiembre de 2005, 06:44 »
Este ejemplo hace uso de medios gráficos y auditivos para mostrar el estado de los registros del puerto paralelo y puede ser utilizado desde Win95 a WinXP.

La aplicación se vale de recursos gráficos para mostrar el estado del puerto. Muestra el conector DB-25 (Macho o Hembra) indicando con colores el valor de cada bit asociado a cada pin. Al hacer click en los pines de salida se modifica el estado del bit asociado al valor opuesto (de cero a uno y viceversa) generando un sonido, se puede cambiar el conector hembra a macho y viceversa. Un botón despliega información referente al puerto paralelo con un circuito de ejemplo con el cual se puede poner a prueba esta aplicación. Esta información puede ser impresa desde la misma ventana de información.

En la ventana principal muestra el valor del estado de cada registro del puerto en forma decimal, hexadecimal y binario. En la barra de estado muestra si el conector de la grafica es macho o hembra de acuerdo a la orientación de los pines.

Se utilizó la función sndPlaySound para reproducir los sonidos en la aplicación.

LPT1XP utiliza la librería io.dll (incluida) para comunicarse con dicho puerto.
De esta librería se utilizaron las funciones PortOut (subrutina) y PortIn (funcion).

Nota:  Este software es un prototipo, como tal queda bajo responsabilidad del usuario final el cometido que este le quiera dar.  En caso de realizar el circuito de ejemplo, hay que tener en cuenta que una mala conexión puede dañar su equipo parcial o totalmente.  En caso de tener dudas, pregunte primero y trate de conseguir información por medios alternos, lo mas que sea posible.



Autor: DrakerDG

16
Hardware / Re: Pci Express
« en: Lunes 26 de Septiembre de 2005, 05:27 »
Citar
pues la verdad hermano no entendi y te pido que me disculpes ............ estas hablando respecto a las tarjetas de video con respecto a que??? al procesador o a las pci express

Pues la verdad es que yo tampoco muy te entendí RadiXzz.  Lo que probablemente quieres decir es que depende del procesador que se compre, así son las trarjetas madres que se pueden comprar para tener un buen desempeño y compatibilidad, que en algunos casos (de procesadores) si se pueden comprar con tecnología PCI-E y en otros nó.  

En lo personal lo que sé sobre PCI-E es que es un nuevo tipo de slot con mejores capacidades que su predecesor, pero que no son compatibles entre sí y exige que las tarjetas de expansión sean capaces de soportar esta tecnología.

Esta versión es relativamente nueva y está propensa a la aceptación del consumidor, pero su tendencia es a substituir tecnologías que están llegando a su máxima capacidad de desarrollo, como mencionó  Jonathan, en este caso el AGP.

17
Hardware / Re: Les Pido Ayuda Por Favor
« en: Domingo 25 de Septiembre de 2005, 13:23 »
:comp: Verifica lo siguiente:

Código: Text
  1.  
  2. Software:
  3. 1.  La versión del driver de la tarjeta sea el mas actual.
  4. 2.  Que tengas instalado la última versíon de DirectX 9.
  5. 3.  Verifica que tu windows esté actualizado, mínimo con el SP2.
  6.  
  7.  
  8.  

Código: Text
  1.  
  2. Hartware:
  3. 1.  Desconecta la tarjeta del motherboard y de ser posible limpia el slot con aire comprimido.
  4. 2.  Conecta nuevamente la tarjeta y verifica que este en la posicíon correcta, que no esté inclinada ni forsada hacia ningun lado, incluso en el momento de asegurarla.
  5.  
  6.  
  7.  

Código: Text
  1.  
  2. NOTA:  Toma todas las precausiones necesarias antes de abrir tu PC, desconecta todos los conectores externos (Poder, monitor, mouse, teclado, etc.).  Toca el chasis al mismo tiempo que extraes la tarjeta para evitar daños por descargas electrostáticas.
  3.  
  4.  
  5.  

Tambien puedes intentar instalarla desde cero, quitando los controladores de tu PC, quitando la tarjeta, reconectandola e instalndo los drivers de nuevo.

Espero te sean utiles estos consejos. :suerte:

18
Hardware / Re: Monitor Hercules
« en: Domingo 25 de Septiembre de 2005, 13:02 »
:comp: El del DB9 es el siguiente:

Código: Text
  1.  
  2. Monochrome Graphics Adapter (MGA)
  3. MGA - TTL (18.43 kHz - 720x350) 9 pin:
  4.  1 GND
  5.  2 Unused
  6.  3 Unused
  7.  4 Unused
  8.  5 Unused
  9.  6 Intensity
  10.  7 Video
  11.  8 H Sync TTL Positive
  12.  9 V Sync TTL Negative
  13.  
  14.  
  15.  

En el caso de DB15 creo que se puede utilizar la configuración del de VGA, pero no estoy seguro.

Código: Text
  1.  
  2. Video Graphics Adapter (VGA):
  3.  
  4. Note that IBM called VGA 'Video Graphics Array' probably in reference to the
  5. video memory.  However, we will use the more popular terminology since it
  6. agrees with the naming conventions of the other PC standards.
  7.  
  8. Original VGA (31.5 KHz - 640x480)/SVGA (35-37 KHz - 800x600) 15 pin sub D:
  9.  
  10.  1 Red (Analog)
  11.  2 Green (Analog)
  12.  3 Blue (Analog)
  13.  4 Reserved
  14.  5 Ground
  15.  6 Red   Return
  16.  7 Green Return
  17.  8 Blue  Return
  18.  9 No Connect
  19. 10 Ground
  20. 11 (ID0) GND (Color)
  21. 12 (ID1) NC (Color)
  22. 13 Horizontal Sync
  23. 14 Vertical  Sync
  24. 15 No Connect
  25.  
  26. Note: Monitor ID Lines ID1, ID0=NC, G for color; G, NC for Mono.  ID0 only may be used.
  27.  
  28. Mono VGA is similar using only the Green Video and Return.
  29.  
  30.  
  31.  

Conectado como monocromático quedaría:

Código: Text
  1.  
  2. Video Graphics Adapter (VGA) in mono:
  3.  
  4.  1 Unused
  5.  2 Video
  6.  3 Unused
  7.  4 Unused
  8.  5 GND
  9.  6 Unused
  10.  7 Intensity
  11.  8 Unused
  12.  9 Unused
  13. 10 Unused
  14. 11 Unused
  15. 12 Unused
  16. 13 H Sync TTL Positive
  17. 14 V Sync TTL Negative
  18. 15 Unused
  19.  
  20.  
  21.  

Esta útima configuración es hipotética, es como según pienso debería ser.

Espero te sea util :suerte:

19
Visual FoxPro / Re: Calcular Ancho De Textos
« en: Domingo 25 de Septiembre de 2005, 01:32 »
:D Es un placer :hola:

20
Visual FoxPro / Re: Calcular Ancho De Textos
« en: Sábado 24 de Septiembre de 2005, 15:03 »
:comp: Copie esto del help en español:

Código: Text
  1.  
  2. TXTWIDTH( ) (Función)
  3.  
  4. Devuelve la longitud de una expresión de caracteres con respecto al ancho promedio de carácter de una fuente.
  5.  
  6. Sintaxis
  7.  
  8. TXTWIDTH(cExpresión [, cNombreFuente, nTamañoFuente [, cEstiloFuente]])
  9.  
  10. Tipos devueltos
  11.  
  12. Numeric
  13.  
  14. Argumentos
  15.  
  16. cExpresión
  17.  
  18. Especifica una expresión de tipo carácter cuya longitud devuelve TXTWIDTH( ). Si sólo incluye cExpresión, se devuelve la longitud de la expresión de tipo Character para la fuente actual de la ventana principal de Visual FoxPro o de la ventana de resultado activa. Una fuente no proporcional siempre devuelve un valor igual al número de caracteres de cExpresión.
  19.  
  20. Incluya los argumentos opcionales cNombreFuente, nTamañoFuente y cEstiloFuente para determinar la longitud de una expresión de caracteres con una fuente, un tamaño de fuente o un estilo de fuente específicos.
  21.  
  22. cNombreFuente
  23.  
  24. Especifica el nombre de la fuente. Incluya cNombreFuente para devolver la longitud de una expresión de caracteres con una fuente específica.
  25.  
  26. nTamañoFuente
  27.  
  28. Especifica el número que corresponde al tamaño en puntos de la fuente. Incluya nTamañoFuente para devolver la longitud de una expresión de caracteres con un tamaño de fuente concreto.
  29.  
  30. cEstiloFuente
  31.  
  32. Especifica un estilo especial de fuente para la expresión de caracteres. cEstiloFuente es un código de estilo de fuente especificado por un carácter o un conjunto de caracteres. Se utilizará el estilo de fuente Normal si no se incluye cEstiloFuente. Éstos son los caracteres para cada estilo de fuente:
  33.  
  34. Carácter Estilo de fuente
  35. B Negrita
  36. I Cursiva
  37. N Normal
  38. O Contorno
  39. Q Opaco
  40. S Sombra
  41. - Tachado  
  42. T Transparente
  43. U Subrayado
  44.  
  45.  
  46. Puede incluir más de un carácter para especificar una combinación de estilos de fuente. Por ejemplo, BI especifica un estilo de fuente Negrita y Cursiva.
  47.  
  48. El comando siguiente muestra un mensaje con la fuente Courier normal de 24 puntos, centrado sobre la ventana principal de Visual FoxPro.
  49.  
  50. @ 25,(WCOLS( )-TXTWIDTH(¡Hola!','Courier ',24)*&#59;
  51.    FONTMETRIC(6,'Courier ',24)/FONTMETRIC(6))/2 &#59;
  52.    SAY '¡Hola!' FONT 'Courier ',24
  53.  
  54. Comentarios
  55.  
  56. TXTWIDTH( ) devuelve el número de caracteres que ocupa una expresión de caracteres cExpresión, basando en el ancho promedio de carácter de una fuente especificada (el ancho promedio de carácter de una fuente se llama fóxel). Utilice FONTMETRIC(6) para determinar el ancho promedio de carácter de una fuente.
  57.  
  58. Si no incluye una fuente en TXTWIDTH( ), el valor que devuelve TXTWIDTH( ) está determinado por la fuente actual de la ventana principal de Visual FoxPro si el resultado se dirige a la ventana principal de Visual FoxPro cuando se ejecuta TXTWIDTH( ). Si el resultado se está dirigiendo a una ventana definida por el usuario, el valor devuelto viene determinado por la fuente actual de la ventana.
  59.  
  60.  
  61.  

Código: Text
  1.  
  2. FONTMETRIC( ) (Función)
  3.  
  4. Devuelve los atributos de fuente de las fuentes instaladas actualmente en el sistema operativo.
  5.  
  6. Sintaxis
  7.  
  8. FONTMETRIC(nAtributo [, cNombreFuente, nTamañoFuente [, cEstiloFuente]])
  9.  
  10. Tipos devueltos
  11.  
  12. Numeric
  13.  
  14. Argumentos
  15.  
  16. nAtributo
  17.  
  18. Determina el atributo de fuente devuelto por FONTMETRIC( ). Si omite cNombreFuente, nTamañoFuente y cEstiloFuente, FONTMETRIC( ) devolverá un atributo para la fuente actual de la ventana de resultado activa.
  19.  
  20. La tabla siguiente muestra los valores de nAtributo y los atributos de fuente correspondientes devueltos.
  21.  
  22. nAtributo Atributo
  23. 1 Altura del carácter en píxeles
  24. 2 Elevación del carácter (unidades sobre la línea base) en píxeles
  25. 3 Caída del carácter (unidades bajo la línea base) en píxeles
  26. 4 Interlineado (separación entre líneas) en píxeles
  27. 5 Interlineado extra en píxeles
  28. 6 Ancho promedio del carácter en píxeles
  29. 7 Ancho máximo del carácter en píxeles
  30. 8 Peso de la fuente
  31. 9 Cursiva (0 = no, distinto de cero = sí)
  32. 10 Subrayado (0 = no, distinto de cero = sí)
  33. 11 Tachado (0 = no, distinto de cero = sí)
  34. 12 Primer carácter definido en la fuente
  35. 13 Último carácter definido en la fuente
  36. 14 Carácter predeterminado (sustituido por los caracteres que no estén en la fuente)
  37. 15 Carácter para dividir palabras
  38. 16 Densidad y familia
  39. 17 Juego de caracteres
  40. 18 Saliente (ancho extra agregado)
  41. 19 Aspecto horizontal para dispositivo de fuente
  42. 20 Aspecto vertical para dispositivo de fuente
  43.  
  44.  
  45. Para obtener más información sobre los valores numéricos devueltos por FONTMETRIC( ), consulte la función TEXTMETRIC en la Referencia del programador de Microsoft Windows.
  46.  
  47. cNombreFuente
  48.  
  49. Especifique el nombre de una fuente instalada.
  50.  
  51. nTamañoFuente
  52.  
  53. Especifique el tamaño del punto de la fuente especificada con cNombreFuente.
  54.  
  55. cEstiloFuente
  56.  
  57. Especifique un código de estilo de fuente para la fuente especificada con cNombreFuente. Si omite cEstiloFuente, FONTMETRIC( ) devolverá el atributo para el estilo de fuente Normal.
  58.  
  59. cEstiloFuente puede ser un carácter o una combinación de caracteres mostrada en la tabla de estilo de fuente siguiente. Por ejemplo, la combinación BI indica el estilo de fuente Cursiva Negrita.
  60.  
  61. Carácter Estilo de fuente
  62. B Negrita
  63. I Cursiva
  64. N Normal
  65. O Esquema
  66. Q Hueco
  67. S Sombra
  68. - Tachado
  69. T Transparente
  70. U Subrayado
  71.  
  72.  
  73. Comentarios
  74.  
  75. FONTMETRIC( ) devuelve atributos de fuente para la fuente actual en la ventana de resultado activa. WFONT( ) se puede utilizar para determinar la fuente de la ventana actual.
  76.  
  77.  
  78.  

Incluí esta tambien:

Código: Text
  1.  
  2. WFONT( ) (Función)
  3.  
  4. Devuelve el nombre, el tamaño o el estilo de la fuente actual de una ventana en Visual FoxPro para Windows.
  5.  
  6. Sintaxis
  7.  
  8. WFONT(nAtributoFuente [, NombreVentana])
  9.  
  10. Tipos devueltos
  11.  
  12. Character y Numeric
  13.  
  14. Argumentos
  15.  
  16. nAtributoFuente
  17.  
  18. Especifica el atributo de fuente que desea devolver.
  19.  
  20. Si nAtributoFuente es 1, WFONT( ) devolverá el nombre de la fuente actual para la ventana activa o la especificada.
  21.  
  22. Si nAtributoFuente es 2, WFONT( ) devolverá el tamaño de la fuente.
  23.  
  24. Si nAtributoFuente es 3, WFONT( ) devolverá un código que identifica el estilo de fuente.
  25.  
  26. El código de estilo de fuente es un carácter o un conjunto de caracteres que corresponde al estilo de fuente actual. Por ejemplo, si el estilo de fuente actual es Negrita Cursiva, WFONT(3) devolverá BI.
  27.  
  28. En la siguiente tabla se muestran los códigos de cada estilo de fuente:
  29.  
  30. Carácter Estilo de fuente
  31. B Negrita
  32. I Cursiva
  33. N Normal
  34. O Contorno
  35. Q Opaco
  36. S Sombra
  37. - Tachado  
  38. T Transparente
  39. U Subrayado
  40.  
  41.  
  42. NombreVentana
  43.  
  44. Especifica el nombre de la ventana cuya fuente, tamaño de fuente o estilo de fuente actuales desea determinar. En Visual FoxPro, también puede incluir el nombre de una barra de herramientas. Incluya la cadena vacía para devolver la fuente, el tamaño de fuente o el estilo de fuente actuales de la ventana principal de Visual FoxPro.
  45.  
  46. NombreVentana puede ser el nombre de una ventana definida por el usuario creada con DEFINE WINDOW o una ventana de edición de texto o memo.
  47.  
  48. También puede incluir el nombre de una ventana del sistema (Sesión de datos, Seguimiento, Depuración, etc.). WFONT( ) puede devolver atributos de fuente únicamente para una ventana del sistema que se haya abierto y esté actualmente visible u oculta. Si la ventana del sistema especificada está cerrada, Visual FoxPro genera un mensaje de error.
  49.  
  50. WFONT( ) devuelve la fuente, el tamaño de fuente o el estilo de fuente actuales de la ventana de resultado activa si se omite NombreVentana.
  51.  
  52.  
  53.  

Y un ejemplo:

Código: Text
  1.  
  2. Ejemplo de WFONT( ) (Función)
  3.  
  4. En el ejemplo siguiente se crea una ventana definida por el usuario llamada wFontChar. La ventana se activa y se muestran las características de su fuente en la ventana. Las características de la fuente se muestran luego en la ventana principal de Visual FoxPro.
  5.  
  6. CLEAR
  7. DEFINE WINDOW wFontChar&#59;
  8.    FROM 1,1 TO 3,35&#59;
  9.    FONT 'MS SANS SERIF',8&#59;
  10.    STYLE 'BI'  && Define la ventana con fuente y estilo.
  11. ACTIVATE WINDOW wFontChar
  12. ? WFONT(1), WFONT(2), WFONT(3)  && Ventana wFontChar.
  13. ACTIVATE SCREEN
  14. ?
  15. ?
  16. ?
  17. ? ' Características de fuente para la ventana wFontChar'
  18. ?
  19. ?
  20. ? WFONT(1,''), WFONT(2,''), WFONT(3,'')  && Ventana principal de Visual FoxPro.
  21. ?
  22. ? 'Características de fuente para la ventana principal de Visual FoxPro'
  23. WAIT WINDOW
  24. RELEASE WINDOW wFontChar
  25. CLEAR
  26.  
  27.  
  28.  

Espero te sea útil :suerte:

21
Visual FoxPro / Re: Crear Tabla Desde Otra
« en: Viernes 23 de Septiembre de 2005, 20:28 »
:comp: No hay problema, de hecho hice el ejemplo porque tambien dude y quize asegurarme.  :hola:

22
Hardware / Re: Mi Monitor Ta De Colores
« en: Viernes 23 de Septiembre de 2005, 09:30 »
:comp: En efecto es muy probable que la pantalla de tu monitor esté magnetizada, y así como dice Jonathan se necesita una bobina desmagnetizadora.  

Lo que yo aconsejo es que antes te serciores de que no hay ningun dispositivo cerca de tu monitor que tenga un imán permanente, alguna bocina o lo que sea.  Puede ser que con tan solo retirarlo se solucione el problama, de no ser así sólo queda el uso de una bobina desmagnetizadora.

 :suerte:

23
Visual FoxPro / Re: Crear Tabla Desde Otra
« en: Viernes 23 de Septiembre de 2005, 09:12 »
:comp: El tipo de variable que almacena solo 255 caracteres es la tipo Character.  La variable tipo String puede almacenar miles, creo que la limitante es tu memoria RAM.  Para comprobar que si soporta grandes tamaños declare una variable tipo string en el evento Load de un form, es decir

Código: Text
  1.  
  2. *  En el evento Load del form
  3. PUBLIC sVariable as String   && Declara la variable tipo string
  4. sVariable = ""         && Inicializa la variable con una cadena vacía
  5.  
  6.  
  7.  

Agregue un EditBox, un par de Labels, un CommandButton y un Timer en el Form.

El eneto Timer de Timer1 escribí el siguiente código:

Código: Text
  1.  
  2. *  En el evento Timer del Timer1
  3. sVariable = sVariable + "0123456789"  && Agrega 10 caracteres cada vez.
  4. thisform.edit1.Value  = sVariable     && Estable la propiedad Value del EditBox con el contenido de la variable.
  5. thisform.label2.Caption = STR(LEN(sVariable)) + " Caracteres"  &&  Muestra el tamaño de la variable (Cantidad de caracteres)
  6.  
  7.  
  8.  

Establecí la propiedad enabled de Timer1 a .F. (False), para que no ejecutara el evento Timer al correr el Form.

En el evento Click del CommandButton escribí el código para habilidar y deshabilitar el Timer1.

Código: Text
  1.  
  2. * En el evento Click del CommandButton
  3. IF thisform.timer1.Enabled
  4.   this.Caption = "Iniciar..."
  5.   thisform.timer1.Enabled = .F.
  6. ELSE
  7.   this.Caption = "Parar..."
  8.   thisform.timer1.Enabled = .T.
  9. ENDIF
  10.  
  11.  
  12.  

Puedes utilizar una variable tipo string para almacenar la cantidad de caracteres que necesites.
Adjunte el formulario que te comento (Zip file), revisalo y me cuentas. :D

24
Visual FoxPro / Re: Crear Tabla Desde Otra
« en: Jueves 22 de Septiembre de 2005, 15:20 »
:comp: Puedes usar el macro & para ejecutar la instruccion desde un string, de la siguiente manera:

Código: Text
  1.  
  2. LOCAL ARRAY copia(2)  && Arreglo donde se almacenará la tabla original
  3. LOCAL xStg as String  && Variable donde se almacenará la instruccion, en este caso CREATE...
  4. *  Para efectos del ejemplo crea una tabla con un campo llamado Registro.
  5. CREATE TABLE Tabla1&#59;
  6.    (Registro c(50))
  7. SELECT Tabla1  && Selecciona la tabla
  8. APPEND BLANK   && Crea un registro
  9. replace Registro WITH "Tamaño"  && Lo llena con el nombre Tamaño (relativo a tu consulta)
  10. APPEND BLANK   && Crea un registro
  11. replace Registro WITH "Tipo"  && Lo llena con el nombre Tipo (relativo a tu consulta)
  12. USE && Cierra la tabla
  13. *  Consulta la tabla para almacenarla en el arreglo "copia"
  14. SELECT *&#59;
  15.   FROM Tabla1&#59;
  16.   INTO ARRAY copia
  17.  
  18. SELECT tabla1
  19. USE &&  cierra el cursor de la Tabla1 (abierto por la consulta)
  20. *  Crea la instrucción para crear la Tabla2 en un string
  21. xStr = "CREATE TABLE Tabla2 (" + ALLTRIM(copia(1)) + " i," + ALLTRIM(copia(2)) + " c(50))"
  22. &xStr && Ejecuta el macro (Este ejecuta lo que esta almacenado en xStr)
  23. SELECT Tabla2 &&  Selecciona la tabla
  24. USE && Cierra la tabla
  25.  
  26. *NOTA:  Las tablas fueron creadas en el directorio actual por defecto.
  27.  
  28.  
  29.  

Espero te sirva. :hola:

25
Visual Basic 6.0 e inferiores / Re: Capturar Solo Ventana Activa
« en: Jueves 22 de Septiembre de 2005, 14:28 »
:comp: Para capturar la ventana activa manualmente se usa alt+prtscr, utilizando SentKeys sería %{PRTSC}, pero no funciona, entonces se puede utilizar el API con el siguiente procedimiento:

Código: Text
  1.  
  2. Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal _
  3.   bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
  4. Private Const KEYEVENTF_KEYUP = &H2
  5. Private Const VK_SNAPSHOT = &H2C
  6. Private Const VK_MENU = &H12
  7.  
  8.  
  9.  

Puedes crear un procedimiento de la siguiente manera:

Código: Text
  1.  
  2. Sub AltPrtScr()
  3.     keybd_event VK_MENU, 0, 0, 0
  4.     keybd_event VK_SNAPSHOT, 0, 0, 0
  5.     keybd_event VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0
  6.     keybd_event VK_MENU, 0, KEYEVENTF_KEYUP, 0
  7.    
  8. End Sub
  9.  
  10.  
  11.  

Lo llamas y listo. Revisa el codigo adjunto  :hola:

Páginas: [1] 2 3