FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» Méthode manuelle d'extraction de la racine carrée
par pascal10000 Aujourd'hui à 7:47

» Un catalogue de photos de fleurs, avec KBDD, affichage HTML
par Klaus Hier à 21:12

» Racine carrée d’un nombre par l’algorithme de Héron
par papydall Hier à 20:21

» Mah-Jong anglais
par papydall Hier à 18:43

» [annulé]ON_MOVE n,l ne fonctionne que sur le form 0
par silverman Hier à 16:52

» Ludothèque Panoramic
par jjn4 Hier à 15:42

» Partie fractionnaire d'un flottant
par silverman Hier à 11:28

» Calculus
par Ouf_ca_passe Hier à 9:06

» 6 (en analyse):confusion de variable locale entre SUB et FNC
par Jack Hier à 8:18

» Curseurs personnalisés
par papydall Hier à 5:24

» KGF_dll - nouvelles versions
par Klaus Hier à 0:38

» Exemples de définition et utilisation de Fonctions FNC
par Marc Lun 19 Fév 2018 - 22:50

» Pour coincer la bulle
par JL35 Lun 19 Fév 2018 - 15:31

» Logiciel de soutien en langues.
par Pedro Alvarez Lun 19 Fév 2018 - 15:00

» Version instantanée V 0.9.28i14 du 10/02/2018
par pascal10000 Lun 19 Fév 2018 - 10:58

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Février 2018
LunMarMerJeuVenSamDim
   1234
567891011
12131415161718
19202122232425
262728    
CalendrierCalendrier

Partagez | 
 

 RichEditGetInformation 3

Aller en bas 
AuteurMessage
Yannick

avatar

Nombre de messages : 8015
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: 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... geek
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

Nombre de messages : 8015
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: 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

 scratch
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10572
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: 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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

Nombre de messages : 10572
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: 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 !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

Nombre de messages : 10572
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: 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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Yannick

avatar

Nombre de messages : 8015
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Sam 1 Mar 2014 - 12:41

Merci Klaus !

C' est téléchargé. 
Je testerai dans la journée.

 Laughing
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: RichEditGetInformation 3   

Revenir en haut Aller en bas
 
RichEditGetInformation 3
Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: Activité des sites créés par les Panoramiciens. :: Le site de Klaus-
Sauter vers: