procedure TForm1.btn1Click(Sender: TObject);
var
  pc :TPoint;
begin
  SetForegroundWindow(Handle)  ;
  pc :=Btn1.ClientToScreen(Point(0, 0)) ;
  TrackPopupMenu(PM1.Handle,TPM_BOTTOMALIGN,pc.X, pc.Y,0,Handle,nil);
  PostMessage(Handle, WM_NULL, 0, 0);
end;//以下2个过程没有执行啊--------------------------------procedure TForm1.N3Click(Sender: TObject);
begin
  ShowMessage('ok');
end;procedure TForm1.N1Click(Sender: TObject);
begin
  close;
end;

解决方案 »

  1.   


    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Menus, StdCtrls;type
      TForm1 = class(TForm)
        Btn1: TButton;
        procedure Btn1Click(Sender: TObject);
      protected
        procedure WMCommand(var Msg: TWMCommand); message WM_COMMAND;
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.WMCommand(var Msg: TWMCommand);
    begin
      case Msg.ItemID of
        101 : ShowMessage('ok');
        102 : Close;
      end;
      inherited;
    end;procedure TForm1.Btn1Click(Sender: TObject);
    var
      hPopMenu : HMENU;
    begin
      hPopMenu := CreatePopupMenu;
      AppendMenu(hPopMenu, MF_STRING, 101, '关于');
      AppendMenu(hPopMenu, MF_SEPARATOR, 0, nil);
      AppendMenu(hPopMenu, MF_STRING, 102, '退出');
      TrackPopupMenu(hPopMenu, TPM_BOTTOMALIGN,
                     TControl(btn1).ClientOrigin.X,
                     TControl(btn1).ClientOrigin.Y,
                     0,Handle,nil);
      PostMessage(Handle, WM_COMMAND, 0, 0);
      DestroyMenu(hPopMenu);
    end;end.
      

  2.   

    PostMessage(Handle, WM_COMMAND, 0, 0);这一行可以不用
      

  3.   

    只要概念清晰,别绕混了,想怎么加就怎么加
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Menus, StdCtrls;type
      TForm1 = class(TForm)
        Btn1: TButton;
        procedure Btn1Click(Sender: TObject);
      protected
        procedure WMCommand(var Msg: TWMCommand); message WM_COMMAND;
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.WMCommand(var Msg: TWMCommand);
    begin
      case Msg.ItemID of
        101 : ShowMessage('ok');
        102 : Close;
      end;
      inherited;
    end;procedure TForm1.Btn1Click(Sender: TObject);
    var
      hPopMenu : HMENU;
      sPopMenu : HMENU;
      mii : TMENUITEMINFO;
    begin
      hPopMenu := CreatePopupMenu;
      sPopMenu := CreatePopupMenu;
      mii.fMask := MIIM_SUBMENU or MIIM_STRING;
      mii.dwTypeData := '关于';
      mii.cbSize := sizeof(TMENUITEMINFO);
      mii.hSubMenu := sPopMenu;
      InsertMenuItem(hPopMenu, 0, true, mii);
      AppendMenu(sPopMenu, MF_STRING, 101, '显示');
      AppendMenu(hPopMenu, MF_SEPARATOR, 0, nil);
      AppendMenu(hPopMenu, MF_STRING, 102, '退出');
      TrackPopupMenu(hPopMenu, TPM_BOTTOMALIGN,
                     TControl(btn1).ClientOrigin.X,
                     TControl(btn1).ClientOrigin.Y,
                     0,Handle,nil);
      DestroyMenu(hPopMenu);
      DestroyMenu(sPopMenu);
    end;end.