برای همچین برنامه ای بهتره از مجموعه SynEdit استفاده کنید، هم Editor مناسبی داره و هم Syntax Highlighter برای زبانهای مختلف
کامپوننتش Open Source هستش، با کمی جستجو لینک دانلودش رو پیدا می کنید
توی رویداد OnKeyDown ، با دستور Perform می تونید مختصات اشاره گر رو بگیرید و با دستور Popup هم می تونید PopupMenu رو نمایش بدید، مثال :
procedure TForm1.RichEdit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
P : TPoint;
Msg : TMsg;
begin
if (Key = VK_SPACE) and (Shift = [ssCtrl]) then
begin
PeekMessage(Msg, 0, WM_CHAR, WM_CHAR, PM_REMOVE);
RichEdit1.Perform(EM_POSFROMCHAR, WPARAM(@P), RichEdit1.SelStart);
P := RichEdit1.ClientToScreen(P);
PopupMenu1.Popup(P.X, P.Y + 15);
end;
end;
دستور ClientToScreen مختصات داخلی RichEdit رو به کل صفحه Screen تعمیم میده
دستور PeekMessage برای حذف صدای "دینگ" ای هستش که بعد از زدن کلید ها پخش میشه
مقدار Y رو هم به اضافه 15 کردم که منو زیر خط فعلی باز بشه
ترکیب کلیدهای Enter و Space ترکیب درستی نیست، با زدن کلید Enter اشاره گر به خط پایین میره !
توی مثال بالا از کلیدهای Ctrl + Space استفاده شده