procedure TForm1.Button1Click(Sender: TObject);
var
hMenuHandle: hMENU;
hMenuItem: dWord;
p: TPoint;
begin
{recalculate button coordinates to screen coordinates}
p.X := Button1.Left;
p.Y := Button1.Top;
p := Button4.ClientToScreen(p);
hMenuHandle := GetSystemMenu(Handle, False);
hMenuItem := LongWord(Windows.TrackPopupMenu(hMenuHandle, TPM_LEFTBUTTON or TPM_RIGHTBUTTON or TPM_RETURNCMD,
p.X, p.Y, 0, Handle, nil));
if hMenuItem > 0 then
SendMessage(Handle, WM_SYSCOMMAND, hMenuItem, 0);
end;