Page 1 sur 1

GetAsyncKeyState_(#xxx) & $1

Publié : lun. 18/mars/2013 10:32
par Atlante
Hello,

Une petite question sur cette ligne de code.
Je comprends l'api Windows il 'y a pas de souci à ce niveau là mais je ne comprends pas le :

Code : Tout sélectionner

& $1
Ce la correspond a un et si la touche est appuyée ?

cdt,

Atlante

Re: GetAsyncKeyState_(#xxx) & $1

Publié : lun. 18/mars/2013 10:41
par falsam
Le code fonctionnera aussi sans le & $1 à condition d'avoir le doigt agile.
Place un debug "teste" juste aprés ton GetAsyncKeyState_(#xxx) & $1 et retite le & $1. Puis remet le.

Un peu de code qui affiche ou pas une fenêtre. Touche F8 pour activer ou désactiver cette fenêtre.

Code : Tout sélectionner

Enumeration
  #Mainform
  #MenuPopUp
EndEnumeration

Global MainformStatus.b

Procedure ShowHideWindow(*Value)
  Repeat
    If GetAsyncKeyState_(#VK_F8) & $1
      Debug "teste"
      If MainformStatus = #False
        HideWindow(#MainForm, #False)
        MainformStatus = #True
        
      Else
        HideWindow(#Mainform, #True)
        MainformStatus = #False
      EndIf
     
    EndIf
  ForEver
EndProcedure

OpenWindow(#MainForm, 100, 150, 300, 100, "SysTray Test", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)

CreatePopupMenu(#MenuPopUp)
MenuItem(0, "Afficher la fenetre")
MenuItem(1, "Quitter")

HideWindow(#Mainform, #True)

AddSysTrayIcon(1, WindowID(#Mainform), LoadIcon_(#Null, #IDI_WARNING))
SysTrayIconToolTip(1, "Touche F8" +#CRLF$+ "Pour afficher la fenetre")

CreateThread(@ShowHideWindow(), #Null)

Repeat
  
  Select WaitWindowEvent()    
    Case #PB_Event_Menu
      Select EventMenu()
        Case 0
          HideWindow(#Mainform, #False)
        Case 1
          End 
      EndSelect
      
    Case #PB_Event_SysTray
      If EventType() = #PB_EventType_LeftDoubleClick
        HideWindow(#Mainform, #False)
      EndIf
      
      If EventType() = #PB_EventType_RightClick
        DisplayPopupMenu(#MenuPopUp, WindowID(#Mainform))
      EndIf
      
      
    Case #PB_Event_CloseWindow
      End
      
  EndSelect
ForEver

Re: GetAsyncKeyState_(#xxx) & $1

Publié : lun. 18/mars/2013 11:27
par Atlante
j'avais déjà fait l'essai mais je souhaite juste savoir à quoi cela correspond.
Par exemple le : & = and dans la syntaxe PB
et le $1 pour donner 1 seconde ?

Re: GetAsyncKeyState_(#xxx) & $1

Publié : lun. 18/mars/2013 12:52
par Backup
en general le fait d'ajouter un "&" (qui est en fait un AND ) reviens a faire un masque !!

Code : Tout sélectionner


a$="1001"

debug a$
debug %1001&%01 ; ici on affiche que le "1" de fin... on a masqué tout le reste

debug bin(%1001&%1110) ; ici on affiche que le 1 du debut ..
; en clair on n'affiche que si c'est pareil que le masque ;)





;rappel :

 0 &  0  =    0
 0  &  1  =    0
 1  &  0  =    0
 1  &  1  =    1



au passage la Doc est mal faite car elle indique

0 | 0 | 0
0 | 1 | 0
1 | 0 | 0
1 | 1 | 1

le "|" se voulant etre une colonne et non pas le Or "|" ce qui porte a confusion
mon affichage ci dessus serai plus clair ;)

pour l'API le masque permet de ne tester QUE ce qui nous interresse ...
sinon l'info pourrai passer comme valable par exemple si le bit de fin est important ceci "100011" sans masque pourrai etre egal a "100111"
car sans masque le bit de fin est a 1 alors que le binaire est bien different

Re: GetAsyncKeyState_(#xxx) & $1

Publié : lun. 18/mars/2013 14:09
par Atlante
Tu as mis le doigt sur le problème dobro.
Je pense que j'ai une grosse lacune sur ce point là.

%1001&01 affiche que le 1 je pige à moitié car le second cas ne fonctionne pas avec mon raisonnement.

Déjà %1001 c'est le modulo sous PB ?

ensuite le masque 01 correspond bien à 0001 ?
Donc :
1001
0001
-----
0001

Mais pour le deuxième exemple cela ne fonctionne pas :
1001
0110
------
0000

Si tu pouvais m'apporter la lumière sur ce point ^^?
cdt,

Atlante

Re: GetAsyncKeyState_(#xxx) & $1

Publié : lun. 18/mars/2013 14:28
par GallyHC
Bonjour,

Dobro> Je vois pas le problème dans la doc de PB, moi j'ai :

LHS | RHS |Résultat
------------------
0 | 0 | 0
0 | 1 | 0
1 | 0 | 0
1 | 1 | 1

Ce qui me parait en réalité correcte? et dans ton exemple tu mets les même valeur ?

Cordialement,
GallyHC

Re: GetAsyncKeyState_(#xxx) & $1

Publié : lun. 18/mars/2013 14:28
par Backup
Atlante a écrit :Tu as mis le doigt sur le problème dobro.
Je pense que j'ai une grosse lacune sur ce point là.

%1001&01 affiche que le 1 je pige à moitié car le second cas ne fonctionne pas avec mon raisonnement.

Déjà %1001 c'est le modulo sous PB ?
oui , mais le signe % au debut d'un chiffre binaire sert aussi a désigner ce chiffre comme etant Binaire ! :)
ceci est un modulo : 10%5
ceci est un chiffre binaire %1001
tout comme "$" designe un chiffre hexa = $FF

ensuite le masque 01 correspond bien à 0001 ?
tout a fait ! :)
Donc :
1001
0001
-----
0001

Mais pour le deuxième exemple cela ne fonctionne pas :
1001
0110
------
0000

Si tu pouvais m'apporter la lumière sur ce point ^^?
cdt,

Atlante
oui , je me suis gourré dans la syntaxe , j'aurai du ecrire :

Code : Tout sélectionner


a$="1001"

debug a$
debug %1001&%01 ; ici on affiche que le "1" de fin... on a masqué tout le reste

debug bin(%1001&%1110) ; ici on affiche que le 1 du debut ..
; en clair on n'affiche que si c'est pareil que le masque ;)




bin() permet de transformer un decimal en binaire ... je me suis planté la dessus Sorry :)
( j'ai modifié mon exemple )

Re: GetAsyncKeyState_(#xxx) & $1

Publié : lun. 18/mars/2013 14:31
par Backup
GallyHC a écrit :Bonjour,

Dobro> Je vois pas le problème dans la doc de PB, moi j'ai :

LHS | RHS |Résultat
------------------
0 | 0 | 0
0 | 1 | 0
1 | 0 | 0
1 | 1 | 1

Ce qui me parait en réalité correcte? et dans ton exemple tu mets les même valeur ?

Cordialement,
GallyHC
oui , mais l'utilisation du caractere "|" fait confusion !! il est plus clair d'afficher

0 | 0 = 0
0 | 1 = 0
1 | 0 = 0
1 | 1 = 1

; le Signe "|" est le signe de (OR) il ne devrai donc pas apparaitre pour les autres Opérateur ...
sinon tel que c'est ecris , lorsque je vois ça :
0 | 0 | 0
moi je lis : 0 or 0 or 0 ...

Re: GetAsyncKeyState_(#xxx) & $1

Publié : lun. 18/mars/2013 14:42
par GallyHC
OK je n'avais pas vu cela comme tu l'explique, la c'est pas faut... On peut confondre avec le "OR" comme tu l'explique.

Cordialement,
GallyHC

Re: GetAsyncKeyState_(#xxx) & $1

Publié : lun. 18/mars/2013 15:45
par Atlante
Tout est plus clair sauf le $ devant le 1.
En fait j'ai cherché dans al doc mais je ne trouve rien qui dit que :

% devant variable = binaire
$ devant variable = ????
...

Je sais je suis chiant mais j'ai le droit aujourd'hui mdr

Re: GetAsyncKeyState_(#xxx) & $1

Publié : lun. 18/mars/2013 16:00
par GallyHC
Bonjour,

$ avant quelque chose permet juste d'écrire un nombre et hexadecimal donc :

0 = $0
1 = $1
2 = $2
3 = $3
...
10 = $a
11 = $b
12 = $c
...

un petit exemple :

Code : Tout sélectionner

Debug $100
Cordialement,
GallyHC

Re: GetAsyncKeyState_(#xxx) & $1

Publié : lun. 18/mars/2013 16:40
par Backup
Dobro a écrit : oui , mais le signe % au debut d'un chiffre binaire sert aussi a désigner ce chiffre comme etant Binaire ! :)
ceci est un modulo : 10%5
ceci est un chiffre binaire %1001
tout comme "$" designe un chiffre hexa = $FF
8O t'es peut etre miro :lol:

Bon anniversaire a Atlante , et au Psychopathe .. (tiens c'est marrant que vous soyez né le meme jour :mrgreen: )

Re: GetAsyncKeyState_(#xxx) & $1

Publié : lun. 18/mars/2013 19:24
par falsam
Dobro a écrit :(tiens c'est marrant que vous soyez né le meme jour :mrgreen: )
Tu ne vas quand même pas suspecter qu'atlante est aussi un technicien informatique à la Defense tout comme Psychopathe ? Si c'était vrai ça serait vraiment incroyable :mrgreen:

Re: GetAsyncKeyState_(#xxx) & $1

Publié : lun. 18/mars/2013 20:18
par Backup
:)

Re: GetAsyncKeyState_(#xxx) & $1

Publié : lun. 18/mars/2013 22:02
par Atlante
C'est vrai, cela serait vraiment incroyable quand même cette histoire mdr :D
Le pire dans tout ça que que je fais toujours du support info à la défense ^^
Sauf que je fais que du n2, ça fait plaisir de plus pousser son chariot avec les pc...


Dsl Dobro mais oui je pense que je suis miro ^^.