Heh, spróbuję ponownie, jeszcze raz przepraszam za wczesniejszy bałagan i bardzo prosze o pomoc.

var
//recount to liczba Tricheditów
retab:array of Trichedit;
ar:array of integer;
strl:Tstringlist;

begin //wczesniej do tablicy retab wpisane są referencje recount Tricheditow 
      //(od 0 do recount-1) znajdujacych sie na panelu na formie
setlength(ar,recount+1);strl:=tstringlist.Create;
for i:=1 to recount do begin

    ar[i]:=length(retab[i-1].Lines[0]);
                      //  strl.Add(retab[i-1].Lines[0]);               1*
    po[i-1]:=@retab[i-1].Lines[0][1];                   //          2**
                      //  po[i-1]:=@strl[i-1][1];                        2*
                                  
          str:='';setlength(str,ar[i]);
          move(po[i-1]^,str[1],ar[i]);//pierwsze sprawdzenie i tu jest ok
                        end;
for i:=1 to recount do begin          //drugie sprawdzenie 
     str:='';setlength(str,ar[i]);
     move(po[i-1]^,str[1],ar[i]); //i tu juz jest dupa- str nie zawiera poprawnego {**}    

                        end;            //stringa takiego jaki powinien byc pod po[i-1]^
strl.free;
end;

Jesli wytnę 2** dajac 1* i 2* (to znaczy z pośrednictwem strl) wtedy wszytsko jest ok i sprawdzenie {**} daje poprawne stringi w str w kazdym kroku iteracji.
Dlaczego tak sie dzieje?