過去の桐井戸端BBS (桐ver.8
2635 一覧表フォームで指定したレコードをカード形式で編集したい しどろ 1999/9/9-18:07
はじめまして、「しどろ」と言います。幅田さんと同じ県に住んでいます。

v5で作ったシステムもどきを、v8に変えていこうと奮闘しています。
特に、イベントやメソッドとかウィンドウズハンドルなどがなかなか理解できず
困っています。
 ベタベタの一括でやろうとすればできるのですが、ここの過去のBBSで
「V8ではフォームとイベントだけで作っていくのがスジ」というお話を見て、
そうだ!、その通りだ!、そりゃかっこいい!とますます深みにはまっています。
前置きが長くなりましたが、

一覧表フォームで1レコードを指定し(できればリターンキーで)、カード形式
のフォームでそのレコードを編集する

という処理をイベントのみで行う時のお手本を、教えて下さい。どこかに良いサ
ンプルが場所を教えてもらうだけでも結構です。
多分,解る方には単純なことだと思いますが、一括から抜けきれない自分には
どうしても作れません。 よろしくお願いします。 
2651 Re: 宮城 1999/9/10-21:42
記事番号2635へのコメント
しどろさん、こんにちは。過去BBS V7 フォーム 2204 が参考になるのでは?

ちょっと気になりましたが、表であるフォームで絞り込んでも、別のフォーム
に移った瞬間、絞り込みは解除されるはずです。これを回避するには、必要項
目だけに絞ったダミー表を書き出し、そこで絞り込みさせておいて、元の表を
フォームなりレポートなりで開き、ダミー表から併合・絞り込みさせるのかな
と考えておりますが、いかがでしょうか。

>「V8ではフォームとイベントだけで作っていくのがスジ」

これはどうでしょうか? 「ただし、従来の延長線上で一括処理メインで作成
する道もある」と続くと思います。イベント否定する気はありません。
2653 Re: いかすぱげてぃ 1999/9/11-12:51
記事番号2635へのコメント
しどろさん、こんにちわ。

>一覧表フォームで1レコードを指定し(できればリターンキーで)、カード形式
>のフォームでそのレコードを編集する
>
>という処理をイベントのみで行う時のお手本を、教えて下さい。どこかに良いサ
>ンプルが場所を教えてもらうだけでも結構です。


まず、前提なる仕様をどうするかによってとる手法も変わるかと思います。
いく通りかの方法があると思いますが、下記は次の仕様をとったときの一例です。

仕様:1)一覧フォームはレコードを選択するためのフォームとして、基本的に編集処理
     はカード型フォームにて行う。
   2)カード型フォームはデータの編集を主として、検索や並び替えなどは行わない。

取りあえずポイントだけですが、お許し下さい。

ポイント1:多重化
 各フォームの「編集対象表:許可作業」にて多重化の許可を指定しておきます。
 これにより、1つのテーブルを同時に2つ以上で開く事が出来ます。

ポイント2:対象行(レコード)の明示
 処理行指定コマンドのようなイメージで1行(レコード)すべてを反転表示させる
 為に、フォーム明細部の「処理対象行文字色」と「処理対象行背景色」を「反転色」
 に設定します。(フォーカス項目のみ反転の状態でいいのであれば不要です)

ポイント3:ボタンの設置
 これは好き嫌いの問題ですが、一覧表フォームの明細行にボタンを設置(繰り返し表
 示)するか、またはフッタ部などへ「編集へ」というようなボタンを1つ設置します。
 ここでは、明細行へボタン(オブジェクト名[b編集へ])を設置したとします。
 
ポイント4:ユニーク項目
 編集対象表にはカウンタ項目を1つ用意し、必ずユニーク(他にない)な値があるこ
 とが必要です。ユーザーが意識しない分、適当なカウンタ項目を使用するのが便利で
 す。もちろん、フォームにあるその項目がある必要はありません。

ポイント5:ボタンへのコマンドまたはイベントの割りつけ
 ポイント3で設置したボタンに次のような内容をコマンドまたはイベントにて割りつ
 けます。
 1)カレントレコードのユニーク値を変数に取得
 2)コマンドであれば「モーダルフォーム」、イベントであれば「フォーム呼び出し」
   コマンドでカード型編集フォームを開く

