Спасибо, Pyro за участие. Достойный код, хотя мой, несмотря на его странность - тоже работает

, но только как я говорил выше - для y. Насчет х у меня вообще ахинея полная. Я чуть-чуть подправил твой код:
Код:
function LineWidth(s: string; symbols: integer): integer;
begin
s := copy(s, 1, symbols);
result := form1.canvas.TextWidth(s);
end;
procedure TForm1.Memo1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
var p: tpoint;
begin
p := Memo1.CaretPos;
p.x := LineWidth(Memo1.Lines[p.y]+'X', p.x+1);
p.y := p.y * Canvas.TextHeight('X')+18;
Memo2.left := memo1.left + p.x; Memo2.Top := memo1.top + p.y;
end;
Число в р.y может быть любым, в зависимости от предпочтений
Спасибо всем огромное за участие. Хорошо поговорили

Может быть еще кто-нибудь выскажется?