How to pop up a TComboBox at the current caret position in a TMemo (Views: 28)
Problem/Question/Abstract: I would like to pop up a TComboBox at the caret position on a TMemo when the key that is pressed is a full stop (.). Has anyone got any code for this? Answer: unit CBoxInMemo; interface uses Windows, Classes, Controls, Graphics, Forms, StdCtrls; type TFrmCboxInMemo = class(TForm) Button1: TButton; Memo1: TMemo; Label1: TLabel; ComboBox1: TComboBox; procedure Button1Click(Sender: TObject); procedure ComboBox1Exit(Sender: TObject); procedure ComboBox1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var FrmCboxInMemo: TFrmCboxInMemo; implementation {$R *.DFM} procedure TFrmCboxInMemo.Button1Click(Sender: TObject); var clientPos: TPoint; lineHeight: Integer; tmpFont: TFont; begin GetCaretPos(clientPos); {Use the following calculation of line height only if you want your combobox to appear below the char position you are referencing.} tmpFont := Canvas.Font; Canvas.Font := Memo1.Font; lineHeight := Canvas.TextHeight('Xy'); Canvas.Font := tmpFont; with ComboBox1 do begin {Adjustment of Top by lineHeight only necessary if combobox is to appear below line.} Top := clientPos.Y + Memo1.Top + lineHeight; Left := clientPos.X + Memo1.Left; Visible := true; SetFocus; end; end; procedure TFrmCboxInMemo.ComboBox1Exit(Sender: TObject); begin ComboBox1.Visible := false; end; procedure TFrmCboxInMemo.ComboBox1Click(Sender: TObject); begin ComboBox1.Visible := false; end; end. |