ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2017年11月23日(木) 10:39

All times are UTC+09:00




新しいトピックを投稿する  トピックへ返信する  [ 10 件の記事 ] 
作成者 メッセージ
 記事の件名: メニューの破棄
投稿記事Posted: 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関数のトピックスの解説では、「ウィンドウにセットされている
メニューは自動的に破棄されるので、この命令語を使う必要はありません。」と
在りますが、「ウィンドウにセットされているメニュー・・・」とは、どう言うことですか?


通報する
ページトップ
   
 記事の件名: Re: メニューの破棄
投稿記事Posted: 2014年7月27日(日) 22:24 
前半の意味がわかりませんが、少しでも参考になればと思い、書きます。
まず、本当はウィンドウを作るときはAPI関数のCreateWindowExなどを使って自分で作成するのです。

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

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

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


通報する
ページトップ
   
 記事の件名: メニューの破棄 2
投稿記事Posted: 2014年7月28日(月) 09:58 
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関数で破棄しなければいけないのでしょうか?

宜しくお願いします。


通報する
ページトップ
   
 記事の件名: Re: メニューの破棄
投稿記事Posted: 2014年7月28日(月) 21:07 
オフライン

登録日時: 2006年2月05日(日) 17:10
記事: 189
住所: 東京都
>RADツールで作成したメニューは、自動的に破棄されるのと言う事ですね。
RADツールで作成したメニューがあればCallback関数(CallBack.wbp)のウインドウ破棄イベント該当部分に
DestroyMenu関数がメニューごとに組み込まれます。結果的には自動的に破棄されることになります。

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

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

よろしくお願いします。


通報する
ページトップ
 記事の件名: Re: メニューの破棄
投稿記事Posted: 2014年7月29日(火) 11:21 
こういうイメージなんです。
変数=箱
構造体=複数の箱がくっついているモノ
ウインドウも複数の箱がくっついているモノです。メニューなどと書かれた箱があります。
メニューは木のようなものです。枝分かれしたりして、葉にメニュー項目が書いてあります。
メニューハンドルは、この木の幹に付いている取っ手だと思ってください。

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

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


通報する
ページトップ
   
 記事の件名: メニューの破棄 3
投稿記事Posted: 2014年7月30日(水) 10:05 
たかせさん、rikaeigoさん、ありがとう。

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

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

Caption1
  Item1
   Item1_1
    Item1_1_1
  Item2
   Item2_1
    Item2_1_1

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

宜しくお願いします。


通報する
ページトップ
   
 記事の件名: Re: メニューの破棄 3
投稿記事Posted: 2014年7月30日(水) 22:31 
オフライン

登録日時: 2006年2月05日(日) 17:10
記事: 189
住所: 東京都
①DeleteMenu関数でCaption1を削除した場合、Item1 や Item1_1 のハンドルは自動的に破棄されます。
②RemoveMenu関数でCaption1を削除した場合、Item1 や Item1_1 のハンドル破棄されません。
したがって削除したメニュー項目を復活させる必要があるときはRemoveMenu関数を使用します。
よろしくお願いします。


通報する
ページトップ
 記事の件名: メニューの破棄 4
投稿記事Posted: 2014年8月01日(金) 10:31 
たかせさん、ありがとう。

 DeleteMenu関数は、賢いですね。

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

宜しくお願いします。


通報する
ページトップ
   
 記事の件名: Re: メニューの破棄
投稿記事Posted: 2014年8月01日(金) 11:17 
ブラウザのお気に入りをいじってみてください。ドラッグしたりできますよね。そういうふうに使います。


通報する
ページトップ
   
 記事の件名: メニューの破棄5
投稿記事Posted: 2014年8月06日(水) 09:20 
rikaeigoさん、ありがとう。

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

宜しくお願いします。


通報する
ページトップ
   
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 10 件の記事 ] 

All times are UTC+09:00


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[1人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by KONISHI Yohsuke