Page 1 sur 1

Comment lire les |

Publié : dim. 15/mai/2016 17:34
par microdevweb
Bonjour,

Imaginons que j'écrive dans une variable à la manière des constantes PureBasic

Exemple:

Code : Tout sélectionner

key=#PB_Shortcut_Control|#PB_Shortcut_Alt|#PB_Shortcut_S
J'aimerais pouvoir lire les constantes (valeurs) une à une et dans l'ordre, cela doit être tous simple, mais moi et les opérateurs binaire....

Merci d'avance

Re: Comment lire les |

Publié : dim. 15/mai/2016 19:02
par Micoute
FindString() à tout hasard.

Re: Comment lire les |

Publié : dim. 15/mai/2016 19:05
par Fig
Désolé mais je ne comprends pas l’intérêt... Tu as les 3 constantes... heu... :?

Re: Comment lire les |

Publié : dim. 15/mai/2016 19:10
par falsam
Micoute a écrit :FindString() à tout hasard.
FindString pour une variable numérique ? ^^

Tout comme fig, Micro il va falloir développer un peu plus.

Re: Comment lire les |

Publié : dim. 15/mai/2016 19:15
par Fig

Code : Tout sélectionner

key=#PB_Shortcut_Control|#PB_Shortcut_Alt|#PB_Shortcut_S
De toute façon, les 3 constantes n'ont plus d'existence une fois le programme compilé.
Le compilateur fait le calcul avant la compilation puisque ce sont des valeurs fixes.
Par conséquent, il est vain d'essayer des les extraire de la variable key.

Re: Comment lire les |

Publié : dim. 15/mai/2016 20:00
par microdevweb
C'est pour faire une gestion de Shortcut, je pensais cela possible... Maintenant si vous me dites que non je verrais à faire autrement.

Re: Comment lire les |

Publié : dim. 15/mai/2016 20:06
par Shadow
A tout hasard:

Essais ça:

Code : Tout sélectionner

If key & #PB_Shortcut_Control & #PB_Shortcut_Alt & #PB_Shortcut_S
EndIf
Exemple:

Code : Tout sélectionner

  Option.i = #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered | #PB_Window_TitleBar

  If Option.i & #PB_Window_SystemMenu & #PB_Window_TitleBar
    Debug 2
    
  EndIf
  
  If Option.i & #PB_Window_MinimizeGadget & #PB_Window_MinimizeGadget
    Debug 3
    
  EndIf
  
  If Option.i & #PB_Window_ScreenCentered
    Debug 4
    
  EndIf
  
  If Option.i & #PB_Window_MinimizeGadget & 1
    Debug 5
    
  EndIf
  
  If Option.i & #PB_Window_TitleBar
    Debug 6
    
  EndIf
C'est assez compliqué mais avec les constantes PB ça fonctionne, avec des constante perso, moins sur !
Sinon si c'est pas se que tu veux, sache que c'est pas possible je crois comme dit Fig:
Le compilateur fait le calcul avant la compilation puisque ce sont des valeurs fixes.
Par conséquent, il est vain d'essayer des les extraire de la variable key.

Re: Comment lire les |

Publié : dim. 15/mai/2016 22:19
par microdevweb
Bien essayé shadow, cela aurait pu marché comme le fait la commande

GetGadgetItemState

Par contre le teste ci-dessous n'est pas concluant

Code : Tout sélectionner

key=#PB_Shortcut_Control|#PB_Shortcut_Alt|#PB_Shortcut_N

If key & #PB_Shortcut_Control
    Debug "True"
Else
    Debug "False"
EndIf ; Return True
If key & #PB_Shortcut_Alt
    Debug "True"
Else
    Debug "False"
EndIf ;Return True
If key & #PB_Shortcut_Control|#PB_Shortcut_Alt
    Debug "True"
Else
    Debug "False"
EndIf ; Return True
If key & #PB_Shortcut_Control|#PB_Shortcut_Shift
    Debug "True"
Else
    Debug "False"
