Page 1 sur 3

Cette fenetre quelle "FOCUS" [Résolu]

Publié : mer. 11/févr./2009 18:22
par Kwai chang caine
Bonjour la famille
C'est moi :D

J'arrive encore pas a faire un truc tout bete
J'essaye de faire un demarrage comme on dit "Shifté", sauf que la c'est avec "Control"
C'est a dire que le programme demarre differement si on tiens la touche control au demarrage, comme Access avec le "shift"

Si je tiens le control, j'ai une demande de code autrement non.

Le probleme, c'est que quand je tiens le control, ma fenetre ou y'a le mot de passe perd le "FOCUS" :?
Et pas moyen de le lui remettre.
J'ai essayé SetFocus_ et quedal.

Si "quinquin" a une idée ou alors un code qu'il utilise pour ce genre de fonction, je lui ferais une grosse bise baveuse :D

Code : Tout sélectionner

Procedure.s InputBox(Prompt$, TexteDefaut$, Password)
 
 Enumeration
  #FormMsgBox
  #GadgetLabel
  #GadgetText
  #GadgetBoutonOk
 EndEnumeration
 
 Hwnd = OpenWindow(#FormMsgBox, 0, 0, 500, 100, "Entrée de données", #PB_Window_ScreenCentered|#PB_Window_BorderLess)
 TextGadget(#GadgetLabel, 15, 8, 460, 30, Prompt$, #PB_Text_Center) 
 
 If Password = 1 
  Flags = #PB_String_Password
 EndIf 
 
 StringGadget(#GadgetText, 15, 35, 460, 20, TexteDefaut$, Flags)
 ButtonGadget(#GadgetBoutonOk, 365, 70, 60, 23, "OK")
 StickyWindow(#FormMsgBox, #True) 
 Delay(500)
 SetFocus_(Hwnd)
    
 Repeat 
  
  Ev = WaitWindowEvent()
   
  If (Ev = #PB_Event_Gadget And EventGadget() = #GadgetBoutonOk) 
   Text$ = GetGadgetText(#GadgetText)
   Break
  EndIf 
  
 ForEver
 
 CloseWindow(#FormMsgBox) 
 ProcedureReturn Text$ 

EndProcedure 

If GetAsyncKeyState_(#VK_CONTROL) < 0
 CodeAcces$ = InputBox("Veuillez entrer le code d'acces", "", #True)
 Debug CodeAcces$
Else
 MessageRequester("Essai", "Ok pas de mot de passe") 
EndIf 
Merci de votre aide
Bonne soirée

Publié : mer. 11/févr./2009 19:16
par Patrick88
bin euh tel qu'il est ton code à l'air de marcher ?

je vois pas où est le problème ?

pat

Publié : mer. 11/févr./2009 19:27
par Le Soldat Inconnu
ta fenêtre à le focus par défaut, tu lui fais perdre avec ton SetFocus_(

Windows vérouille les actions tordu de ce genre
alors tu retires

et ça marche

il faut juste que tu donne le focus à ton gadget, pas le focus à la fenêtre

Code : Tout sélectionner

Procedure.s InputBox(Prompt$, TexteDefaut$, Password) 
  
  Enumeration 
    #FormMsgBox 
    #GadgetLabel 
    #GadgetText 
    #GadgetBoutonOk 
  EndEnumeration 
  
  hwnd = OpenWindow(#FormMsgBox, 0, 0, 500, 100, "Entrée de données", #PB_Window_ScreenCentered|#PB_Window_BorderLess) 
  TextGadget(#GadgetLabel, 15, 8, 460, 30, Prompt$, #PB_Text_Center) 
  
  If Password = 1 
    flags = #PB_String_Password 
  EndIf 
  
  StringGadget(#GadgetText, 15, 35, 460, 20, TexteDefaut$, flags) 
  ButtonGadget(#GadgetBoutonOk, 365, 70, 60, 23, "OK") 
  StickyWindow(#FormMsgBox, #True) 
  
  SetActiveGadget(#GadgetText)
  
  Repeat 
    
    Ev = WaitWindowEvent() 
    
    If (Ev = #PB_Event_Gadget And EventGadget() = #GadgetBoutonOk) 
      Text$ = GetGadgetText(#GadgetText) 
      Break 
    EndIf 
    
  ForEver 
  
  CloseWindow(#FormMsgBox) 
  ProcedureReturn Text$ 
  
EndProcedure 

If GetAsyncKeyState_(#VK_CONTROL) < 0 
  CodeAcces$ = InputBox("Veuillez entrer le code d'acces", "", #True) 
  Debug CodeAcces$ 
Else 
  MessageRequester("Essai", "Ok pas de mot de passe") 
EndIf

Publié : jeu. 12/févr./2009 10:01
par Kwai chang caine
Tout d'abord merci de vos reponses 8)

Oui mais je me suis fait avoir comme vous :cry:
C'est vraiment un "FAUX CUS" que j'ai :D
Moi je veux un FOCUS

En fait ce qui est fou c'est que ce soit avec le code de soldat ou le miens ça fait pareil.
J'ai un "FAUX CUS"....., en fait, on voit le curseur clignoter, alors on est drolement content, mais si on essaye de taper les touches du clavier.....et bin "niquezobi" y'a rien qui s'inscrit et la touche return non plus ne marche pas :?

Il faut cliquer la fenetre pour que l'on puisse ecrire
JE pense que c'est le fait de tenir appuyé la touche CTRL qui fait un "FAUX CUS" à la place du FOCUS :?

Publié : jeu. 12/févr./2009 18:34
par Stefou
Bon c'est un peu barbare mais ca marche....enfin chez moi !



J'ai bien cherché, utilisé un hook pour savoir quand la touche ctrl est lachée, mais cela reste aléatoire....

Alors je propose une boucle qui clique sur ta fenetre jusqu'a ce qu'elle ai le focus...Reste à mettre des securités au cas ou...

Code : Tout sélectionner

Procedure LeftMouseClick_XY(x,y, Delay=500)
  SetCursorPos_(x,y)
  mouse_event_(#MOUSEEVENTF_ABSOLUTE | #MOUSEEVENTF_LEFTDOWN, x,y,0,0)
  mouse_event_(#MOUSEEVENTF_ABSOLUTE | #MOUSEEVENTF_LEFTUP, x,y,0,0)
  If Delay>0
    Delay(Delay)
  EndIf
  
EndProcedure

Procedure.s InputBox(Prompt$, TexteDefaut$, Password) 
  
  Enumeration 
    #FormMsgBox 
    #GadgetLabel 
    #GadgetText 
    #GadgetBoutonOk 
  EndEnumeration 
  
  hwnd = OpenWindow(#FormMsgBox, 0, 0, 500, 100, "Entrée de données", #PB_Window_ScreenCentered|#PB_Window_BorderLess) 
  TextGadget(#GadgetLabel, 15, 8, 460, 30, Prompt$, #PB_Text_Center) 
  
  If Password = 1 
    flags = #PB_String_Password 
  EndIf 
  
  StringGadget(#GadgetText, 15, 35, 460, 20, TexteDefaut$, flags) 
  ButtonGadget(#GadgetBoutonOk, 365, 70, 60, 23, "OK") 
  StickyWindow(#FormMsgBox, #True) 

  Repeat
    LeftMouseClick_XY(WindowX(#FormMsgBox),WindowY(#FormMsgBox),5)
  Until GetActiveWindow()=#FormMsgBox
  SetActiveGadget(#GadgetText)
  
  
  Repeat 
    
    Ev = WaitWindowEvent() 
    
    If (Ev = #PB_Event_Gadget And EventGadget() = #GadgetBoutonOk) 
      text$ = GetGadgetText(#GadgetText) 
      Break 
    EndIf 
    
  ForEver 
  
  CloseWindow(#FormMsgBox) 
  ProcedureReturn text$ 
  
EndProcedure 

If GetAsyncKeyState_(#VK_CONTROL) < 0 
  CodeAcces$ = InputBox("Veuillez entrer le code d'acces", "", #True) 
  Debug CodeAcces$ 
Else 
  MessageRequester("Essai", "Ok pas de mot de passe") 
EndIf

Publié : jeu. 12/févr./2009 21:59
par GeBonet
Ben voilà... Maintenant c'est complet ... Stefou... ça marche chez moi... Et j'y ai ajouté la partie pour terminer par ENTER... C'est aussi ce qu'il voulait le KCC :lol:

Code : Tout sélectionner

; ******************************************************************************************************************************
;       Ben Voilà en s'y mettant à plusieur TU peux encoder ton mots de passe... Et Terminer par ENTER si t'a envie...
; ******************************************************************************************************************************
;  Avec ceci tu peux faire ENTER à la fin de ton mot de passe.... Mais tu dois pointer ta souris dans le champ.. 
; Ou faire TAB si tu viens d'un autre champs...  
;
; ******************************************************************************************************************************
Enumeration
    #FormMsgBox
    #GadgetLabel
    #GadgetText
    #GadgetBoutonOk
EndEnumeration

Define.l Event, EventWindow, EventGadget, EventType

; *******************************************************************************************************
; Procédure qui permet de faire ENTER dans un "StringGadget"....  Routine venant du Forum... ! 
; *******************************************************************************************************
Procedure NouvelleProc( hwnd, msg,  wParam, lParam) 
    ; Ici on récupère l'adresse d'origine de la procédure grâce à la chaine qui l'identifie
    ; soit : "OriginProc" et le handle de la fenêtre voir la fonction SetProp. 
    OriginProc.l= GetProp_(hwnd, "OriginProc") 
    Select msg 
        Case #WM_CHAR 
            If wParam=$0D ; Le paramètre est CR (ENTER) alors...  
                ; 					  Simulation de la touche Tab qui permet de passer d'un champ à l'autre
                keybd_event_($09, 0, 0, 0) 
                keybd_event_($09, 0, #KEYEVENTF_KEYUP, 0) 
                ProcedureReturn 0 
            EndIf 
    EndSelect 
    ; On renvoie tous les autres évènements à la procédure d'origine. 
    ProcedureReturn CallWindowProc_(OriginProc,hwnd,msg,wParam,lParam) 
EndProcedure    
; *******************************************************************************************************
Procedure LeftMouseClick_XY(x,y, Delay=500)
  SetCursorPos_(x,y)
  mouse_event_(#MOUSEEVENTF_ABSOLUTE | #MOUSEEVENTF_LEFTDOWN, x,y,0,0)
  mouse_event_(#MOUSEEVENTF_ABSOLUTE | #MOUSEEVENTF_LEFTUP, x,y,0,0)
  If Delay>0
    Delay(Delay)
  EndIf
 
EndProcedure
;; *******************************************************************************************************
Procedure.s InputBox(Prompt$, TexteDefaut$, Password)
    
    ;#PB_Window_SizeGadget|#PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget|
    ;
    TypeFenetre=#PB_Window_ScreenCentered|#PB_Window_BorderLess 
    OpenWindow(#FormMsgBox, 0, 0, 500, 100, "Entrée de données", TypeFenetre)
        
    TextGadget(#GadgetLabel, 15, 8, 460, 30, Prompt$, #PB_Text_Center)
    ;
    If Password = 1
        Flags = #PB_String_Password
    EndIf
    ;
    StringGadget(#GadgetText, 15, 35, 460, 20, TexteDefaut$, Flags)
    ButtonGadget(#GadgetBoutonOk, 365, 70, 60, 23, "OK")
    StickyWindow(#FormMsgBox, #True)
    ;       Substitue TAB à CR .... Si CR est activé...
    OriginProc = SetWindowLong_(GadgetID(#GadgetText), #GWL_WNDPROC, @NouvelleProc()) ;      
    SetProp_(GadgetID(#GadgetText), "OriginProc", OriginProc)                                                       
    ;   
    Repeat
        LeftMouseClick_XY(WindowX(#FormMsgBox),WindowY(#FormMsgBox),5)
    Until GetActiveWindow()=#FormMsgBox
    ;SetActiveGadget(#GadgetText)
    SetActiveGadget(#GadgetText)            ; Donne le focus à l'encodage password... (Fenetre à clicker) 
    ;
    Repeat
        Event = WaitWindowEvent()			    ; Commun à toute les fenêtre "Event" prend une valeur de l'ETAT de ce qui se passe dans la fenetre
        Select Event
                ; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            Case #PB_Event_Gadget			    ; vérification de l'état des "Gadgets" 
                EventGadget = EventGadget()   ; Chacun sont identitié par leur "EventGadget" qui réagissent en fonction de ce à quoi ils sont prévus... 
                EventType = EventType()		    ; Et ils ont un "EvenType" de réaction, ce qui permet de réagir en fonction de la réponse..... 
                ;                                                    Chaque évenement peut ainssi être controlé grace à ces indicateurs spécifique.
                If EventGadget = #GadgetText	; ***************************************************************************************************
                    Text$=GetGadgetText(#GadgetText)	             ; Expression qui aurait été entrée dans le "GadGetText"
                    If  EventType()=#PB_EventType_LostFocus ; Y a t'il Perte de Focus ??? 
                        ;Debug "Perte du focus."+Str(Cas)+" (Perte de Focus) ou "+Str(Etat)+" ="+Text$
                        Break                                                          ; Sortie du traitement 
                    EndIf											                  
                EndIf                    
             Case  #GadgetBoutonOk                                        ; Ou le bouton OK est actionné ?
                    Text$=GetGadgetText(#GadgetText)	             ; Expression qui aurait été entrée dans le "GadGetText"
        EndSelect       
    ForEver
    EventWindow = EventWindow()
    If EventWindow = #FormMsgBox
        ; -------------------------------------------------
      	;Supprimer avant fermeture du programme la donnée associée à la fenêtre. 
        RemoveProp_(GadgetID(#GadgetText),"OriginProc") 
        ; -------------------------------------------------
    EndIf        
    CloseWindow(#FormMsgBox)
    ProcedureReturn Text$

EndProcedure
;
CodeAcces$=""
If GetAsyncKeyState_(#VK_CONTROL) < 0
    CodeAcces$ = InputBox("Veuillez entrer le code d'acces", "", #True)
    Debug CodeAcces$
EndIf
If CodeAcces$="" 
    MessageRequester("Essai", "Ok pas de mot de passe")
EndIf 


A++
Voilà, voilà...
:lol: :lol: :lol:

Publié : jeu. 12/févr./2009 22:19
par GeBonet
Je vais essayer avec le Colorer de Dobro... Pour Voir...

 ******************************************************************************************************************************
; Ben Voilà en s'y mettant à plusieur TU peux encoder ton mots de passe... Et Terminer par ENTER si t'a envie...
; ******************************************************************************************************************************
; Avec ceci tu peux faire ENTER à la fin de ton mot de passe....
; Ou faire TAB si tu viens d'un autre champs...
;
; ******************************************************************************************************************************
Enumeration
     #FormMsgBox
     #GadgetLabel
     #GadgetText
     #GadgetBoutonOk
EndEnumeration

Define.l Event, eventwindow , eventgadget , eventtype

; *******************************************************************************************************
; Procédure qui permet de faire ENTER dans un "StringGadget".... Routine venant du Forum... !
; *******************************************************************************************************
Procedure NouvelleProc( hwnd, msg, wParam, lParam)
     ; Ici on récupère l'adresse d'origine de la procédure grâce à la chaine qui l'identifie
     ; soit : "OriginProc" et le handle de la fenêtre voir la fonction SetProp.
    OriginProc.l= GetProp_ (hwnd, "OriginProc" )
     Select msg
         Case #WM_CHAR
             If wParam=$0D ; Le paramètre est CR (ENTER) alors...
                 ; Simulation de la touche Tab qui permet de passer d'un champ à l'autre
                 keybd_event_ ($09, 0, 0, 0)
                 keybd_event_ ($09, 0, #KEYEVENTF_KEYUP , 0)
                 ProcedureReturn 0
             EndIf
     EndSelect
     ; On renvoie tous les autres évènements à la procédure d'origine.
     ProcedureReturn CallWindowProc_ (OriginProc,hwnd,msg,wParam,lParam)
EndProcedure
; *******************************************************************************************************
; ------------------------------------------ Stefou ------------------
; Simule le positionnement de la souris dans la fenêtre ce qui suffit pour activer la saisie donné par le focus
;
Procedure LeftMouseClick_XY(x,y, delay =500)
     SetCursorPos_ (x,y)
     mouse_event_ ( #MOUSEEVENTF_ABSOLUTE | #MOUSEEVENTF_LEFTDOWN , x,y,0,0)
     mouse_event_ ( #MOUSEEVENTF_ABSOLUTE | #MOUSEEVENTF_LEFTUP , x,y,0,0)
     If Delay>0
         delay ( delay )
     EndIf
 
EndProcedure
; ------------------------------------------ Stefou ------------------
;; *******************************************************************************************************
Procedure.s InputBox(Prompt$, TexteDefaut$, Password)
    
     ;#PB_Window_SizeGadget|#PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget|
     ;
    TypeFenetre= #PB_Window_ScreenCentered|#PB_Window_BorderLess
     openwindow ( #FormMsgBox , 0, 0, 500, 100, "Entrée de données" , TypeFenetre)
        
     textgadget ( #GadgetLabel , 15, 8, 460, 30, Prompt$, #PB_Text_Center )
     ;
     If Password = 1
        Flags = #PB_String_Password
     EndIf
     ;
     stringgadget ( #GadgetText , 15, 35, 460, 20, TexteDefaut$, Flags)
     buttongadget ( #GadgetBoutonOk , 365, 70, 60, 23, "OK" )
     stickywindow ( #FormMsgBox , #True )
     ; Substitue TAB à CR .... Si CR est activé...
    OriginProc = SetWindowLong_ ( gadgetid ( #GadgetText ), #GWL_WNDPROC , @NouvelleProc()) ;
     SetProp_ ( gadgetid ( #GadgetText ), "OriginProc" , OriginProc)
     ; ------------------------------------------ Stefou ------------------
     Repeat ; Marque la position et appel la simulation de position... "Click "...
        LeftMouseClick_XY( windowx ( #FormMsgBox ), windowy ( #FormMsgBox ),5)
     Until getactivewindow ()= #FormMsgBox
     ;
     setactivegadget ( #GadgetText ) ; Donne le focus à l'encodage password... (Fenetre à clicker)
     ;
     Repeat
        Event = waitwindowevent () ; Commun à toute les fenêtre "Event" prend une valeur de l'ETAT de ce qui se passe dans la fenetre
         Select Event
                 ; /////////////////////////////////////////////////////////////////////////////
             Case #PB_Event_Gadget ; vérification de l'état des "Gadgets"
                 eventgadget = eventgadget () ; Chacun sont identitié par leur "EventGadget" qui réagissent en fonction de ce à quoi ils sont prévus...
                 eventtype = eventtype () ; Et ils ont un "EvenType" de réaction, ce qui permet de réagir en fonction de la réponse.....
                 ; Chaque évenement peut ainssi être controlé grace à ces indicateurs spécifique.
                 If eventgadget = #GadgetText ; *******************************************************************
                    Text$= getgadgettext ( #GadgetText ) ; Expression qui aurait été entrée dans le "GadGetText"
                     If eventtype ()= #PB_EventType_LostFocus ; Y a t'il Perte de Focus ???
                         ;Debug "Perte du focus."+Str(Cas)+" (Perte de Focus) ou "+Str(Etat)+" ="+Text$
                        Break ; Sortie du traitement
                     EndIf
                 EndIf
              Case #GadgetBoutonOk ; Ou le bouton OK est actionné ?
                    Text$= getgadgettext ( #GadgetText ) ; Expression qui aurait été entrée dans le "GadGetText"
         EndSelect
    ForEver
     eventwindow = eventwindow ()
     If eventwindow = #FormMsgBox
         ; -------------------------------------------------
       ;Supprimer avant fermeture du programme la donnée associée à la fenêtre.
         RemoveProp_ ( gadgetid ( #GadgetText ), "OriginProc" )
         ; -------------------------------------------------
     EndIf
     closewindow ( #FormMsgBox )
     ProcedureReturn Text$

EndProcedure
; ======================================================================
CodeAcces$= ""
If GetAsyncKeyState_ ( #VK_CONTROL ) < 0
    CodeAcces$ = InputBox( "Veuillez entrer le code d'acces" , "" , #True )
     Debug CodeAcces$
EndIf
If CodeAcces$= ""
     messagerequester ( "Essai" , "Ok pas de mot de passe" )
EndIf
; = ============ = = = Et Voilà ================================================


Et c'est jolis ??? Non

Publié : ven. 13/févr./2009 8:10
par Kwai chang caine
Merci beaucoup les copains 8)

@STEFOU
J'avais pas pensé a simuler un clic souris :roll:
C'est vrai que c'est un peu bricolage, mais ça marche chez moi aussi, et c'est le principal.
Je vais quand meme poser la question sur le US, par curiosité, des fois que quelqu'un me sorte un mega lapin de son chapeau avec un hieroglyphe "queque" part 8O
Si c'est le cas je poserais la solution ici.
Autrement comme c'est une bonne idée, j'utiliserais ta solution qui me sort du caca :D

@GEBONET
Alors la, t'as sorti la grosse artillerie :D
Ca marche niquel pour le return.
Pour quelqu'un qui aime pas trop les API, j'suis épaté comment tu les utilise.

C'est de ma faute pour la touche return, comme dab j'ai simplifié pour présenter le probleme avec le moins de ligne possible, et j'en ai enlevé une de trop.

Code : Tout sélectionner

AddKeyboardShortcut(#FormMsgBox, #PB_Shortcut_Return, 13) ; Pour Return
Je m'excuse de t'avoir donné tout ce boulot.
Mais tu va pouvoir bientot faire partie de la FRED TEAM car tu viens de réinventer une fonction native de PB :wink:

Bon voila donc, grace à vous cette fonction.
Je l'ai réduite au plus simple, pour qu'elle soit plus comprehensive et si quelqu'un en a besoin un jour.

Code : Tout sélectionner

Procedure.s InputBox(Prompt$, TexteDefaut$) 
  
 Enumeration 
  #FormMsgBox 
  #GadgetLabel 
  #GadgetText 
  #GadgetBoutonOk 
 EndEnumeration 
 
 OpenWindow(#FormMsgBox, 0, 0, 500, 100, "Entrée de données", #PB_Window_ScreenCentered|#PB_Window_BorderLess) 
 TextGadget(#GadgetLabel, 15, 8, 460, 30, Prompt$, #PB_Text_Center) 
 AddKeyboardShortcut(#FormMsgBox, #PB_Shortcut_Return, 13) ; Pour Return
  
 StringGadget(#GadgetText, 15, 35, 460, 20, TexteDefaut$, #PB_String_Password) 
 ButtonGadget(#GadgetBoutonOk, 365, 70, 60, 23, "OK") 
 StickyWindow(#FormMsgBox, #True) 
 x = WindowX(#FormMsgBox)
 y = WindowY(#FormMsgBox)
 SetCursorPos_(x,y) 

 Repeat 
  mouse_event_(#MOUSEEVENTF_ABSOLUTE | #MOUSEEVENTF_LEFTDOWN, x, y, 0, 0) 
  mouse_event_(#MOUSEEVENTF_ABSOLUTE | #MOUSEEVENTF_LEFTUP, x, y, 0, 0) 
  Delay(10) 
 Until GetActiveWindow() = #FormMsgBox 
 
 SetActiveGadget(#GadgetText) 
   
 Repeat 
   
  Ev = WaitWindowEvent() 
  
  If (Ev = #PB_Event_Gadget And EventGadget() = #GadgetBoutonOk) Or (Ev = #PB_Event_Menu And EventMenu() = 13)
   Break 
  EndIf 
  
 ForEver 
 
 CodeAcces$ = GetGadgetText(#GadgetText) 
 CloseWindow(#FormMsgBox) 
 ProcedureReturn CodeAcces$
  
EndProcedure 

If GetAsyncKeyState_(#VK_CONTROL) < 0 
 Debug InputBox("Veuillez entrer le code d'acces", "") 
Else 
 MessageRequester("Essai", "Ok pas de mot de passe") 
EndIf
Merci beaucoup encore à tout les deux
Bonne journée

Publié : ven. 13/févr./2009 10:32
par GeBonet
Ben... pas de quoi.. Surtout que quand tu dis :
Kwai chang caine a écrit : C'est de ma faute pour la touche return, comme dab j'ai simplifié pour présenter le problème avec le moins de ligne possible, et j'en ai enlevé une de trop.

Code : Tout sélectionner

AddKeyboardShortcut(#FormMsgBox, #PB_Shortcut_Return, 13) ; Pour Return
Merci beaucoup encore à tout les deux
Bonne journée
Je ne pense pas que ce soit "seulement" de ta faute ! Car ce sujet de "Return" à déjà été abordé... Et là pour le compte il existe une possibilité simple de PB... Donc nous tous "adepte" de PB, devrions savoir que l'on peut faire faire Return dans un fenêtre sans avoir recours aux API...
Qui sont toujours un obstacle à la portabilité !

De plus et là je me réfère à la Doc :

Code : Tout sélectionner

AddKeyboardShortcut : Ajoute ou remplace un raccourci clavier pour la fenêtre spécifiée
Ors ici un raccouci clavier pour moi est une forme du Genre CTRL+QQchose, soit une composition qui sera lié à un ou plusieurs évènement...
Ors ici, c'est utilisé en disant : "ENTER est une combinaisons de touche qui doit simuler la touche native ENTER"...
Je trouve ça étrange... On replace l'étiquette ENTER sur la touche ENTER pour qu'elle fasse ce que normalement elle doit faire ???
:roll:

Publié : ven. 13/févr./2009 11:01
par Kwai chang caine
C'est vrai que on devrait penser portabilité.
Mais comme je sais que j'ai quasi aucune chance d'etre un jour sur LINUX (Trop compliqué pour moi) alors je ne me prive pas des API

Publié : ven. 13/févr./2009 11:44
par GeBonet
Il n'est pas question de s'en priver des API, c'est une vrai richesse supplémentaire. Mais de les utiliser quand c'est vraiment nécessaire... C'est une première chose.

Et deuxième chose : Ma remarque porte surtout sur le "détournement" d'une fonction extra "AddKeyboardShortcut" qui dit bien ce qu'elle doit faire.
Mais elle permet plus... Et c'est ce plus qui est exploité. Très bien, mais aucune trace dans la doc... Résultat on regarde la fonction pour ce qu'elle dit, et à priori pas pour faire faire à une touche du clavier ce qu'elle devrait normalement faire... D'où la recherche ailleurs d'une autre solution simple puisque le normal ne se fait pas.

Si j'utilise mon tournevis pour ouvrir mes boites de peinture et que mon fils ne me vois faire que cela avec...
Je devrais lui demander d'aller me chercher l'ouvre "boite de peinture" le jours ou j'aurais besoin du tournevis pour visser quelque chose. :lol:

J'aurais du lui expliquer que sa fonction première c'est de visser des vis et qu'a l'occasion vue sa forme, j'ouvre mes boite de peinture avec...

Le problème des explications, c'est qu'on postule toujours (souvent) que des choses évidentes pour vous sont des acquits pour les autres...

Résultat des incompréhension ou des documentation insuffisante... Alors c'est certain qu'il ne faut évidemment pas ré-expliquer toujours tout... Mais préciser des choses quand il y a sujet à interprétation c'est nécessaire...

Dans notre cas... Devoir dire à la fenêtre que la touche ENTER pour elle va agir comme touche ENTER me semble un peu fort...
Mais si il faut le faire OK. Mais alors il faut expliquer aussi que chaque fenêtre peut avoir ses touche spécifique... Non ? C'est que le nom de la fonction porte à confusion... "AddKeyboardShortcut", C'est bien ajoute un raccourci... Pourquoi pas a la place "DefKeyboardKey"... Là cela devient plus "universelle"... ? Ou préciser dans la documentation que avec cette fonction on peut aussi changer les affectations des valeurs de toute les touches du clavier et les combinaisons avec ALT, CTRL etc.

Publié : ven. 13/févr./2009 12:13
par Kwai chang caine
Remarque que de te lire, viens de me faire prendre conscience qu'on pouvait faire ecrire un E a la place du R (Par exemple) :roll:

C'est rigolo comme fonction :D
Encore du pain blanc pour les virus :cry:

En tout cas j'avais meme pas fait le rapprochement.
Mais si c'est genial de pouvoir reattribuer les touches du clavier, ça pourrait servir a plein de choses.
Mais je ne m'en etais jamais servi autrement que pour attribuer la touche enter au enter :oops:

Publié : ven. 13/févr./2009 13:02
par GeBonet
Question sans rapport !

J'ai sur ce forum... Français... Mes ligne qui n'arrête que si je vais à la ligne
Comme ceci...
J'ai fait enter ....
Mais cette ligne ci ................................ ne va pas s'arrêter à l'affichage parce que je n'aurais pas fait ENTER .... J'ai l'imprssion qu'il y a un problème avec le gestionnaire de page...

J'ai été voir chez les Anglais... Cela se redimensionne... Ici pas ?

Chez vous aussi ???

Apparemment en prévisualisation OK c'est en affichage de lecture que le problème se pose...

Publié : ven. 13/févr./2009 13:05
par Le Soldat Inconnu
c'est du a un code plus haut dans le sujet qui a une ligne très longue et comme le code est gardé tel quel

Publié : ven. 13/févr./2009 14:02
par gnozal
Je ne sais pas si j'ai bien compris le problème de KCC, mais ce code semble fonctionner lorsque je le compile depuis jaPBe :

Code : Tout sélectionner

Procedure.s InputBox(Prompt$, TexteDefaut$, Password) 
  
  Enumeration 
    #FormMsgBox 
    #GadgetLabel 
    #GadgetText 
    #GadgetBoutonOk 
  EndEnumeration 
  
  hwnd = OpenWindow(#FormMsgBox, 0, 0, 500, 100, "Entrée de données", #PB_Window_ScreenCentered|#PB_Window_BorderLess) 
  TextGadget(#GadgetLabel, 15, 8, 460, 30, Prompt$, #PB_Text_Center) 
  
  If Password = 1 
    flags = #PB_String_Password 
  EndIf 
  
  StringGadget(#GadgetText, 15, 35, 460, 20, TexteDefaut$, flags) 
  ButtonGadget(#GadgetBoutonOk, 365, 70, 60, 23, "OK") 
  StickyWindow(#FormMsgBox, #True) 

  ; ---------------------------------- 
  SetForegroundWindow_(hwnd) 
  SetActiveGadget(#GadgetText) 
  ; ---------------------------------- 
  
  Repeat 
    
    Ev = WaitWindowEvent() 
    
    If (Ev = #PB_Event_Gadget And EventGadget() = #GadgetBoutonOk) 
      Text$ = GetGadgetText(#GadgetText) 
      Break 
    EndIf 
    
  ForEver 
  
  CloseWindow(#FormMsgBox) 
  ProcedureReturn Text$ 
  
EndProcedure 

If GetAsyncKeyState_(#VK_CONTROL) < 0 
  CodeAcces$ = InputBox("Veuillez entrer le code d'acces", "", #True) 
  Debug CodeAcces$ 
Else 
  MessageRequester("Essai", "Ok pas de mot de passe") 
EndIf
La fenêtre a le focus et on peut saisir le mot de passe.