Как сделать pop-up Combobox по позиции курсора в Memo?



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
.

Взято с Delphi Knowledge Base



видеоняня читать