Показать сообщение отдельно
  #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(SenderTObject; var KeyWord;
  
ShiftTShiftState);

  function 
LineWidth(sstringsymbolsinteger): integer;
  
begin
    s 
:= copy(s1symbols);
    
result := canvas.TextWidth(s);
  
end;

var 
ptpoint;
begin
  p 
:= Memo1.CaretPos;
  
p.:= LineWidth(Memo1.Lines[p.y]+'X'p.x+1);
  
p.:= p.Canvas.TextHeight('X');
  
Memo2.left := memo1.left p.xMemo2.Top := memo1.top p.y;
end
Ответить с цитированием