Página 1 de 1

¿Como hacer esto?

Publicado: Jue Oct 26, 2006 11:36 am
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.

¿Como hacer esto?

Publicado: Jue Oct 26, 2006 12:31 pm
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

¿Como hacer esto?

Publicado: Jue Oct 26, 2006 3:05 pm
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
>