ボタンのクリックで呼び出される実行ブロックで、ボタンがクリックされた場所に表示されるポップアップ メニューを作成します。現在は適切に表示されており、そのうちの 1 つにいくつかのサブアイテムがあるいくつかのアイテムがあります。これが一度実行されてからデストラクタを呼び出すと、問題ありません。しかし、それを 2 回実行すると (ポップアップを表示してアイテムを 2 回クリック)、破棄すると、アプリケーションがクラッシュします。ポップアップを正しく解放していないためだと思います(これはプライベートプロパティとして宣言されています)。
procedure TPlugIn.Execute(AParameters : WideString);
var
i: Integer;
pnt: TPoint;
begin
GetCursorPos(pnt);
FPopup := TPopupMenu.Create(nil);
FPopup.OwnerDraw:=True;
FPopup.AutoHotkeys := maManual;
//SQL Upgrade
Item := TMenuItem.Create(FPopup);
Item.Caption := 'Database Install/Upgrade';
Item.OnClick := ShowItemCaption;
FPopup.Items.Add(Item);
//Language Folder
Item := TMenuItem.Create(FPopup);
Item.Caption := 'Language Folder';
Item.OnClick := ShowItemCaption;
FPopup.Items.Add(Item);
//Machines
Item := TMenuItem.Create(FPopup);
Item.Caption := 'Machines';
MachineItem := TMenuItem.Create(FPopup);
MachineItem.Caption := 'Sample Machine 1';
MachineItem.OnClick := ShowItemCaption;
Item.Add(MachineItem);
MachineItem := TMenuItem.Create(FPopup);
MachineItem.Caption := 'Sample Machine 2';
MachineItem.OnClick := ShowItemCaption;
Item.Add(MachineItem);
FPopup.Items.Add(Item);
Self.FPopup := FPopup;
FPopup.Popup(pnt.X, pnt.Y);
end;
このShowItemCaption
手順では、その送信者オブジェクトのキャプションを表示するだけです。特定のイベントはまだコーディングしていません。実行手順でポップアップを解放すると、ポップアップは表示されなくなります。
destructor TPlugIn.Destroy;
begin
inherited;
FPopup.Free;
//ShowMessage('freed');
end;