écrire à la position du curseur dans memo

Résolu
YB28 Messages postés 38 Date d'inscription lundi 23 avril 2012 Statut Membre Dernière intervention 29 juillet 2012 - 4 mai 2012 à 11:33
YB28 Messages postés 38 Date d'inscription lundi 23 avril 2012 Statut Membre Dernière intervention 29 juillet 2012 - 7 mai 2012 à 16:48
Bonjour,
Je cherche une manière pour écrire à l'emplacement du curseur dans le memo.

Voici le code que j'utilise pour placer le curseur à la ligne 3 et colonne 5
procedure TForm1.Button1Click(Sender: TObject);
begin
memo1.SelStart := SendMessage(memo1.Handle, EM_LINEINDEX, 3, 0)+5;
memo1.Perform(EM_SCROLLCARET, 0, 0);
memo1.SetFocus;
end;


Cependant s'il n'existe pas de texte dans le memo, le curseur d'insertion ne se place pas à l'endroit demandé mais au début. 1er Problème!

Et voici un code d'ajout de texte:
procedure TForm1.Button2Click(Sender: TObject);
begin
memo1.Lines.Add('essai');
end;

Et lorsque je clique sur le bouton 1, quand il y a du texte il place bien le curseur d'insertion à l'endroit voulu. Mais lorsque j'appui ensuite sur le bouton 2 le texte ne se place pas au niveau du curseur d'insertion.2ème problème!

Si vous pourriez m'éclairer ;) Merci

3 réponses

YB28 Messages postés 38 Date d'inscription lundi 23 avril 2012 Statut Membre Dernière intervention 29 juillet 2012 1
7 mai 2012 à 16:48
En fait, j'initialise comme ci dessous:
memo1.Clear;
L0:='';
L1:='';
L2:='';
L3:='';
Memo1.Lines[0]:=''+#13+#10;
Memo1.Lines[1]:=''+#13+#10;
Memo1.Lines[2]:=''+#13+#10;
Memo1.Lines[3]:='';



Et j'affiche comme ceci: (avec colonne et ligne ayant des valeurs selon un case préalablement établi)
{place le curseur d'insertion}
memo1.SelStart := SendMessage(memo1.Handle, EM_LINEINDEX, ligne, 0)+colonne;
{insert le caractère de CaractereRecu[i] dans L à partir de l'emplacement du curseur}
case ligne of
0:begin L0 := Memo1.Lines[0];insert(CaractereRecu[i],L0,memo1.SelStart+1) end;
1:begin L1 := Memo1.Lines[1];insert(CaractereRecu[i],L1,memo1.SelStart+1) end;
2:begin L2 := Memo1.Lines[2];insert(CaractereRecu[i],L2,memo1.SelStart+1) end;
3:begin L3 := Memo1.Lines[3];insert(CaractereRecu[i],L3,memo1.SelStart+1) end;
end;

Memo1.Lines[0]:=L0;
Memo1.Lines[1]:=L1;
Memo1.Lines[2]:=L2;
Memo1.Lines[3]:=L3;
inc(colonne);
1
korgis Messages postés 420 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 6 mai 2019 17
4 mai 2012 à 13:48
Salut,

Add ne fait qu'ajouter une ligne à la queue des autres.
Pour insérer une chaîne, tu peux utiliser la procedure Insert :

procedure TForm1.Button2Click(Sender: TObject);
var
  L: string;
begin
  L := Memo1.Lines[0];
  Insert('essai', L, Memo1.SelStart + 1);
  Memo1.Lines[0] := L;
end;
0
YB28 Messages postés 38 Date d'inscription lundi 23 avril 2012 Statut Membre Dernière intervention 29 juillet 2012 1
7 mai 2012 à 11:37
merci de ta réponse mais je peux afficher que sur la ligne 0. Si je mets
L := Memo1.Lines[1];
Insert('essai', L, Memo1.SelStart + 1);
 Memo1.Lines[1] := L;

cela ne fonctionne plus.
0
Rejoignez-nous