Le problème vient du fait qu'après la première insertion, la position du curseur est placée entre le #13 et le #10. ( ce qui ne ce voit pas ). Il faut donc tester si le début de la sélection est un #10 pour déplacer le SelStart d'un caractère. Tu évites ainsi les rectangles noirs :
Begin
Tmp:=Memo1.Text;
If ((Memo1.SelStart+1)<=Length(Tmp))And (Tmp[Memo1.SelStart+1]=#10) Then Memo1.SelStart:=Memo1.SelStart+1;
If Memo1.SelText = '' then
begin
Memo1.SelText := Deb + Memo1.SelText + Fin;
Memo1.SelStart := Memo1.SelStart - Nb;
end
Else begin
Memo1.SelText := Deb + Memo1.SelText + Fin;
end;
End;
---

Nono du Moulin

---
-------------------------------
Réponse au message :
-------------------------------
Merci ManChesTer mais ca ne marche pas. J'avais oublier de préciser que je modifiais la position du curseur.
bon je vous met la portion plus complète de mon code:
const
RetLgn = #13#10;
type
TForm1 = class(TForm)
procedure Button1Click(Sender:TObject);
private
procedure SelectionText(Deb, Fin : string; Nb : integer);
procedure SelectionText(Deb, Fin : string; Nb : integer);
var
tmp : string;
begin
If Memo1.SelText = '' then
begin
Memo1.SelText := Deb + Memo1.SelText + Fin;
Memo1.SelStart := Memo1.SelStart - Nb;
end
Else
begin
tmp := Memo1.SelText;
Memo1.SelText := Deb + Memo1.SelText + Fin;
end;
end;
procedure Button1Click(Sender:TObject);
begin
SelectionText('Texte1'+RetLgn,RetLgn+'Texte2'+RetLgn,9);
end;
Le procedure SelectionText permet de positionner le curseur entre les deux chaines de caractères si il n'y a pas de sélection (sinon la sélection est remplacée).
Voila, toujours le même problème : quand je clique deux fois de suite sur le button1 sans sélection et sans bouger le curseur, j'ai de joli carrés blancs.
Merci
JuniorFr