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
» Le serpent qui se mange la queue avec LE DOSSIER EN COURS
par Jack Aujourd'hui à 19:06

» API Windows
par silverman Aujourd'hui à 19:03

» Utilisation de RunDll32
par Fredisland Aujourd'hui à 17:55

» pbs dessin et ecriture sur form
par Fredisland Aujourd'hui à 17:34

» Panoramic et Windows
par Fredisland Aujourd'hui à 14:55

» Et encore un éditeur...
par Fredisland Aujourd'hui à 14:52

» windows
par pascal10000 Aujourd'hui à 14:15

» Identifiants Globaux utilisés par Windows
par Fredisland Aujourd'hui à 14:05

» Nouvelle version 0.32
par Jean Claude Aujourd'hui à 14:00

» Convertir un fichier BAS panoramic en fichier EXE
par Fredisland Aujourd'hui à 8:36

» Les tableaux
par JL35 Hier à 22:15

» Numéro d'objet survolé par la souris.
par Pedro Alvarez Hier à 17:51

» GPP - Nouvelle version en cours de développement
par Jicehel Hier à 12:58

» Logiciel de traduction: dernières avancées.
par Jicehel Hier à 12:56

» Crash récurent de l'éditeur
par Fredisland Hier à 11:13

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Avril 2018
LunMarMerJeuVenSamDim
      1
2345678
9101112131415
16171819202122
23242526272829
30      
CalendrierCalendrier

Partagez | 
 

 RichEditGetInformation 3

Aller en bas 
AuteurMessage
Yannick

avatar

Nombre de messages : 8043
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 : 8043
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 : 10969
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 : 10969
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 : 10969
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 : 8043
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: