Quote (monstryuga)
Программа выдает именно ту строку, которая заданна в переменной find, но только именно столько раз, сколько содержится строк в Memo1.
 Сначала не понял про че ты говориш. Вобщем если находится совпадение, то его выводит N раз, где N-количество строк в Memo1.  На скоьлко я понял, нужно чтобы программа нашла все совпадения в тексте. Так? 
 Ну во первых я бы цикл сделал с Begin, так сразу видно границы, хоть ничего и не изменится, но все же так мне удобнее. Ну и незнаю зачем ты получал номер строки, выделял, и т.д. Можно намного проще: 
 
Code
var s:string; 
 begin 
 find:='sd'; 
 For i:=0 to Memo1.Lines.Count-1 do 
 begin 
   s := Memo1.Lines[i]; 
   If Pos(FIND, s)<>0 Then 
     Memo2.Lines.Add(s); 
 end;