Annuler couper/copier/coller dans une Richtextbox

mJuJu Messages postés 56 Date d'inscription jeudi 20 octobre 2005 Statut Membre Dernière intervention 27 mai 2014 - 30 juil. 2007 à 00:23
mJuJu Messages postés 56 Date d'inscription jeudi 20 octobre 2005 Statut Membre Dernière intervention 27 mai 2014 - 3 août 2007 à 14:00
Salut à tous.

Voilà. Je travaille en VB6. J'utilise le menu contextuel dans des richtextbox (AutoVerbMenu = true). En ce qui concerne le couper, copier, coller et supprimer, tout va bien. En revanche, la commande Annuler réagit bizarrement. Dans une application elle est disponible et ça marche. Dans une autre, elle est toujours désactivée. Donc pas moyen d'annuler. J'ai utilisé le Sendkeys CTRL + Z. Là encore aucune réaction. Y aurait-il au niveau système quelque chose qui bloque? Dans l'aide VB6 on signale qu'un manque de mémoire empêcherait parfois la commande Annuler de fonctionner. C'est une possibilité. J'en doute un peu, car pour simuler la commande Annuler, je remplace le menu contextuel par ma programmation à l'emporte-pièce où je stocke systématiquement les textRTF. Au bout d'un moment, ça représente tout de même une occupation mémoire importante non? D'où mon doute, car je suppose évidemment que VB6 & Windows optimisent au maximum. Voilà où j'en suis. Si vous avez une idée, elle sera la bienvenue. Sinon il va falloir que je reprenne mon code pour en faire de la dentelle.
Merci de votre coopération.

JuJu  

6 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
30 juil. 2007 à 09:21
étrange..
depend peut etre du genre de modif que tu fais dans ta box...

je sais que l'on peut jouer avec SendMessage et EM_SETUNDOLIMIT / EM_GETUNDOLIMIT
0
mJuJu Messages postés 56 Date d'inscription jeudi 20 octobre 2005 Statut Membre Dernière intervention 27 mai 2014
30 juil. 2007 à 15:32
Renfield,
j'ai pris bien soin d'utiliser des Richtextbox équivalentes du point de vue de leurs propriétés, et bien sûr particulièrement le AutoVerbMenu. J'ai produit le même texte dans toutes les applis et réalisé les mêmes modifications. Dans 2 applis ça marche. Je peux annuler. Dans les 3 autres pas possible. Je pense qu'il doit y avoir un paramètre quelque part auquel on ne pense pas intuitivement. Je vais dans un premier temps examiner les UNDOLIMIT comme tu le suggères. Merci de ton aide.

JuJu
0
mJuJu Messages postés 56 Date d'inscription jeudi 20 octobre 2005 Statut Membre Dernière intervention 27 mai 2014
31 juil. 2007 à 05:08
J'ai téléchargé une source de DANYZ concernant le sujet. Sa source utilise des SendKeys. Au passage je note que c'est une excellente idée qui permet de simuler  un menu contextuel dans des langues différentes. Tout fonctionne correctement, SAUF la commande annuler. En utilisant la propriété AutoVerbMenu à True, j'ai toujours le même problème: la commande Annuler n'est jamais activée. J'en arrive actuellement à 3 conlusions:

 1) ce n'est pas un problème de mémoire saturée, les applis étant très très modestes    
 2) ce n'est pas un problème lié aux formats supportés par le Clipboard.
 3) il y a forcément une différence aux niveau des projets puisque dans plusieurs cas ça   
     fonctionne parfaitement et dans d'autres non.

En revanche, en fouillant un peu, je me suis rendu compte que les undo sont gérés dans une queue. Je m'oriente donc maintenant vers cette piste et j'essaie de trouver un paramètre au niveau du projet qui empêcherait l'utilisation de cette queue. Peut-être que je me fourvois complètement mais si quelqu'un a une autre idée, elle sera plus que bienvenue.

JuJu
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
1 août 2007 à 03:35
Tu sembles avoir bien étudié le sujet, mais je me demande...
est-ce que ce ne serait pas l'action que tu poses qui empêcherait le menu de s'activer ?
Par exemple, lorsqu'on sauvegarde, il n'y a plus moyen de revenir en arrière... peut-être y a-t-il plusieurs actions qui ont cette "faculté" de vider la queue.

Mais comme tu as dit que tu avais essayé dans différentes applications, j'imagine que ce n'est pas le cas (?) et que le problème est moins simple que ça...

MPi
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mJuJu Messages postés 56 Date d'inscription jeudi 20 octobre 2005 Statut Membre Dernière intervention 27 mai 2014
1 août 2007 à 04:43
Effectivement le problème n'est pas simple. Et je n'ai  encore rien trouvé. Mais ton idée de sauvegarde me titille un brin. Il faut que je voie ça.
0
mJuJu Messages postés 56 Date d'inscription jeudi 20 octobre 2005 Statut Membre Dernière intervention 27 mai 2014
3 août 2007 à 14:00
J'avance ...

En recherchant des infos sur MSDN, je suis tombé sur un petit article bien caché: je vous le livre in extenso tel qu'il est écrit en anglais:

SYMPTOMS
When you are running a program that uses the RichEdit control, the Undo feature may not work correctly.

CAUSE
Whether the Undo feature works depends on how the control is written. If you are developping a program, note that the RichEdit control's Undo information is deleted when an EM_STRAMIN or an EM_STRAMOUT window message is sent to the control with the SF_TEXT flag if wParam does not contain the SFF_SELECTION flag.

Evidemment ceux qui ne connaissent pas les API et surtout celles concernant le traitement des messages Windows sont un peu perdus. De plus, même le texte en anglais, est un brin abscons. Je vais essayer de le traduire au plus près:

SYMPTOMES:
Dans un programme qui utlise des contrôles RichEdit, le mécanisme Undo peut ne pas fonctionner correctement.

CAUSE
Le fonctionnement correct du mécanismeUndo, dépend de la façon dont le texte est écrit. 
Si vous faites un programme, n'oubliez pas que l'activation Undo est supprimée dans un contrôle RichEdit dans le cas suivant: le système envoie au contrôle [RichTextBox] l'un des messages EM_STREAMIN ou EM_STREAMOUT avec l'option SF_TEXT, tandis que leur paramètre wParam ne possède pas l'information SFF_SELECTION.

J'ai bien essayé de voir quand ces messages sont envoyés. MSDN est tellement bien fait que sur un sujet, on trouve 1 ligne relativement explicative et 30 lignes décrivant le chemin d'accès à cette minuscule ligne "d'information", de renvois de toutes sorte, etc ... Bref un vrai pot de pus. Je continue mes recherches.

Toutefois, dans une forme où la fonction "Annuler" ne marchait pas ou n'était simplement pas activée dans un RichTexBox, j'ai ajouté un autre RichTextBox avec les mêmes propriétés. 1er RichTextBox: Annuler ne marche toujours pas. 2ème Richtextbox: ça marche. Conclusion que je commençais à subodorer:

Le comportement de la commande Annuler d'un RichTextBox dépend uniquement du RichTextBox, de ses propriétés et probablement de la façon dont il est initialisé. Son conteneur peut éventuellement avoir une action indirecte sur lui. Voilà. Si mes observations ravivent quelques souvenirs chez certaines et certains, alors faites-moi en profiter.
0
Rejoignez-nous