PB à toute heure et à tout moment. (à parcourir avec modération)

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 30-05-2012 12:37:19

seki  
0x73656B69
Award: bf
Lieu: Laquenexy & Luxembourg
Date d'inscription: 20-11-2008
Messages: 1118
Pépites: 4,296,080,204
Banque: 9,223,372,036,854,776,000
Site web

[RESOLU] ItemChanged non déclenché après l'appui de ESC

Bonjour tous,

j'ai un problème avec l'appui de la touche ESC en édition dans une DW; on fait un traitement générique sur nos DW consistant à rappeler la valeur précédente d'un champ lors de l'appui sur ESC. Cette partie fonctionne, sauf que visiblement dans la couche PB, la DW semble annuler un flag permettant de savoir si une édition est en cours quand on utilise ESC.

Du coup lorsque que je sors du champ, il n'y a pas de ItemChanged(), même si le traitement a remis une valeur qui n'est pas la valeur initiale du retrieve. Ça permet de modifier discrètement une valeur sans appeler les traitements ad-hoc. C'est pratique pour Madoff, mais moi j'aimerais bien remettre le flag "modif en cours".

SetItemStatus() ne semble pas pouvoir m'aider, ni la valeur de retour de l'évènement KeyDown() (pbm_dwnkey). Vous auriez une suggestion ?

Dernière modification par seki (31-05-2012 14:58:11)


The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

Mes réponses PB sur StackOverflow
http://stackoverflow.com/users/flair/317266.png

Hors ligne

 

#2 30-05-2012 14:07:09

foon  
N2iGeek + MangasGeek = foon
Award: bf
Lieu: Bonchamp-Lès-Laval
Date d'inscription: 28-02-2007
Messages: 2487
Pépites: 88
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] ItemChanged non déclenché après l'appui de ESC

Je suppose qu'il y a un acceptText() à la fin de ton traitement générique?


Seuls ceux qui ne font rien ne font jamais d'erreurs
http://www.nerdtests.com/images/badge/163124fb7fb459a3.gif

Hors ligne

 

#3 30-05-2012 14:19:19

seki  
0x73656B69
Award: bf
Lieu: Laquenexy & Luxembourg
Date d'inscription: 20-11-2008
Messages: 1118
Pépites: 4,296,080,204
Banque: 9,223,372,036,854,776,000
Site web

Re: [RESOLU] ItemChanged non déclenché après l'appui de ESC

Il n'y en avait pas (on le fait généralement plus tard, au moment de quitter la fenêtre ou à certains changements de focus pour forcer l'enregistrement des données), mais l'ajouter n'a rien changé.