ポイント6:カード型フォームの処理
 カード型フォームのフォーム開始イベントで、ポイント5で代入された変数を調べ
 値があれば、そのレコードへジャンプします。(但し、初期版はジャンプコマンドの
 不具合で正常にジャンプできない場合もあります。その場合は検索コマンドを使用し
 てください。SP2で直ってるか不明です(^^;)
 イベントを使用しないのであれば、同様な処理を割り付けたコマンドボタンを
 「実行コマンド:開始時」に設定してもいいでしょう。

ポイント7:後はお好み
 単にカード型フォームは閉じるだけでもいいですし、もし、カード型フォームでレコ
 ードを移動した場合などにも対処するのしたら、編集を終えて一覧表フォームへ戻る
 時にも同様な処理を行ってもいいかと思います。この辺は好き好きで如何様にも…

ポイント8:更に応用
 様々に応用してみて下さい。
 もし、リターンキーでも上記と同様な効果を得るには
 キーダウンイベントあたりで、「&仮想キーコード」を調べ[Enter]が押されたなばら
 ポイント5のボタンを実行する処理を書いてやれば、それでいいはずです。

(例えば…)
proc フォーム::キーダウン(長整数 &仮想キーコード,………)
if(&仮想キーコード=13) */ Enter:13 /*
method ハンドル=&hwindow,@フォーム.更新モード設定(0) */編集モードを表示へ/*
method ハンドル=&hwindow,@b編集へ.実行() */ハンドルは無くても可 /*
end

というような形です。

カードをモーダル(またはフォーム呼び出し)で開かず、ウインドウ作成コマンドで
一覧表フォームでもカード型フォームでも両方向で編集処理できるような仕様にも出来
ますので、その辺も徐々にお試しください。

>多分,解る方には単純なことだと思いますが、一括から抜けきれない自分には
>どうしても作れません。よろしくお願いします。

ご不明な点は遠慮なく。頑張ってくださいね。(^^)v

ps.試してないのでなにか忘れてる点があるかもしれません。(ご容赦)
2654 Re: いかすぱげてぃ 1999/9/11-13:12
記事番号2635へのコメント

> ベタベタの一括でやろうとすればできるのですが、ここの過去のBBSで
>「V8ではフォームとイベントだけで作っていくのがスジ」というお話を見て、
>そうだ!、その通りだ!、そりゃかっこいい!とますます深みにはまっています。

微妙なところですね。
確かにイベントは細かな制御も出来ますが、かといって万能ではありませんから…
実際、古典一括でなくては出来ないこともありますし…

ただ、ある程度大きなシステムだと「混在」は止めた方がいいかと思います。
というか、イベントでいくならイベントでいく。古典一括でいくなら古典一括でいく。
とくに、古典一括を起点にしておいて、フォームでイベントを使おうとする
とパニックに陥りますから。
(正しくはフォームからまた別のフォームを開くような場合。裏返せば、単にフォーカスの制御や
編集だけでそのフォーム内のみでイベントを使うのであれば全然問題無く、それが古典一括
での正しいイベントの使い方ともいえます)

もっとも、イベントオンリーで行こうとすると、これはこれで「どうやんだー。
イベントじゃ出来ないじゃん」という悩ましい問題も発生しますけど…(^^;
たははは、弱っちゃいますよね。

まぁ、ようするにどんな形でも自分のお仕事がキチンとできればいいわけで、
あまり「どっちのほうがいい」というスタンスでなくてもいいのではないかな?
って私は思っています。

もちろん、イベントも勉強しておく必要はあると思いますけど…(^^)
2658 Re: 隠伯人 浦島 1999/9/11-18:46
記事番号2654へのコメント
>まぁ、ようするにどんな形でも自分のお仕事がキチンとできればいいわけで、
>あまり「どっちのほうがいい」というスタンスでなくてもいいのではないかな?
>って私は思っています。

おっしゃる通りですね
出来る限り、簡明にと言う事で、とりあえず一括処理に重点をおいています。
古典一括なんて、言わないで下さいよ(^.^)
もうちょっと桐が練れてきてからイベントを使う事にしています。
勉強するのが・・・・・・・・・が実情ですけど

でわでわ
2659 Re: su 1999/9/11-21:11
記事番号2653へのコメント
こんばんは。
いつもこのHomePageは多大な勉強をさせてもらっています。
v8になったのでイベントを組もうと悪戦苦闘していますが、なかなか難しいですね。
今ひとつわからない部分が多いのが現実です。
そして、いかすぱげてぃさんのコメントも大変勉強になりました。
早く解説本でないかなあと首を長くして待っているところです。

そして、以下のように組んでみたらできましたのでご報告します。

フォームのキーダウンイベントに以下のように記述してください。
ただし、if(&focus="t氏名")の"t氏名"はリターンキーを押すオブジェクト名に書き換えてくださ
い。
また、同様に"住所録.wfm"もカード形式のフォーム名にしてください。

手続き定義開始 フォーム::キーダウン(長整数 &仮想キーコード,長整数 &スキャンコード,長整数
 &フラグ,参照 長整数 &処理中止)
if(&仮想キーコード=13)
変数宣言 文字列{&focus}
変数宣言 整数{&フォーム}
メソッド呼び出し @フォーム.フォーカスオブジェクト取得( &focus )

if(&focus="t氏名")
ウィンドウ作成 "住所録.wfm",ハンドル=&フォーム,編集表=する
end
end

手続き定義終了

それと、SP2なんだか変じゃありませんか。
v8では起きなかったイベント処理が内部エラーを起こしてしまいます。
詳細は後ほどあらためて報告します。
2672 ありがとうございました しどろ 1999/9/13-16:48
記事番号2635へのコメント
しどろです。
いかすぱげてぃさん、宮城さん、隠伯人 浦島さん、suさん
コメントありがとうございました。
まず、ボタンでカードフォームに移行する方法にしました。
これにも最初、つまづいたのですが対象表の多重化でをチェックし、
うまくいきました。
次は、いかすぱげてぃさんの書かれたリターンキーの方法を勉強してみます。
みなさん、ありがとうございました。

(ツリーが分かれていたので、自己レスにしました。良かったでしょか?)
2669 イベンドなしで制御可能? 太郎 1999/9/12-19:44
確かにイベントは細かな制御も出来ますが、かといって万能ではありませんから…
>実際、古典一括でなくては出来ないこともありますし…
>
>ただ、ある程度大きなシステムだと「混在」は止めた方がいいかと思います。
>というか、イベントでいくならイベントでいく。古典一括でいくなら古典一括で
>いく。とくに、古典一括を起点にしておいて、フォームでイベントを使おうとする
>とパニックに陥りますから。
>(正しくはフォームからまた別のフォームを開くような場合。裏返せば、単にフォ
>ーカスの制御や編集だけでそのフォーム内のみでイベントを使うのであれば全然問
>題無く、それが古典一括での正しいイベントの使い方ともいえます)
>
>もっとも、イベントオンリーで行こうとすると、これはこれで「どうやんだー。
>イベントじゃ出来ないじゃん」という悩ましい問題も発生しますけど…(^^;
>たははは、弱っちゃいますよね。

上の文は投稿にあった分です。
上の投稿をみて非常に興味がわきました。自分は桐8を今勉強中です。
自分としてはまさしく、ここに書いてある 「古典一括」 でやりたいんです。
桐8を勉強していいて、イベントを使用しないといけないと思ってたんですが
一括処理で可能なんでしょうか?
ここでいう所の「古典一括」の書き方をもう少し詳しく教えてください。
ここにはフォーカスの制御はできる という風に書いてありますが
一括処理からフォーカスを制御して入力を受け付けて、入力値を判定して
次のフォーカスへ移すという様なことが可能なんでしょうか?
是非よろしくおねがいします。
2671 Re: いかすぱげてぃ 1999/9/13-12:20
記事番号2669へのコメント
コメントツリーを分けますが、まず隠伯人浦島さんへ
こんにちわ。

>古典一括なんて、言わないで下さいよ(^.^)

(^^;(^^;(^^;

確かに「古典」一括とかいうと、なんだかもう過去の産物という感じが
しますよね。ごめんなさい。
ただ、この名称、そもそもK3が言い出したものでして…(^^;
うーん、まあ、なんというか、K3としてはたぶん、やはりもうcmdは
「古典」なのでしょう。
今後、郁々は一括処理という場合、それは「イベント」を差すものと
「したい」のだと思います。今後の桐の方向としてですね。
仮にV9、V10が出たとしても、一括については、イベントの
拡充に終始し、徐々にCMDは隅に追いやられていくのではないかと
私も正直、感じています。
ただ、現状で考えてみますと、「イベントでやるべき」といい切れない
のも現実でして…
まっ、その結果、少々意味深い形になってしまいますが、故に「古典」
一括という呼称を使ってしまったりします。(^^;

もし、お気にさったらごめんなさいです。m(__)m


次に、太郎さんこんにちわ。

>上の投稿をみて非常に興味がわきました。自分は桐8を今勉強中です。
>自分としてはまさしく、ここに書いてある 「古典一括」 でやりたいんです。
>桐8を勉強していいて、イベントを使用しないといけないと思ってたんですが
>一括処理で可能なんでしょうか?
>ここでいう所の「古典一括」の書き方をもう少し詳しく教えてください。
>ここにはフォーカスの制御はできる という風に書いてありますが
>一括処理からフォーカスを制御して入力を受け付けて、入力値を判定して
>次のフォーカスへ移すという様なことが可能なんでしょうか?
>是非よろしくおねがいします。

誤解をあたえる書き方をしてごめんなさい。
例えば、フォーカスの制御などは、古典一括…じゃない(^^;CMDでは
不可能…とまでは言い切れませんが、イベントでやる方が数段、簡単ですし効果的です。

前のレスを言いかえれば「CMDでやるとしても、単一フォームウインドウ内
の編集処理だけはイベントでするべき」と読み替えていただいても結構です。
ただし、それ以外の処理、例えばそのウインドウから別のウインドウを開いた
りするような場合には、イベントを使わずにCMDに制御を移して処理する
方がやりやすかったりします。

一番ドツボにはまってしまうのは、中途半端にCMDとKEV(イベント)を
混在させてシステムを作成する場合です。

一つ例をあげると、例えばあるフォームのボタンに設定したイベント処理で
別のフォーム(例えば商品マスタ)を開いたとします。
そのウインドウでの編集処理を終え、閉じて呼び出したフォームに戻りたい時、
イベントオンリーのシステムでしたらなんら問題ありません。単純そのものです。

ですが、CMDを起点にしているシステムですと、この辺も、かなり面倒に
なります。
どういう事かというと、ウインドウ会話を起点にして開いたフォームからイベントを
使用して別ウインドウを開いた場合、そのウインドウの「閉じる」は、
「一括処理に戻る」と意味が変わり、ようするに一括処理でそのウインドウを
閉じる処理を書いてやらないと閉じられなくなってしまうのです。
もちろん、それを読み切ってすべてCMDで処理してやれば、それはそれで
いいのですが…実際にはかなり面倒で、そこまでするなら、「イベントオンリー」
でやってしまうほうが手軽になってしまうのです。

もちろん、狂信的CMDマニアであれば、全部CMDですることも可能ですが、
でも、そこまでしてやるのがいいのか…(^^;
ごくシンプルに言ってしまえば、CMDでやる場合は

 ・イベントを使う場合  :単独ウインドウの編集処理に限る
             :ウインドウ処理はCMDで制御
 ・イベントを使わない場合:細かい制御はしない

というような目安やる方が結果として私は幸せだとおもいます。
少々長くなってしまったので、結論ですが、
太郎さんが、今後桐を使い続け、かつ、もし今、V8の勉強を改めてするのだと
したら、やはり「イベント」をお勧め致します。
(あくまで現時点の私の意見ですけど…)
2723 Re: 隠伯人 浦島 1999/9/19-12:18
記事番号2671へのコメント
>中略
>

考え方としてはアクセスナイズされていくと言う事でしょうか?
イベントで処理する・・・・・・WINDOWS風に処理する
マクロで足らん部分はVBAで書くとか
CMDで処理する・・・・・・・・・・・桐独自の環境で処理するてな、とこでしょうか
CMDがVBAに該当するのかな?
出来る限り同じ様な手順というか処理方法で統一されると良いのですが
同じ処理でも、ソフトによって表現が違う
こりぁ、もうユーザー無視の世界ですよね(-_-;)
日本人が開発したカタカナ言語も、ぼちぼち日本語にならなあかんと思います。
漢字なら、その姿を見るだけで内容が浮かび上がるけれど
カタカナ言語では出所を捜さなければいけません。

方向としては良いのかもしれませんね
誰が、楽しんでいるのでしょうか?
不明点を一杯つくれば参考書が売れる
難解にすればするほど補佐する人が必要になる
自然の原理なのでしょうか(ーー;)

戻る