過去の桐井戸端BBS (桐ver.8)
15513 コマンドボタンではなくピクチュア領域でイベントを使いたい TM 2002/03/20-17:33
現在イベントに挑戦中の者です。
フォームAにコマンドボタンを配し、左クリックでフォームBを開きます。
フォームBにはピクチュア領域を全面に設定してあります。
デザイン的にフォームBにはコマンドボタンを使用したくないので、
ピクチュアをマウスクリックすることでフォームAに戻るようにしたいと考えています。
イベントを使用してできないでしょうか。その場合の記述方法等お教えいた
だきたくお願いいたします。

15516 Re:ピクチュア領域のイベントの記述について 【多遊】 2002/03/20-21:04
記事番号15513へのコメント
TMさん>こんばんは

>イベントを使用してできないでしょうか。その場合の記述方法等お教えいた
>だきたくお願いいたします。

イベントをお望みのようですが、ピクチャーにコマンドボタンの背景を透明にしたものを重ねて配置すれば、
あたかもピクチャーのクリックで閉じたように見えます。

コマンドボタンの機能に「閉じる」を指定しておけばいいでしょうね
お試しください。

15517 Re:ピクチュア領域のイベントの記述について 悲しげ 2002/03/20-22:45
記事番号15513へのコメント
どもっ、TMさん
kevが必要になりますが、ピクチャーobj自体に「マウス左クリック」イベントなどを設定することは可能だと思います。
ピクチャobjの属性で「イベント」タブを指定。
この画面で「マウスイベントを使用する」に、もしチェックが入っていなければ付けます。
すると、マウス系のイベント候補が現れるはずですから、
そこで使いたいイベントにチェックを入れ、ダブルクリックすると
kevの当該イベント手続きの記述に入ることができます。

15521 Re:ピクチュア領域のイベントの記述について TM 2002/03/21-10:21
記事番号15513へのコメント
多遊さん悲しげさんコメントありがとうございました。
コマンド牡丹は、所謂ボタンのイメージしかなかった頭になかったんですが、
ピクチュアobに重ねるということも出来るんですね。目からうろこです。
実はピクチュアobのイベントにフォームを閉じてフォームAに戻る場合の記述が
どうしてもわからなくて質問したのですが、あまりにも初歩的なことで
恥ずかしいのですがおねがいします。
15522 Re:ピクチュア領域のイベントの記述について 【多遊】 2002/03/21-11:26
記事番号15521へのコメント
TMさん

悲しげさんの
>そこで使いたいイベントにチェックを入れ、ダブルクリックするとkevの当
>該イベント手続きの記述に入ることができます。
ここまではおわかりですか?

一番簡単な方法は。
フォームのワークスペース上に、コマンドボタンを1個作成し、機能名を「閉じる」と設定してください。


そこまでできたら、
手続き定義開始 ピクチャー::マウス左クリック(長整数 &マウス位置[2]・・・省略)
  メソッド呼び出し @閉じるボタン.実行()
手続き定義終了
※閉じるボタン名は同一にしてください。

ただ疑問は、最初の質問に
>現在イベントに挑戦中の者です。
と、記載されてましたので、どうしてもイベントで行いたいのですね。

それと、
>フォームAにコマンドボタンを配し、左クリックでフォームBを開きます。
>フォームBにはピクチュア領域を全面に設定してあります。
この時点でフォームAは閉じられているのですか?

もしそうでしたら、
上記コマンドボタンの1行目に機能名「開く」、パラメータに「フォームA」
2行目に機能名「閉じる」としてください


15524 Re:ピクチュア領域のイベントの記述について TM 2002/03/22-09:22
記事番号15522へのコメント
【多遊】さん

>悲しげさんコマンドボタンを作ってイベントで操作する方法についてはよくわかりました。

私はイベントの勉強のため、コマンドを使用せずピクチュアオブジェクトのみで
当該フォームを閉じることができないかと・・(*このときフォームAは開いたままになっていますが
この問題とは関係ないと思いますが念のため)
質問の主旨は、ピクチュアオブジェクトにはイベントタブしかなく、コマンドが使えないわけで、
したがってイベントでのそういう操作ができないかと思ったわけです。
説明が不十分ですみません。よろしくお願いします。

15529 Re:ピクチュア領域のイベントの記述について 【多遊】 2002/03/23-08:32
記事番号15524へのコメント
>私はイベントの勉強のため、コマンドを使用せずピクチュアオブジェクトのみで当該フォー
>ムを閉じることができないかと・・(*このときフォームAは開いたままになっていますが
>この問題とは関係ないと思いますが念のため)
>質問の主旨は、ピクチュアオブジェクトにはイベントタブしかなく、コマンドが使えないわ
>けで、したがってイベントでのそういう操作ができないかと思ったわけです。

