In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

¿Como hacer esto?

Foro de Xailer profesional en español
Responder
jrcpoli
Mensajes: 240
Registrado: Mié Oct 25, 2006 8:55 pm

¿Como hacer esto?

Mensaje por jrcpoli »

Saludos:
Estoy usando un aparato externo que para leerlo utilizo una DLL que
suministra el fabricante del aparato, el tema del uso del mismo con la
DLL esta resuelto gracias a la ayuda de José Lalí­n así­ que por esa parte
sin problemas mi pregunta va en la forma de implementar uno de los
valores que devuelve para saber los puertos que están abiertos en el
ordenador ya que emplea una técnica que es la que debo implementar, la
casa suministra para que sepas como lo hace el siguiente código para
Visual Basic.
Private Sub Command3_Click()
Dim puertos As Long
'This function try to open till 6 ComPorts and returns the open_com_port
'// COMPort 6 5 4 3 2 1 open_port_code F..Free = 1 N..Not Free = 0
'// N N N N N N 0
'// N N N N N F 1
'// N N N N F N 2
'// N N N F F F 3 ..
puertos = dll.check_com_port()
If (puertos And 32) = 0 Then
com6.Enabled = False
End If
If (puertos And 16) = 0 Then
com5.Enabled = False
End If
If (puertos And 8) = 0 Then
com4.Enabled = False
End If
If (puertos And 4) = 0 Then
com3.Enabled = False
End If
If (puertos And 2) = 0 Then
com2.Enabled = False
End If
If (puertos And 1) = 0 Then
com1.Enabled = False
MsgBox ("No hay puertos disponibles")
End If
End Sub
Si yo evalúo la variable puertos me devuelve en el caso de mi ordenador
el número 3 (puertos 1 y 2) que corresponde a la trasformación del valor
binario representado por 000011 que es tres en decimal, pero que quiere
decir que la posición primera y segunda son un uno y así­ seguirí­amos
hasta completar toda la gama de posibilidades, con arreglo a esto yo
necesito en un RadioMenu con los seis botones de los puertos,
deshabilitar los que no pueda usar el operador y de los que queden coger
por defecto en mas bajo de los que queden lEnabled.
Alguna idea, ya se que puedo hacer una función que evalúe las 32
posibilidades y según eso devolver un array con los puertos, pero viendo
la rutina que ellos emplean me parece demasiado.
El operador "And" en Visual Basic se emplea para evaluar la posición
binaria del número si corresponde a un uno un cero, ¿tendrí­a algo que
ver con el tema las Funciones de Aritmética de Bits ? si es así­ como
puedo emplearlas en este caso.
Gracias.
José Ramón Castro.
José Ramón Castro.
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

¿Como hacer esto?

Mensaje por jfgimenez »

José Ramón,
en Xailer puedes usar las funciones nAnd() y/o lAnd() para este propósito.
Sería algo así:
IF lAnd( puertos, 1 )
// activar primer radio
ENDIF
IF lAnd( puertos, 2 )
// activar segundo radio
ENDIF
IF lAnd( puertos, 4 )
// activar tercer radio
ENDIF
Date cuenta que lAnd() devuelve .T. si el resultado de aplicar el 'and' es
distinto de 0, es decir, si ese bit contreto está a 1. Por otro lado, nAnd()
devuelve el resultado de la operación 'and' de bits.
No obstante, en un RadioMenu no puedes activar o desactivar items concretos,
por lo tanto tendrás que usar controles TRadio individuales
--
Un saludo,
José F. Giménez
http://www.xailer.com
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
jrcpoli
Mensajes: 240
Registrado: Mié Oct 25, 2006 8:55 pm

¿Como hacer esto?

Mensaje por jrcpoli »

Gracias José F. Gimenez probaré haber el resultados con los dos
operadores y cambiaré el RadioMenu por RadioButton.
José Ramón Castro.
Jose F. Gimenez escribió:
> José Ramón,
>
> en Xailer puedes usar las funciones nAnd() y/o lAnd() para este propósito.
> Serí­a algo así­:
>
> IF lAnd( puertos, 1 )
> // activar primer radio
> ENDIF
> IF lAnd( puertos, 2 )
> // activar segundo radio
> ENDIF
> IF lAnd( puertos, 4 )
> // activar tercer radio
> ENDIF
>
> Date cuenta que lAnd() devuelve .T. si el resultado de aplicar el 'and' es
> distinto de 0, es decir, si ese bit contreto está a 1. Por otro lado, nAnd()
> devuelve el resultado de la operación 'and' de bits.
>
> No obstante, en un RadioMenu no puedes activar o desactivar items concretos,
> por lo tanto tendrás que usar controles TRadio individuales
>
José Ramón Castro.
Responder