Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour,
J'aimerais savoir s'il serait possible de mettre le focus sur le bouton d'une DW..
C'est assez embêtant de ne pas pouvoir appuyer sur "Enter" pour passer à une autre page, et devoir cliquer absolument sur le bouton par exemple..
Et les boutons ne sont pas repris dans le "Tab Order"..
Voilà, je utilise PB 10.2.1
Merci!
Dernière modification par micmx (17-04-2009 11:04:10)
Hors ligne
Bonjour,
Tu peux ajouter à ton contrôle datawindow l'événement personnalisé pbm_dwnkey et ajouter le code suivant par exemple :
IF key = KeyEnter! THEN this.ScrollNextPage()
Hors ligne
Hmm peut être que je me suis mal exprimé.
Pour l'instant j'ai, sur l'évènement clicked(..) de ma DW :
int li_retour if(dwo.name='b_valider') then this.accepttext( ) if(f_controlform(this)) then ... .. .
Est-ce que ta méthode peut remplacer ceci ?
J'ai cette erreur lorsque j'essaye :
incompatible types in expression : integer , keycode
Hors ligne
Pour simplifier ton code, il existe deux événements dédiés lorsqu'on clique sur un bouton buttonclicking et buttonclicked. Je te conseille de déplacer ton code dans l'événement ButtonClicked.
A ce moment la, tu pratiques de la façon suivante dans l'événément pbm_dwnkey :
IF key = KeyEnter! THEN this.PostEvent("ButtonClicked")
Hors ligne
Ok
Mais ça ne résout pas le problème d'incompatibilité de "key"
Il attend un int et reçoit un "keycode" :s
KeyDown is not a standard PowerBuilder DataWindow event. To write a script for this event, you must first define a user-defined event for the event ID pbm_dwnkey.
Argument Description
key Integer by value.
keyflags UnsignedLong by value. The modifier keys that are pressed. The keyflags value is the sum of the values for all the pressed keys.Key values are:· 1 Shift key· 2 Ctrl key· 3 Shift + Ctrl keys
Hors ligne
Je n'ai rien dit , désolé !!!
C'est la première fois que j'utilise les Event ID :P
ça marche nickel merci.
Par contre, avec cette méthode, vu que le focus n'a aucune importance, comment faire pour plusieurs boutons ?
Par exemple "Valider" "Annuler"
(je sais, on pourrait tester si la touche est enter ou escape dans ce cas, mais c'est un exemple, imaginons que je dois appuyer sur enter dans les deux cas)
une solution?
Dernière modification par micmx (17-04-2009 10:12:16)
Hors ligne
Bonjour,
Il y a une petite inexactitude dans la documentation.Les arguments de cet événement sont :
keycode key
unsignedlong keyflags
Le keycode pour la touche entrée est : KeyEnter! (ne pas oublier le point d'exclamation)
IF key = KeyEnter! THEN this.PostEvent("ButtonClicked")
Je viens de faire le test sur un petit "sample" ça fonctionne sans problème.
A priori, nous étions en train de répondre en même temps.
Hors ligne
Bonjour,
Oui, c'est pourquoi j'ai rajouté un commentaire ^^
micmx a écrit:
ça marche nickel merci.
Par contre, avec cette méthode, vu que le focus n'a aucune importance, comment faire pour plusieurs boutons ?
Par exemple "Valider" "Annuler"
(je sais, on pourrait tester si la touche est enter ou escape dans ce cas, mais c'est un exemple, imaginons que je dois appuyer sur enter dans les deux cas)
une solution?
Hors ligne
Tu me parais un peu tordu. Tu veux annuler ou valider en appuyant sur la touche Enter ?
Il te faut forcément un critère permettant au programme de choisir la bonne option selon la situation.
Hors ligne
Non non, j'ai mis que c'était un exemple ^^
Si par exemple, dans ma DW grid, j'ai pour chaque ligne :
Nom(text) Prénom(text) Supprimer(bouton)
Je peux voyager avec le taborder, de nom en nom mais je ne peux pas positionner le focus sur un bouton !
et c'est ce que je souhaitais faire, pouvoir me placer sur un bouton avec le clavier et appuyer sur enter pour le valider..
Désolé si je me suis mal exprimé
Hors ligne
Dans ce cas, le numéro de ligne peut devenir ton critère. Tu peux transformer l'événement personnalisé pbm_dwkey par le code suivant :
dwobject dwo IF key = KeyEnter! THEN Event ButtonClicked(this.GetRow(),0, dwo)
Dans l'événement ButtonClicked, tu connais maintenant le numéro de ligne concernée par la frappe de la touche Enter et tu peux agir en conséquence.
Hors ligne
okok merci beaucoup pour ton aide!
Hors ligne