Показать сообщение отдельно
  #10  
Старый 23.05.2012, 14:19
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

Цитата:
Сообщение от 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; 
Ответить с цитированием