écrire à la position du curseur dans memo [Résolu]

Signaler
Messages postés
38
Date d'inscription
lundi 23 avril 2012
Statut
Membre
Dernière intervention
29 juillet 2012
-
Messages postés
38
Date d'inscription
lundi 23 avril 2012
Statut
Membre
Dernière intervention
29 juillet 2012
-
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

Messages postés
38
Date d'inscription
lundi 23 avril 2012
Statut
Membre
Dernière intervention
29 juillet 2012
1
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);
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
16
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;
Messages postés
38
Date d'inscription
lundi 23 avril 2012
Statut
Membre
Dernière intervention
29 juillet 2012
1
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.