Цитата:
Сообщение от bambooshoot
рассчитываю позицию каретки так:
Код:
procedure TForm1.Memo1Change(Sender: TObject);
begin
Memo2.Left:= Memo1.Left+Memo1.CaretPos.X*2+12;
Memo2.Top:=Memo1.Top+Memo1.CaretPos.Y*3+Memo1.Font.Size+Memo1.Lines.Count*10;
end;
Для y получается все нормально, а для х идет запаздывание. Что-то я не учитываю, а что понять не могу. А есть ли какие-то другие варианты решения этой задачи? Подскажите пожалуйста.
|
для y тоже не нормально, т.к. y не должна зависеть от количества строк в memo, ещё и умноженном на 10
вот такой вариант, будет работать, если form.font = memo.font
PHP код:
procedure TForm1.Memo1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
function LineWidth(s: string; symbols: integer): integer;
begin
s := copy(s, 1, symbols);
result := canvas.TextWidth(s);
end;
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');
Memo2.left := memo1.left + p.x; Memo2.Top := memo1.top + p.y;
end;