Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| RichEditGetInformation 3 | |
| | Auteur | Message |
---|
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: RichEditGetInformation 3 Ven 28 Fév 2014 - 17:38 | |
| la position du curseur n' est jamais à 0.... Qu' il y ait 1 caractère ou pas dans le RE, la position est toujours à 1. - Code:
-
Variables() Labels()
height 0,400 width 0,600 dll_on "KGF.dll"
Edit 1 :top 1,5 : left 1,5 : on_change 1,change RE% = dll_call2("RichEditCreateWithEvent",handle(0),handle(1)) res% = dll_call5("RichEditGeometry",RE%,5,30,500,200) res% = dll_call2("RichEditGetInformation",RE%,3) caption 0,str$(res%)
end
sub variables() dim RE%,Change%,res% end_sub
sub Labels() label change end_sub
Change: Detect_curseur() return
Sub Detect_curseur() dim_local cp%,sep%,code%,mot$,yesno%,dep% cp% = dll_call2("RichEditGetInformation",RE%,3) caption 0,str$(cp%) End_sub Si je tape un deuxième caractère, la position devient 2 mais reste 2 si je tape "Retour Arrière" (Effacement du caractère) alors qu' après le la frappe du premier la position était 1... | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 28 Fév 2014 - 21:08 | |
| Autre chose : - Code:
-
dim RE%,Change%,res% label change
height 0,500 width 0,600 dll_on "KGF.dll"
Edit 1 :top 1,5 : left 1,5 : on_change 1,change
RE% = dll_call2("RichEditCreateWithEvent",handle(0),handle(1)) res% = dll_call5("RichEditGeometry",RE%,5,30,500,200) res% = dll_call2("RichEditGetInformation",RE%,3) res% = dll_call3("RichEditFunction",RE%,11,0)
memo 2 :top 2,235 :left 2,5 : height 2,220 : width 2,200 : bar_vertical 2
end
Change: ' un caractère est tapé au clavier, où est le curseur ?
res% = dll_call2("RichEditGetInformation",RE%,3) item_add 2,"Position du curseur : "+str$(res%)
' je replace le curseur en position 0, et là surprise,
res% = dll_call3("SelectRichEditText",RE%,0,0)
' il reste après le premier caractère et pas avant ' autre surprise, le curseur va se placer avant le premier caractere mais ' apres la frappe d' un deuxième caractere qui est placé avant le premier et ' le curseur reste apres ce caractere return | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: RichEditGetInformation 3 Sam 1 Mar 2014 - 0:33 | |
| Tout à fait normal. Tout d'abord, dans la routine "Change", tu remplaces - Code:
-
res% = dll_call3("SelectRichEditText",RE%,0,0) par - Code:
-
res% = dll_call3("SelectRichEditText",RE%,1,0) En effet, le premier caractère est 1, pas 0. Cependant, si la valeur passée est <1, la DLL corrige automatiquement en mettant 1 de façon interne. Mais l'explication est la suivante: lorsque le contenu du RE change, tu forces le retour du curseur devant le premier caractère. Le prochain caractère frappé vient donc s'insérer logiquement DEVANT le premier caractère. Et ainsi de suite. MAIS: Je constate que, ce qui est déplacé, est le "point d'insertion" et non réellement de "curseur". Là, j'ai une correction à apporter. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: RichEditGetInformation 3 Sam 1 Mar 2014 - 1:02 | |
| Bien - j'ai compris ce qui se passe. En fait, l'évènement est déclenché AVANT le changement effectif dans le RE ! Donc, on entre dans la routine évènement Panoramic, on positionne le curseur devant le premier caractère, puis on termine la routine évènement. Ce n'est qu'ensuite que le caractère est inséré, donc devant le premier caractère, puis le curseur se trouve logiquement après ce caractère inséré, et donc devant le caractère 2. Pour gérer cela, tu dois libérer la routine évènement du RE, tout en déclenchant ton traitement tout de suite après. Je te montre ci-après ton code modifié, en utilisant un timer dont tu peux régler le délai, pour déclencher un évènement qui lui, s'effectuera après l'insertion du caractère, et tout marchera bien. - Code:
-
dim RE%,Change%,res% label change, delai
height 0,500 width 0,600 dll_on "KGF.dll"
Edit 1 :top 1,5 : left 1,5 : on_change 1,change
RE% = dll_call2("RichEditCreateWithEvent",handle(0),handle(1)) res% = dll_call5("RichEditGeometry",RE%,5,30,500,200) res% = dll_call2("RichEditGetInformation",RE%,3) res% = dll_call3("RichEditFunction",RE%,11,0)
memo 2 :top 2,235 :left 2,5 : height 2,220 : width 2,200 : bar_vertical 2
timer 3 : timer_interval 3,100 : timer_off 3 : on_timer 3,delai end
delai: timer_off 3 res% = dll_call3("SelectRichEditText",RE%,1,0) end Change: ' un caractère est tapé au clavier, où est le curseur ? res% = dll_call2("RichEditGetInformation",RE%,3) item_add 2,"Position du curseur : "+str$(res%)
' je replace le curseur en position 0, et là surprise,
' res% = dll_call3("SelectRichEditText",RE%,1,0) timer_on 3
' il reste après le premier caractère et pas avant ' autre surprise, le curseur va se placer avant le premier caractere mais ' apres la frappe d' un deuxième caractere qui est placé avant le premier et ' le curseur reste apres ce caractere return Essaie - tu verras que ça marche. EDIT Rassure-toi, je cherche une solution à ce problème, interne à KGF.dll ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: RichEditGetInformation 3 Sam 1 Mar 2014 - 1:50 | |
| Voilà, c'est fait. Recharge la nouvelle version KGF.dll V2.89 du 01/03/2014. Elle corrige ce problème de façon interne, et rend inutile la construction avec le timer que j'ai postée ci-dessus. Ton code d'origine fonctionnera, tout en tenant compte bien sûr de la modif - Code:
-
res% = dll_call3("SelectRichEditText",RE%,1,0) dans la routine "Change", pour les raisons décrites plus haut. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 1 Mar 2014 - 12:41 | |
| Merci Klaus ! C' est téléchargé. Je testerai dans la journée. | |
| | | Contenu sponsorisé
| Sujet: Re: RichEditGetInformation 3 | |
| |
| | | | RichEditGetInformation 3 | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |