Er muss hängen, weil du unter Umständen eine Endlosschleife damit baust
Versuchs mal so:
Delphi-Quellcode:
for i := CurPosition downto 1 do // ab CursorPosition bis Position 1 im Memo zählen
begin // 1 weil unten noch 1 abgezogen wird
aTag := Copy(SynMemo1.Text, i-1, 2); // 2 Zeichen holen
Caption := aTag; // debug
if aTag = '<a' then break; // wenn gefunden, dann aussteigen
end;