ツールバーボタンの削除
ツールバーからボタンを削除する適当な関数はないので,CM_CONTROLCHANGE メッセージを送信する必要があります。最初のパラメータは変更するコントロールです。2 番めのパラメータがゼロの場合はこのコントロールが削除され,ゼロ以外の場合はツールバーにコントロールが追加されます。デストラクタは,ツールバーのボタンを削除してからアクションとメニュー項目を削除します。これらの項目を削除すると,IDE の ActionList と MainMenu の項目が自動的に削除されます。
procedure remove_action (Action: TAction; ToolBar: TToolBar);
var
I: Integer;
Btn: TToolButton;
begin
for I := ToolBar.ButtonCount - 1 downto 0 do
begin
Btn := ToolBar.Buttons[I];
if Btn.Action = Action then
begin
{ 「ツールバー」から「ボタン」を除去 }
ToolBar.Perform(CM_CONTROLCHANGE, WPARAM(Btn), 0);
Btn.Free;
end;
end;
end;
destructor MyWizard.Destroy;
var
Services: INTAServices;
Btn: TToolButton;
begin
Supports(BorlandIDEServices, INTAServices, Services);
{ すべてのツールバーをチェックしてこのアクションを使用するすべてのボタンを除去 }
remove_action(NewAction, Services.ToolBar[sCustomToolBar]);
remove_action(NewAction, Services.ToolBar[sDesktopToolBar]);
remove_action(NewAction, Services.ToolBar[sStandardToolBar]);
remove_action(NewAction, Services.ToolBar[sDebugToolBar]);
remove_action(NewAction, Services.ToolBar[sViewToolBar]);
remove_action(NewAction, Services.ToolBar[sInternetToolBar]);
NewItem.Free;
NewAction.Free;
end;
void __fastcall remove_action (TAction* action, TToolBar* toolbar)
{
for (int i = toolbar->ButtonCount; --i >= 0; )
{
TToolButton* button = toolbar->Buttons[i];
if (button->Action == action)
{
// "toolbar" から "button" を削除
toolbar->Perform(CM_CONTROLCHANGE, WPARAM(button), 0);
delete button;
}
}
}
__fastcall MyWizard::~MyWizard()
{
_di_INTAServices services;
BorlandIDEServices->Supports(services);
// すべてのツールバーをチェックし,このアクションを使用する
// ボタンを削除
remove_action(action, services->ToolBar[sCustomToolBar]);
remove_action(action, services->ToolBar[sDesktopToolBar]);
remove_action(action, services->ToolBar[sStandardToolBar]);
remove_action(action, services->ToolBar[sDebugToolBar]);
remove_action(action, services->ToolBar[sViewToolBar]);
remove_action(action, services->ToolBar[sInternetToolBar]);
delete menu_item;
delete action;
}