過去の桐井戸端BBS (桐ver.8)
3720 トグルボタンで処理を選ぶ 高木一美 1999/12/13-11:02
いつもありがとうございます。ここでこんな質問していいかわからないので
すが、もし、いい方法があれば教えてください。
v5の一括処理で、下 のような画面表示をして、印字したいリスト名をえ
らび、1が入力されたリストのみを印字するようにしていました。

撮影リスト [ ]
発注リスト [ ]
指示リスト [ ]
要文字リスト [ ]
要ポジリスト [ ]

印刷するリストに1を入力してください

これをv8でフォームに置き換えてやりたいのですが、うまくいきません。
1を入力するかわりに、チェックボックスをつけて、チェツクボックス用の
表を開き、それぞれ項目がチェックされた時にリストを発行するというふう
に考えたのですが、画面が表示されてチェックするところまではできても、
リストを発行しないで終わってしまいます。

チェックボックスにせず、コマンドボタンにすればよいのではないかと思わ
れるかもしれないのですが、データを抽出するのにかなり時間がかかるので、
抽出した後は、一気に処理してしまいたいのです。

現在は、実行ウィンドウを表示させて、v5仕様のままで処理してますが、
実行ウィンドウをなくして使いたいと考えてします。

説明不足でわかりにくいかもしれませんが、ヒントになるようなことでも思
いつかれた方があれば、よろしくおねがいします。
いつも聞いてばかりですみません。
3725 Re:トグルボタンで処理を選ぶ 悲しげ 1999/12/13-13:47
記事番号3720へのコメント
これは、私がその内やろうと思っていたことなので、取り敢えず
考えてみました。
例によって(^^;)「フォーム呼び出し」を使います。元のフォーム
"リスト1.wfm"からリスト指定用の"リスト2.wfm"を呼び出すこ
とにします。リストの指定は、表を使ってもいいのですが、この
場合は変数を使うことにしました。よって、共通変数(整数また
は長整数)として、&撮影f,&発注f,&指示f,・・・・を宣言済みと
しまして、これらの値がon=1,off=0と考えます。

