2013-05-28 53 views
2

任何人都可以帮助我显示(或创建)位于(X,Y)的备忘录基于用户键入的最后一个字符?也就是说,我需要一个表单,只要用户在备忘录中键入%字符,就需要将表格紧挨着和放在这个字符的下面。我正在使用此代码:德尔福2010 - 在备忘录seltext上显示表格

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

非常感谢!它工作正常! –