2013-05-28 84 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

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