Je pense que tu n'as pas bien saisi la notion de "point d'insertion".
Le poiint d'insertion est la position à laquelle va s'insérer le prochain caractère frappé. Ce n'est pas la position à laquelle le dernier caractère a été inséré !
D'autre part, pour être cohérent avec Panoramic; j'ai fait la numérotation des caractères à partir de 1, et non à partir de 0 comme c'est fait en Windows et en Delphi. Cela correspond à la valeur retournée par la fonction INSTR de Panoramic: 1 représente bien le premier caractère, et 0 signifie "non trouvé".
Et en fait, le curseur représente bien le point d'insertion. Quelque soit la position du curseur, si tu frappes un caractère, il viendra bien s'insérer à l'androit où est le curseur, et ce dernier sera placé après le caractère qui vient d'être inséré, de sorte que le caractère suivant se mettra bien à la suite.
Maintenant, je pense que ton message s'adresse aux fonctions de RichEdit et non de gestion de chaînes de caractères. Et il est vrai que si tu utilises SetSelectedRichEditText, il faut bien sélectionner le texte, et pour cela, il faut reculer le curseur.
Alors, je propose une autre solution. Je vais modifier RichEditGetLine de sorte que la fonction retourne la ligne dans laquelle se trouve le curseur, si tu passes 0 comme numéro de ligne ! Tu peux ensuite utiliser la position du curseur comme indexe dans cette chaîne de caractères, et tout cela sans déplacer le curseur, donc sans clignotement.