카테고리 없음

[윈도우즈 API] Taskbar 의 특정 위치에 popup 메뉴 띄우기

쇼핑스크래퍼3 2023. 9. 3. 08:50
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Menus;

type
  TForm1 = class(TForm)
    Button1: TButton;
    PopupMenu1: TPopupMenu;
    Menu1: TMenuItem;
    procedure Button1Click(Sender: TObject);
    procedure Menu1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  pm: TTPMParams;
  DisplayPoint: TPoint;
  r: TRect;
begin
  SystemParametersInfo(SPI_GETWORKAREA, 0, @r, 0 );
  r.top := r.bottom + 1;
  r.bottom := Screen.height;
  DisplayPoint := Point(r.right div 2, r.top);
  with pm, pm.rcexclude do
  begin
    Top := r.top;
    Bottom := r.bottom;
    Left := 0;
    Right := screen.width;
    cbSize := SizeOf(pm);
  end;
  TrackPopupMenuEx(PopupMenu1.Handle, TPM_VERTICAL or TPM_HORIZONTAL,
                                      DisplayPoint.x, DisplayPoint.y, Handle, @pm);
end;

procedure TForm1.Menu1Click(Sender: TObject);
begin
  ShowMessage('Click Test Menu');
end;

end.