Comment lire les |

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Comment lire les |

Message 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
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
Micoute
Messages : 2583
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Comment lire les |

Message par Micoute »

FindString() à tout hasard.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Re: Comment lire les |

Message par Fig »

Désolé mais je ne comprends pas l’intérêt... Tu as les 3 constantes... heu... :?
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Comment lire les |

Message 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.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Re: Comment lire les |

Message 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.
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Comment lire les |

Message 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.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: Comment lire les |

Message 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.
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Comment lire les |

Message 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)
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
Bill Gates
Messages : 14
Inscription : lun. 19/juil./2010 19:17

Re: Comment lire les |

Message 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".
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Comment lire les |

Message par microdevweb »

@Bill Gates,

Bon à savoir merci
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
Micoute
Messages : 2583
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Comment lire les |

Message 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() ?
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Comment lire les |

Message 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 ^^.
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Comment lire les |

Message 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
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Comment lire les |

Message par microdevweb »

Mercie Ar-s et Blendman,

Mais j'ai opté pour une liste.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Re: Comment lire les |

Message 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)
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Répondre