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

YB28 39 Messages postés lundi 23 avril 2012Date d'inscription 29 juillet 2012 Dernière intervention - 4 mai 2012 à 11:33 - Dernière réponse : YB28 39 Messages postés lundi 23 avril 2012Date d'inscription 29 juillet 2012 Dernière intervention
- 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
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
YB28 39 Messages postés lundi 23 avril 2012Date d'inscription 29 juillet 2012 Dernière intervention - 7 mai 2012 à 16:48
1
Merci
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);

Merci YB28 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 74 internautes ce mois-ci

Commenter la réponse de YB28
korgis 424 Messages postés samedi 17 mai 2003Date d'inscription 4 août 2018 Dernière intervention - 4 mai 2012 à 13:48
0
Merci
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;
Commenter la réponse de korgis
YB28 39 Messages postés lundi 23 avril 2012Date d'inscription 29 juillet 2012 Dernière intervention - 7 mai 2012 à 11:37
0
Merci
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.
Commenter la réponse de YB28

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.