2013-05-28 5 views
2

사용자가 입력 한 마지막 문자를 기반으로 메모에 (X, Y) 위치가있는 양식을 표시하거나 만들 수있는 사람이 있습니까? 즉, 사용자가 메모에 % 문자를 입력 할 때마다 양식이 표시되어야하지만이 문자 바로 아래에 인접하게 배치되는 양식이 필요합니다. 나는이 코드를 사용하고 있습니다 :Delphi 2010 - 메모장에 양식 표시

procedure TForm1.memo1KeyPress(Sender: TObject; var Key: Char); 
if key = #37 then 
begin 
    form2.Top:=Mouse.CursorPos.Y; 
form2.left:=Mouse.CursorPos.X; 
form2.Show; 
end; 
end; 

을하지만이 코드는 커서 위치에 따라 양식을 보여줍니다. 사용자가 % 문자를 입력 한 곳의 오른쪽과 아래에 양식을 표시하고 위치시키는 방법이 있습니까?

답변

3

당신은 캐럿 위치가 아닌 마우스받은 위치를 얻을 필요가 ...

을`) (대신

procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char); 
var 
    clientPos: TPoint; 
begin 
if key = #37 then 

begin 
    GetCaretPos(clientPos); 
    clientPos:=Memo1.ClientToScreen(clientPos); 
    with form2 do 
    begin 
     Top := clientPos.Y + 4; 
     Left := clientPos.X; 
     Visible := true; 
    end; 
end 

end; 
+0

대신 GetCaretPos'의이 시도, 나는 ['EM_POSFROMCHAR']를 사용하여 제안 (HTTP : //msdn.microsoft.com/en-us/library/windows/desktop/bb761631.aspx). –

+0

대단히 고마워! 그것은 잘 작동합니다! –