Перевод каретки на новую строку с учетом количества символов табуляции в предыдущей строке
if (Key=VK_RETURN) then
begin
Memo1.SetFocus;
keybd_event(8, 0, 0, 0);
Memo1.SetSelTextBuf(#13#10);
if Pos(#9#9#9,Memo1.Lines[Memo1.CaretPos.Y-1])=1 then
Memo1.SetSelTextBuf(#9#9#9)
else
if Pos(#9#9,Memo1.Lines[Memo1.CaretPos.Y-1])=1 then
Memo1.SetSelTextBuf(#9#9)
else
if Pos(#9,Memo1.Lines[Memo1.CaretPos.Y-1])=1 then
Memo1.SetSelTextBuf(#9)
end;
Задача выполнена следующим образом.
Источник: Stack Overflow на русском