ab.com コミュニティ
https://www.activebasic.com/forum/

メニューの破棄
https://www.activebasic.com/forum/viewtopic.php?t=4563
ページ 11

作成者:  サンゴ [ 2014年7月18日(金) 11:36 ]
記事の件名:  メニューの破棄

 メニューの破棄について、いくつか質問させて頂きます、宜しくお願いします。

Caption1
Item1
Item1_1
Item1_1_1
Item2
Item2_1
Item2_1_1
caption2
Item3

 Caption1 を削除したい場合、先に Item1_1 や Item1 を DestroyMenu関数で破棄
しなければいけないのでしょうか?

 DestroyMenu関数のトピックスの解説では、「ウィンドウにセットされている
メニューは自動的に破棄されるので、この命令語を使う必要はありません。」と
在りますが、「ウィンドウにセットされているメニュー・・・」とは、どう言うことですか?

作成者:  rikaeigo [ 2014年7月27日(日) 22:24 ]
記事の件名:  Re: メニューの破棄

前半の意味がわかりませんが、少しでも参考になればと思い、書きます。
まず、本当はウィンドウを作るときはAPI関数のCreateWindowExなどを使って自分で作成するのです。

しかし、ABにはRADツールがあるので、CreateWindowEx関数をその手間はABの開発者様がやってくださっているのです。
プロジェクトのフォルダにあるMakeWindow.wbpというファイルが自動で生成されて、その中に自動でCreateWindowEx関数が書き込まれているのです。
そのCreateWindowEx関数の引数のひとつにメニューがあります。hMenu As HMENU というやつです。
それがウィンドウに関連付けられているメニューです。
そしてそのメニューはSetMenu関数で別のメニューにすりかえることができます。

しかし、ABのRADではウィンドウプロパティのメニューのところで簡単に関連付けることが出来ます。

ウィンドウを破棄するときはその関連付けられているメニューが破棄されます。
それ以外のSetMenuなどですりかえられたときの古いほうのメニューは破棄されません。
そういう孤独なメニューはDestroyMenu関数で破棄してやるのです。

作成者:  サンゴ [ 2014年7月28日(月) 09:58 ]
記事の件名:  メニューの破棄 2

rikaeigoさん、ありがとう。

 質問の順番が前後しますが、

> DestroyMenu関数のトピックスの解説では、「ウィンドウにセットされている
>メニューは自動的に破棄されるので、この命令語を使う必要はありません。」と
>在りますが、「ウィンドウにセットされているメニュー・・・」とは、どう言うことですか?

RADツールで作成したメニューは、自動的に破棄されるのと言う事ですね。
そして、SetMenu関数で生成したハンドルは、DestroyMenu関数で破棄してやると言う事ですね。
また、CreateMenu関数やCreatePopupMenu関数で生成したハンドルも同様、破棄してやると言う事ですね。
--------------------------------------------------------------------------------------------------------------

Caption1
  Item1
   Item1_1
    Item1_1_1
  Item2
   Item2_1
    Item2_1_1
caption2
  Item3

 Caption1 をDeleteMenu関数で削除したい場合、先に Item1_1 や Item1 及び Item2_1 や Item2 を
先に DestroyMenu関数で破棄しなければいけないのでしょうか?

宜しくお願いします。

作成者:  たかせ [ 2014年7月28日(月) 21:07 ]
記事の件名:  Re: メニューの破棄

>RADツールで作成したメニューは、自動的に破棄されるのと言う事ですね。
RADツールで作成したメニューがあればCallback関数(CallBack.wbp)のウインドウ破棄イベント該当部分に
DestroyMenu関数がメニューごとに組み込まれます。結果的には自動的に破棄されることになります。

>そして、SetMenu関数で生成したハンドルは、DestroyMenu関数で破棄してやると言う事ですね。
>また、CreateMenu関数やCreatePopupMenu関数で生成したハンドルも同様、破棄してやると言う事ですね。
はいそのとおりです。

>Caption1 をDeleteMenu関数で削除したい場合、先に Item1_1 や Item1 及び Item2_1 や Item2 を
>先に DestroyMenu関数で破棄しなければいけないのでしょうか?
メニュー項目を削除するときは特にDestroyMenu関数で破棄しなくてもよいと思います。

よろしくお願いします。

作成者:  rikaeigo [ 2014年7月29日(火) 11:21 ]
記事の件名:  Re: メニューの破棄

こういうイメージなんです。
変数=箱
構造体=複数の箱がくっついているモノ
ウインドウも複数の箱がくっついているモノです。メニューなどと書かれた箱があります。
メニューは木のようなものです。枝分かれしたりして、葉にメニュー項目が書いてあります。
メニューハンドルは、この木の幹に付いている取っ手だと思ってください。

DestroyMenuは木全体を破棄します。取っ手を持って簡単に取れるのです。
枝や葉を切って捨てるのがDeleteMenuです。
RemoveMenuを使うと、もう一度再生可能な状態で切ることが出来ます。

現在では、破棄についてあまり神経質になる必要は無いそうです。

作成者:  サンゴ [ 2014年7月30日(水) 10:05 ]
記事の件名:  メニューの破棄 3

たかせさん、rikaeigoさん、ありがとう。

 具体的で解りやすい説明で大分理解出来ました。

 DestroyMenu関数は、メニューハンドルの破棄で、DeleteMenu関数は、項目の破棄と理解しているのですが、
DeleteMenu関数で Caption1 を削除した場合、Item1 や Item1_1 のハンドルは、どうなるのでしょう?
自動的に破棄されるのですか? その辺が解りません。

Caption1
  Item1
   Item1_1
    Item1_1_1
  Item2
   Item2_1
    Item2_1_1

又、RemoveMenu関数は、どういった時に使用するのでしょうか?

宜しくお願いします。

作成者:  たかせ [ 2014年7月30日(水) 22:31 ]
記事の件名:  Re: メニューの破棄 3

①DeleteMenu関数でCaption1を削除した場合、Item1 や Item1_1 のハンドルは自動的に破棄されます。
②RemoveMenu関数でCaption1を削除した場合、Item1 や Item1_1 のハンドル破棄されません。
したがって削除したメニュー項目を復活させる必要があるときはRemoveMenu関数を使用します。
よろしくお願いします。

作成者:  サンゴ [ 2014年8月01日(金) 10:31 ]
記事の件名:  メニューの破棄 4

たかせさん、ありがとう。

 DeleteMenu関数は、賢いですね。

 RemoveMenu関数は、もう一つ解らなく、「メニュー項目を復活させる」と言うのは、
どういった場面で使用するのでしょうか?

宜しくお願いします。

作成者:  rikaeigo [ 2014年8月01日(金) 11:17 ]
記事の件名:  Re: メニューの破棄

ブラウザのお気に入りをいじってみてください。ドラッグしたりできますよね。そういうふうに使います。

作成者:  サンゴ [ 2014年8月06日(水) 09:20 ]
記事の件名:  メニューの破棄5

rikaeigoさん、ありがとう。

 カスタマイズする以外にRemoveMenu関数の使用する場面は無いのでしょうか?

宜しくお願いします。

ページ 11 全ての表示時間は UTC+09:00 です
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/