Je suis en train de tenter la magie vaudou (rechercher via l'api la "fenêtre" de classe PBEDIT115 dans les enfants de ma DW; j'arrive à la trouver et en récupérer le contenu mais je n'arrive pas à lui appliquer des modifications qui seraient vues par la DW) mais je n'ai rien qui fonctionne pour le moment.


The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

Mes réponses PB sur StackOverflow
http://stackoverflow.com/users/flair/317266.png

Hors ligne

 

#4 30-05-2012 16:34:10

seki  
0x73656B69
Award: bf
Lieu: Laquenexy & Luxembourg
Date d'inscription: 20-11-2008
Messages: 1118
Pépites: 4,296,080,204
Banque: 9,223,372,036,854,776,000
Site web

Re: [RESOLU] ItemChanged non déclenché après l'appui de ESC

Bon, j'ai avancé un peu et voici où j'en suis :
- la DW semble ne recevoir aucun message windows concernant l'appui de touche (WM_KEYDOWN / WM_CHAR / WM_KEYUP)
- c'est le contrôle PBEDIT115 qui est affiché à l'emplacement d'une case de ma DW qui reçoit les messages
- on ne peut rien faire au niveau de l'évènement other() ou de keydown() puisque la touche a déjà été reçue et traitée par l'edit (on ne peut pas "refuser" une touche, c'est déjà fait)

Il faudrait que j'arrive à faire un SetItem() qui permette de recevoir l'ItemChanged() ou que j'arrive à envoyer quelque chose à l'édit pour lui faire croire que la modif vient de l'utilisateur...

Bon, dans l'immédiat je laisse tomber, PB a gagné smiley_687 sauf si quelqu'un me propose une idée géniale...


The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

Mes réponses PB sur StackOverflow
http://stackoverflow.com/users/flair/317266.png

Hors ligne

 

#5 31-05-2012 09:00:04

buck  
Modérateur
Lieu: Dijon
Date d'inscription: 31-07-2008
Messages: 747
Pépites: 1,028,843
Banque: 171,170,849,654

Re: [RESOLU] ItemChanged non déclenché après l'appui de ESC

Bonjour,

Je n'ai pas tout suivi. Le comportement par défaut de la touche ESC dans une datawindow remet bien par défaut la précédente valeur acceptée et il est inutile de faire un traitement spécifique et le "status flag" reste correcte même si le champ a déjà fait l'objet d'une précédente modification.

Il me paraît normal de ne pas déclencher l'Itemchanged puisque tu remets la valeur précédente ayant déjà été acceptée donc pas de changement.

Sinon pour déclencher un itemchanged forcé, je procède de la manière suivante :

Code: pb

dw_1.SetColumn("mycol1")
dw_1.SetText(ls_previousvalue)
dw_1.AcceptText()

Hors ligne

 

#6 31-05-2012 09:54:15

seki  
0x73656B69
Award: bf
Lieu: Laquenexy & Luxembourg
Date d'inscription: 20-11-2008
Messages: 1118
Pépites: 4,296,080,204
Banque: 9,223,372,036,854,776,000
Site web

Re: [RESOLU] ItemChanged non déclenché après l'appui de ESC

buck a écrit:

Je n'ai pas tout suivi. Le comportement par défaut de la touche ESC dans une datawindow remet bien par défaut la précédente valeur acceptée et il est inutile de faire un traitement spécifique et le "status flag" reste correcte même si le champ a déjà fait l'objet d'une précédente modification.

Le hic c'est qu'ici le comportement a été sophistiqué, et qu'à chaque modification (chaque EditChanged) on mémorise la modif, de sorte que si on appuie ESC plusieurs fois, on "rejoue la saisie à l'envers". C'est une sorte de fonctionnalité d'undo multiple comme dans n'importe quel éditeur de texte décent.

Mon problème c'est que la partie "remettre les valeurs précédentes" fonctionne, mais qu'en plus le fonctionnement de base de PB en annulant la modif en cours m'embête. Esc + SetItem() ne génère pas d'ItemChanged() quand le Setitem() remet une valeur différente de la valeur acceptée précédente. (Ou je m'y suis mal pris)


The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

Mes réponses PB sur StackOverflow
http://stackoverflow.com/users/flair/317266.png

Hors ligne

 

#7 31-05-2012 10:16:35

buck  
Modérateur
Lieu: Dijon
Date d'inscription: 31-07-2008
Messages: 747
Pépites: 1,028,843
Banque: 171,170,849,654

Re: [RESOLU] ItemChanged non déclenché après l'appui de ESC

Ok, c'est plus clair. Tu procèdes bien à un traitement spécifique sur la touche ESC.

Si tu tiens à déclencher un Itemchanged après avoir remis l'ancienne valeur remplace le setitem par :

Code: pb

dw_1.SetColumn("mycol1")
dw_1.SetText(ls_previousvalue)
dw_1.AcceptText()


Je pense que cela devait marcher.

Hors ligne

 

#8 31-05-2012 14:56:38

seki  
0x73656B69
Award: bf
Lieu: Laquenexy & Luxembourg
Date d'inscription: 20-11-2008
Messages: 1118
Pépites: 4,296,080,204
Banque: 9,223,372,036,854,776,000
Site web

Re: [RESOLU] ItemChanged non déclenché après l'appui de ESC

buck a écrit:

Je pense que cela devait marcher.

\o/ Dans mes bras !   Ça marche enfin comme je le voulais !

Bilan :
- il faut faire le SetColumn()
- il faut passer par SetText() c'est tout con, mais je n'y avais pas pensé; c'est ce que j'essayais de faire avec mes hack sur le contrôle edit dans les enfants de la DW
- je dois Poster l'appel de mon traitement

Ça ne fonctionne pas avec un SetItem(), ou un dw.object.data[ al_row, al_column ] = old_data...

J'y ai passé la demi-journée hier et un bon moment aujourd'hui à tester ton truc pour identifier ce qui était indispensable.
Bon, ça a l'air de faire ce qu'il faut (= ça compile)... Je peux faire un commit du code.

Ça vaut au moins 1 000 000 pepites ça !


The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

Mes réponses PB sur StackOverflow
http://stackoverflow.com/users/flair/317266.png

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22