このなかで「コマンドを使用せず」とか、「コマンドが使えないわけで」・とか
かかれてますが、
「コマンドボタンを使用せずに」ともとれるし、「繰り返し・ケース文などの、
 一括やイベントに使用されるコマンドを使用せずに」ともとれます。

また、「コマンドを使用せず」は、「コマンドボタンを使用せず」
「コマンドが使えないわけで」は、「ピクチャーオブジェクトには、コマンドボタンのような、
機能:パラメーターが書けない」の意味でしょうか?
いずれにせよ、意味がわからないままのレスです


また、
>この時点でフォームAは閉じられているのですか?
の質問に、

>(*このときフォームAは開いたままになっていますが
>この問題とは関係ないと思いますが念のため)

と、お答えいただきましたが、最初のご質問の時

>ピクチュアをマウスク
>リックすることでフォームAに戻るようにしたいと考えています。

と、かかれていましたね。

と言うことは、最初のご質問時に「Bフォームを閉じる」だけでよかったようにも思えます。

結論として
>ピクチュアオブジェクトのみで当該フォー
>ムを閉じることができないかと・・
『できません』

でもせっかくイベントを勉強されてるようですので、コマンドボタンや、イベント処理のコマンドも覚えられた方がいいでしょう。

ヒントとして記載しておきますが、「ウィンドウ終了 <ウィンドウハンドル>」というコマンドがあります。
これは、イベント(kev)に記載して利用できますが、「コマンドを使用せず」に反しますね。

ps.ご質問の意味を完全に理解できないままのレスで申し訳ございません。
また、回答者が状況判断に必要で質問したのに対し
>この問題とは関係ないと思いますが念のため)
念押しをいただきましたが、質問者が関係ないと書かれれば・・・・・
それを利用できなくなりますね。

15533 【解説】フォームを開いたり閉じたりする(1) 佐田 守弘 2002/03/23-11:17
記事番号15513へのコメント
TMさん
既に質問の件は解決していると思いますが、もかなり重要な事ですので、
過去ログを残す意味で、多少補足させて頂きます。

■ フォームの開き方と閉じ方
●次のフォームを開く
例えばメインメニューのフォームから次のフォームを開くなど、フォームから次のフォームを呼び出す処理は良く行われます。

@コマンドボタンの機能で[開く][<フォームファイル名>]を実行する
これがもっとも基本的な方法ですし、もっとも素直な方法です。
そしてこのフォームがモーダルでなければ、2番目の機能に[閉じる]を書いておく事によって、
自身のフォームを閉じられます。
つまり、フォームAからフォームBに完全に切り替わるわけです。

Aコマンドボタンの[フォームの選択]で切り替える
この方法は、例えばオーバーラップフォームなどモーダルで開かれるフォームでも、
別のフォームに切り替えが行えます。
ただし、双方のフォームが編集対象表を持たない場合とか、編集対象表が同じ場合に限られます。

B「フォーム呼出し」コマンドでモーダルフォームを開く場合
イベントのコマンドを使って、別のフォームを開く場合には、
この方法にほぼ限定されると考えた方が良いでしょう。
前のフォームAはそのまま残り、その上から新しいフォームBがモーダルで開きます。

C「ウインドウ作成」コマンドで開く方法は?
できないわけではありませんが、同じ編集対象表のフォームを開けない、
開いたフォームはチャイルドになるといった制限があるため、
私は使わない事にしております。

●フォームを閉じる方法
「ウインドウ作成」コマンドで開いた場合には、「ウインドウ終了」
コマンドで閉じます。
それ以外の場合には、フォームを閉じる場合には、コマンドボタンの
機能名の「閉じる」機能を使います。つまり、[閉じる]ボタンを作っておきます。
そしてマウスでクリックする代りに、
 メソッド呼び出し @閉じる.実行()
の様なコマンドを実行し、マウスでクリックする代りに、その[閉じる]ボタンをコマンドで実行して閉じます。
このコマンドボタンは表示しておいても構いませんし、
表示しておくのが不要なら、非表示にしたり、他のオブジェクトの背面に隠してしまっても構いません。

●フォームを閉じた後
フォームを閉じた後は、次のいずれかになるでしょう。
 ・元のフォームに戻る場合
 ・新しいフォームを開く場合
 ・フォームを閉じて終わる場合