EndIf ; Return True (la c'est un hic)
If key & #PB_Shortcut_Shift
    Debug "True"
Else
    Debug "False"
EndIf ; Return False 
If key & #PB_Shortcut_N
    Debug "True"
Else
    Debug "False"
EndIf ; Return True 
If key & #PB_Shortcut_A
    Debug "True"
Else
    Debug "False"
EndIf ; Return True (la c'est un hic)

Re: Comment lire les |

Publié : dim. 15/mai/2016 22:44
par Bill Gates
Les bases de la programation...

Code : Tout sélectionner


#CONST_A = $0001
#CONST_B = $0010
#CONST_C = $0100
#CONST_D = $1000

Var.l = #CONST_B | #CONST_D

If Var & #CONST_A
  Debug "A!"
EndIf 

If Var & #CONST_B
  Debug "B!"
EndIf 

If Var & #CONST_C
  Debug "C!"
EndIf 

If Var & #CONST_D
  Debug "D!"
EndIf 

If (Var & #CONST_B) And (Var & #CONST_D)
  Debug "B & D!"
EndIf  
vos constantes / variable doivent avoir des valeurs cohérentes pour un "bit masking".

Re: Comment lire les |

Publié : dim. 15/mai/2016 23:36
par microdevweb
@Bill Gates,

Bon à savoir merci

Re: Comment lire les |

Publié : lun. 16/mai/2016 7:13
par Micoute
Veuillez m'excuser pour l'aberration que j'ai pu écrire, évidemment FindString() ne peut fonctionner pour les string. A quand le FindNum() ?

Re: Comment lire les |

Publié : lun. 16/mai/2016 10:34
par blendman
@Micro : l'autre possibilité, si tu as des constantes diverses (donc, le code précédent ne marcherait pas), c'est de convertir ta key en string, puis d'utiliser le findstring() comme Micoute l'a suggéré ;)

Code : Tout sélectionner

key=#PB_Shortcut_Control|#PB_Shortcut_Alt|#PB_Shortcut_N
key$ = Str(#PB_Shortcut_Control)+"|"+Str(#PB_Shortcut_Alt)+"|"+Str(#PB_Shortcut_N)

Debug key$

If FindString(key$,Str(#PB_Shortcut_Control))
    Debug "ctrl !"
Else
    Debug "False pour ctrl"
EndIf

If FindString(key$,Str(#PB_Shortcut_Alt))
    Debug "alt !"
EndIf

If FindString(key$,Str(#PB_Shortcut_N)) 
    Debug "N !"
EndIf

If FindString(key$,Str(#PB_Shortcut_Control)) And FindString(key$,Str(#PB_Shortcut_Alt)) 
    Debug "ctrl|alt !"
EndIf

If FindString(key$,Str(#PB_Shortcut_Control)) And FindString(key$,Str(#PB_Shortcut_Shift)) 
    Debug "ctrl|alt !"
Else
    Debug "pas shift | ctrl"
EndIf

If FindString(key$,Str(#PB_Shortcut_Shift)) 
    Debug "shift Ok !"
Else
    Debug "pas shift"
EndIf

If FindString(key$,Str(#PB_Shortcut_A)) 
    Debug "A Ok !"
Else
    Debug "pas A"
EndIf
ça n'est pas top, mais ça marche ^^.

Après dans ton programme, j'imagine que tu vérifie si on appuies sur une série de touche.
Ce que je fais personnellement, pour vérifier l'action sur les touches, c'est de conserver certaines comme ctrl, shift et alt, et de vérifier les autres ensuite :

Code : Tout sélectionner

If Ctrl = 1    
    If alt = 1
        If shift = 1
            
        Else 
            
        EndIf
    Else
        
    EndIf
Else
    If alt = 1
        If shift = 1
            
        Else 
            
        EndIf
    Else
        
    EndIf
EndIf
Ce n'est pas top non plus, mais ça fonctionne aussi ^^.

Re: Comment lire les |

Publié : lun. 16/mai/2016 11:16
par Ar-S
Salut les copains.
Tu peux les convertir en string comme l'a suggéré Blendman et utiliser stringfield, il est fait pour ça.

Code : Tout sélectionner

Debug "Val des constantes : "
key=#PB_Shortcut_Control|#PB_Shortcut_Alt|#PB_Shortcut_N
Debug key
Debug""
Debug "Conversion en String"
key$ = Str(#PB_Shortcut_Control)+"|"+Str(#PB_Shortcut_Alt)+"|"+Str(#PB_Shortcut_N)
Debug Key$
Debug ""
Debug "Extraction"
For i = 1 To CountString(key$,"|")+1
  Debug StringField(Key$,i,"|")
Next

Re: Comment lire les |

Publié : lun. 16/mai/2016 18:09
par microdevweb
Mercie Ar-s et Blendman,

Mais j'ai opté pour une liste.

Re: Comment lire les |

Publié : mar. 17/mai/2016 9:46
par Fig
microdevweb a écrit :C'est pour faire une gestion de Shortcut, je pensais cela possible... Maintenant si vous me dites que non je verrais à faire autrement.
Haaaaaa c'est plus clair avec l'explication. :mrgreen:

Tu peux faire comme ça, même si c'est trop tard...

Code : Tout sélectionner

key=#PB_Shortcut_Control|#PB_Shortcut_Alt|#PB_Shortcut_S|#PB_Shortcut_Shift

If key&#PB_Shortcut_Control:Debug "control pressé":EndIf
If key&#PB_Shortcut_Alt:Debug "Alt pressé":EndIf
If key&#PB_Shortcut_Shift:Debug "Shift pressé":EndIf
 Debug "touche : "+Chr(key) ;pas besoin de masquer car chr tronque lui-même les bits inutiles....
Comme le dit Billou, il faut que les masques soient adaptés. Heureusement c'est le cas pour les touches Ctrl, shift et Alt par exemple. Ca ne fonctionne pas si tu presse 2 touches alphanumériques ensemble par contre (ou alors par hasard)