リスト1.wfmは、この場合、リスト2.wfmを呼び出すための暫定的
なフォームでして、「実行」ボタン(b実行)と「終了」ボタン(b終了)
だけで試しました。リスト1.kevでは「マウス左クリック」イベン
トとして次のような記述としています。
-------------------------------------------------------------
手続き定義開始 b実行::マウス左クリック(長整数 &マウス位置[2],・・・
 &撮影f=0,&発注f=0,&指示f=0,・・・
 変数宣言 文字列{&牡丹}
 フォーム呼出し "リスト2.wfm",ボタン=&牡丹,終了状態=&実行リターン
 条件(&牡丹="bキャンセル") 手続き終了
 条件(&撮影f=1) 手続き実行 撮影リスト印刷()
 条件(&発注f=1) 手続き実行 発注リスト印刷()
 条件(&指示f=1) 手続き実行 指示リスト印刷()
  ・・・・・・・・・・・
手続き定義終了

手続き定義開始 撮影リスト印刷()
 確認 "撮影リストを印刷します"
  ・・・・・・・
手続き定義終了

手続き定義開始 発注リスト印刷()
 確認 "発注リストを印刷します"
  ・・・・・・・
手続き定義終了

・・・・・・・・・・・・・・
-------------------------------------------------------------

次、リスト2.wfmの定義についてです。
 O 撮影リスト
 O 発注リスト
 O 指示リスト
 ・・・・・・
のようにトグルボタンを定義します。このソースを共通変数として
宣言済みの&撮影f、&発注f、・・・としておきます。
そして、オンの値を1、オフの値も設定しておいて0としておきま
す(これは不要なのかもしれませんが調べてません)。
あとは、ボタンをふたつ。「OK」(bOK)と「キャンセル」(bキャン
セル)でして、ボタンの機能はいずれも「閉じる」だけでいいです。

……と、これで要点は説明したと思います。こんな感じでちょいと
お試し下さい。(^^)v
実は私は、マウスクリックだけではなく、カーソル移動→[Enter]
でも指定できるようにしたり、あるいはリストに数字を付けておい
て、数字キー入力でダイレクト指定も可能なようなしたいと思って
いますが、それは今後(^^;)ボチボチ挑戦してみるつもりです。

3736 Re:トグルボタンで処理を選ぶ(続) 悲しげ 1999/12/13-21:46
記事番号3725へのコメント
リストの指定を、マウス左クリックだけでなく、カーソル移動→[Enter]
及び数字ダイレクト指定も可能にしてみました。
リストの中味を省略して、1:撮影、2:発注、3:指示の3つに絞ってます
けど。(^^;)
フォーム自体は、リストのラベルに数字を付けた他は、前述とさほど変
わっていないので、以下にkevのみ挙げます。
そうそう、マウスクリック以外のキーボードからのOKボタン代用は、暫
定的に[Tab]or[Dn]or[Shift]+[Enter]としてあります。
---------------- リスト1.kev ----------------
名札 メイン
var 共通,長整数{&撮影f,&発注f,&指示f}



手続き定義開始 b実行::マウス左クリック(長整数 ・・・・
 &撮影f=0,&発注f=0,&指示f=0
 var 文字列{&牡丹}
 フォーム呼出し "リスト2",ボタン=&牡丹,終了状態=&実行リターン
 条件(&牡丹="bキャンセル") return
 条件(&撮影f=1) call 撮影リスト印刷()
 条件(&発注f=1) call 発注リスト印刷()
 条件(&指示f=1) call 指示リスト印刷()
手続き定義終了

proc 撮影リスト印刷()
 確認 "撮影リストを印刷します"
end

proc 発注リスト印刷()
 確認 "発注リストを印刷します"
end

proc 指示リスト印刷()
 確認 "指示リストを印刷します"
end
---------------------------------------------
---------------- リスト2.kev ----------------
名札 メイン



手続き定義開始 フォーム::フォーム開始(長整数 &表番号)
 &撮影f=0,&発注f=0,&指示f=0
手続き定義終了

手続き定義開始 フォーム::キーダウン(長整数 &仮想キーコード・・・
 if(&仮想キーコード=9 .or &仮想キーコード=34\
   .or (&フラグ=4 .and &仮想キーコード=13))
                /*[Tab]or[Dn]or[Shift]+[Enter]*/
  method @bOK.実行()
 else if(&仮想キーコード=27)          /*[Esc]キー*/
  method @bキャンセル.実行()
 else if(&仮想キーコード=13)          /*[Enter]キー*/
  var 文字列{&focus}
  method @フォーム.フォーカスオブジェクト取得(&focus)
  if(&focus="tb撮影")
   &撮影f=#cond(&撮影f=1,0,1,1)
  else if(&focus="tb発注")
   &発注f=#cond(&発注f=1,0,1,1)
  else if(&focus="tb指示")
   &指示f=#cond(&指示f=1,0,1,1)
  end
  method @フォーム.再描画()
 else if(&仮想キーコード=49 .or &仮想キーコード=97) /*数字の「1」*/
  &撮影f=#cond(&撮影f=1,0,1,1)
  method @フォーム.再描画()
 else if(&仮想キーコード=50 .or &仮想キーコード=98) /*数字の「2」*/
  &発注f=#cond(&発注f=1,0,1,1)
  method @フォーム.再描画()
 else if(&仮想キーコード=51 .or &仮想キーコード=99) /*数字の「3」*/
  &指示f=#cond(&指示f=1,0,1,1)
  method @フォーム.再描画()
 end
 &処理中止=1
手続き定義終了
---------------------------------------------

3741 ありがとうございす 高木一美 1999/12/14-09:35
記事番号3736へのコメント
ありがとうごさいます。こんなに丁寧にお返事いただき、たいへんうれしいです。
ただ、私の能力では、読んですぐに理解することができないので、うまくできたかどうか
お返事は、少し時間を下さい。
今後もよろしくお願いいたします。
3744 Re:トグルボタンで処理を選ぶ(続々) 悲しげ 1999/12/14-12:02
記事番号3741へのコメント
どもっ、高木さん、わかんなかったですか?(;_;)

さて、今は判らないかもしれませんが、後々のために、先に書いた
kevを一部補足訂正しておきます。
まず、リスト1.kevの方です。

  手続き定義開始 b実行::マウス左クリック(長整数 ・・・・
   &撮影f=0,&発注f=1,&指示f=0
のように、&発注fだけ1を入れておくとかすると(何らかの条件の
時のみ1でもよい)、リスト指定時にはこのリストだけをデフォルト
でonにしておくこともできます。(^^)v

次、リスト2.kevの方。

  手続き定義開始 フォーム::フォーム開始(長整数 &表番号)
   &撮影f=0,&発注f=0,&指示f=0
  手続き定義終了
この部分は、蛇足であるのみならず、上記と矛盾する場合もある
ので、このイベント手続きはバッサリ削除した方がいいです。(^^;)

  手続き定義開始 フォーム::キーダウン(長整数 &仮想キー・・・
の手続きの中の最終行に
  &処理中止=1
と入れてありますが、これをここに記述したのは間違いで、
  else if(&仮想キーコード=13)
のif範囲の最後、すなわち
  else if(&仮想キーコード=49 .or &仮想キーコード=97)
の前に移動しておいて下さい。「&処理中止=1(以上)」と云うのは、
そのイベント手続きを抜けた直後の、桐本来のキーの挙動を一時的
に殺すためのものです。元記述のようにキーダウンイベント全体で
殺してしまうと、例えば矢印キーも利かないことになってしまいま
す(^^;)。この場合、[Enter]キーだけを殺すと云うことは、普通は
[Enter]を押すと次のトグルボタンにフォーカスが移るのですが、
これがフォーカスが移らなくなるように結果します。ま、お好みで
すが。

あと、細かいことですが、
  method @フォーム.再描画()
が、何度も出て来て冗長な感じがします。この記述は、本手続き定
義の最終行(元記述では「&処理中止=1」があった所)だけの記述
でまとめて行うことでいいと思いました。

ついでに云えば、数字や文字キー等、機能キー以外については「キ
ーダウン」ではなく「キー入力」イベントを使った方がいいかもし
れません。が、後者は、メイン&サブフォームを使っている場合、
仕様的に利かないことがあるので、私は全て「キーダウン」イベン
トを使うようにしています、癖です。(^^;)

3771 Re:トグルボタンで処理を選ぶ(続々) 高木一美 1999/12/16-10:43
記事番号3744へのコメント

熱心なご指導ありがとうごさいます。

パソコンの使用について、年々、自分では成長できているかなと思っていた
のですが、皆さんの投稿を読んでいると、まだまだ勉強不足で、理解するス
ピードの遅いナと痛感しています。

私は、プログラムを作るのが仕事ではなく、日常の仕事の合間にしているの
ですが、ここに投稿されている他の多くの方も、そんな感じですね。
時間がないといわず、もっと勉強したいと思います。

戻る