そしてどの様に閉じるかは、そのフォームの開き方とも関わります。
@コマンドボタンの「開く」「閉じる」で開いた時
この方法で開いた場合、元のフォームAは既に閉じられています。
ですから、AからBを開いた時の様に、BからAを開き直します。
A「フォームの選択」で切り替えた時
この場合も、AのフォームからBに切り替わっているわけで、Aは閉じています。
ですからもう一度Aのフォームを選択します。
Bフォーム呼出しで開かれたフォーム
呼び出し前のフォームは閉じていません。Bを閉じれば自然とAに戻ります。
しかも後述する様に、イベントハンドラ内のコマンドも継続して行われます。

(続く)

佐田守弘(KS-00119)
15534 【解説】フォームを開いたり閉じたりする(2) 佐田 守弘 2002/03/23-11:17
記事番号15513へのコメント
■ フォームを切り替える事に関連して
●モーダルなフォームから開いた場合
例えばメインメニューのフォームをオーバーラップで作成した場合、
メニューのコマンドボタンに[開く][閉じる]を設定しても、2番目の
[閉じる]機能は実行されません。これはこのフォームがモーダルフォームだからです。
メインメニューより大きなフォームを開けば裏に隠れてしまいますが、
最初に開いたメインメニューはそのまま残っています。
つまり、新しく開いたフォームBを閉じる事によって、前のフォームAに戻る事になります。
ですから、この場合にはフォームBを開く時の機能名には、単に[開く]を、
閉じる時には、単に[閉じる]を設定しておきます。
これは、フォーム呼出しコマンドで開く場合も同様です。

●[開く][閉じる]とフォーム呼出しコマンドとの違い
コマンドボタンの[開く][閉じる]機能でフォームを切り替える方法は、
もっとも基本的で素直な方法です。この場合、フォームAからBを開き、
Bを閉じてAに戻った時には、フォーム編集の状態に戻ります。
そしてそこから次に何をするかは、ユーザーの操作にまかされます。

一方、イベントハンドラに記述したフォーム呼出しコマンドでフォームを
開き、[閉じる]ボタンを実行してフォームBを閉じた場合には、
イベントハンドラ内の、次のコマンドが実行されます。
例えば、フォームAからBを開き、Bでの処理が終わったら、BからCに切り替えたい様な場合には、
 フォーム呼出し <B>
 フォーム呼出し <C>
と記述しておけば良いわけです。また、BやCのフォームで入力した値を使って、引き続き次の処理を行う事もできます。
[開く][閉じる]機能でフォームBを開いて閉じた後、フォームAで
その後の処理を自動的に行う場合には、閉じるだけでなくて、
別に作っておいた手続きを実行させる必要があります。

●フォームを切り替える時の注意
イベントファイルは、フォームと1対1で作成するのが原則ですが、
イベントファイルの数が増えるのを嫌って、複数のフォームで1つの
イベントを共有する場合があります。
その場合の注意を述べます。

フォームを開くと、設定されているイベントファイルも開かれます。
これは[フォームの選択]でフォームを切り替えた場合でも同じです。
イベントファイルが開かれると、イベントファイルのメイン部分が
コマンドとして実行されます。
このメイン部分には、変数宣言が行われている事が多いのですが、
イベントファイルが開かれる事によって、変数宣言が再度実行されます。
同じデータ型で同じ変数を再度宣言し直しても、それ自体はエラーになりません。
しかし、値はクリアされます。

つまり、フォームAからBを開いて何か処理を行い、
その結果を変数に代入して元のAに戻り、そこでその値を利用する場合を考えてみます。
双方のフォームに共通なイベント「a.kev」は、Bに切り替える時と、
再びAに戻る時に実行されますから、AからBへ、あるいはBからAへ
変数を使って値を引き渡そうとしても、フォームが呼び出された段階で
値は未定義(あるいは初期値)に戻されます。

これを避けるためには、
 条件 (#変数(引き渡し値)=#未定義) 変数宣言 文字列{&引き渡し値}
の様な書き方をしておく必要があります。

佐田守弘(KS-00119)
15535 Re:ピクチュア領域のイベントの記述について 悲しげ 2002/03/23-11:21
記事番号15529へのコメント
私も【多遊】さん同様、「コマンド」なる云い方が、「一括処理コマンド」を指しているのか、
あるいは「コマンドボタン」を指しているのかが判らないので、まずはこの点を明らかにすべきだと思います。
余談ながら、一般的に「コマンド」と略記する時、DOS桐からの流れからして
「一括処理コマンド」を指し、「コマンドボタン」の略記は「ボタン」とするのが桐語(?)としては一般的だと思います。

で、TMさんの「イベントの勉強のため、コマンドを使用せず」を、
上記桐語一般とは逆に「kevの記述の方でやる方法を勉強するために、
なるべく牡丹の機能を使わずに、一括処理コマンドだけで」と解釈した方が、
意味が通りそうなので、その線でコメントします。

ウィンドウを閉じる一括処理コマンドは「ウィンドウ終了」です。しかし、
ヘルプの一番上には「イベントでの使用  △自身のフォームに対しては、
つねに不可。」と記載されています。※
と云うことは、この一括処理コマンドは他のフォームを閉じる時だけに使うもので、
自分自身のフォームを閉じる場合は、閉じる機能の牡丹を
「メソッド呼出し @牡丹名.実行()」とするしかないと云うことになります。
ですから、もし絶対に牡丹を使わないと云うことだったら、
それはあまり現実的な態度ではありません。

※でも、「ウィンドウ終了」コマンドでkevから自身のフォームも閉じることは
実際には不可能ではないようです。ただ、ちょっと挙動がおかしいことがあるらしくて(確かby akkun)、
やはり使わない方が無難かもしれません。

15537 Re:ピクチュア領域のイベントの記述について TM 2002/03/23-11:34
記事番号15529へのコメント
【多遊】さん
ご丁寧なレスありがとうございます。「コマンドを使用せず」と書いたのは「コマンドボタンを作らずに」のつもりでした。
表現が十分でなかったのですみません。

結論は、ピクチュアオブジェクトのイベントではそのフォームを閉じるのは、コマンドボタンの作成が必要ということなのですね。
いろいろありがとうございました。V4から桐を使っており一括処理はまあまあ組めるようになったのですが、
イベントはなかなか理解できずにいます。
何とかがんばりたいと思っています。
あなたの作品はHPで拝見させていただいてとても参考になっています。今後もよろしくお願いいたします。
15539 Re:ピクチュア領域のイベントの記述について 【多遊】 2002/03/23-13:22
記事番号15537へのコメント
>イベントはなかなか理解できずにいます。何とかがんばりたいと思っています。
>あなたの作品はHPで拝見させていただいてとても参考になっています。

HPへおいでいただきありがとうございます。と
それだけでは申し訳ありませんので、イベントについて少し説明をさせていただきます。

『イベントの考え方』
おおげさに言えば、イベントだけではなにもしません。
イベントとは、なにかを行う引き金(きっかけをくれるだけ)と考えてください。

今回の例で言えば「ピクチャーオブジェクト」は、主に画像を表示させる為に使用します。
このピクチャーオブジェクトを利用して終了させるためには、
マウスでクリックしたとき、「終了(閉じる)」というコマンドを実行させる必要があります。
イベントとは、この「マウスでクリックしたとき」にあたります。
したがってどうしても「終了(閉じる)」というコマンドが必要になってきます。

オブジェクトの特性もあります。
上記のピクチャーオブジェクトでは、ソースに書かれた画像を表示させる役目です
コマンドボタンは、機能:パラメータを解釈して実行させるのが役目です
したがって、同じ機能を求めるのは無理ですね。


また他の考え方では、例えば「マウス移動イベント」で説明しますと
実は、これは常に「OS(windows)・桐」でも同時にイベントを使用していると
考えてください。
桐のフォームの外へでてもマウスカーソル(白抜き矢印等)が動いてますね。
また、イベントを使用していない表(tbl)形式でもマウスカーソルは動きます。

定義画面でもイベントは使用されています。これは、ユーザーが作成したものではなく
プログラム自体で処理されています。ある部分をクリックするとフォーカスを
設定するとか、プログラムを実行するとか・・・・

桐のフォーム上で特定のオブジェクトにイベントを設定してある場合、
そこでイベントが発生し、その範囲外では、桐のフォームで設定されてるイベントが発生し、
桐の範囲外では、OSで設定されてるイベントが発生しているわけです。
エクスプローラで、ファイル名をクリックすると対象ファイルが選択されますね
これも一種のイベントが発生し、エクスプローラの中にかかれているコマンドが実行され、
ファイル名が反転表示になるわけです。
そんなふうに考えると、イベントは、いつも利用している訳ですね。

いつも使い慣れてるマウス操作以外にも桐にはたくさんイベントがあります。
みなさんの作品等をご覧いただき少しづつ覚えられればいいですね。


15541 Re:佐田さんありがとうございます TM 2002/03/23-15:03
記事番号15534へのコメント
佐田 守弘さん
懇切な解説本当にありがとうございます。じっくり読み返して勉強したいと思います。
TM

戻る