過去の桐井戸端BBS (桐ver.9)
26251 フォームで「更新モード」を維持して表示モードへ復帰できないようにしたい キリキリ舞 2004/05/11-10:59
はじめて投稿させていただきます。
10年ぶりに一括処理(とイベント)をいじっています。
が!WIN版はやりたいことは必ずできそうですが,どうしていいのだか...
初歩的な質問とは思いますが,お相手願います。

*WIN桐9−2004を使用しています。
*一括処理またはイベントで記述するコードを以下「コード」と呼ばせていただきます。

伝票入力のフォームを作成しています。仕様は次の通りです。
(1)フォームは単純な「ヘッダ」「明細」「フッタ」です。
(2)「ヘッダ」,「フッタ」にはテキストオブジェクトが配置されていて編集を行います。(変数に代入してコードで処理します)
(3)「明細」は通常通り表の項目値を直接処理します。
(4)編集のできない「閲覧状態」と編集できる「訂正状態」を設けます。
この両者はユーザの意図的な操作(cmdボタンorキーイベント)で変更します。

ここから質問です。
 上記(4)について,編集の抑止と許可はオブジェクト操作で実現,「訂正状態」へ移行はメソッド呼び出しで実現できましたが,
「訂正状態」の時にはユーザが終了操作をするまでずっと「更新モード」状態を維持する(「表示モード」への復帰を抑止)することは
できるのでしょうか?
 特に明細の終端行にカーソルが行くと「表示モード」になってしまうので,これを抑止したいです。

 まだまだお伺いしたいことがありますので,よろしくお願いいたします
26255 Re:「更新モード」を維持したいのですが 宮城 2004/05/11-15:12
記事番号26251へのコメント
キリキリ舞さん、こんにちは。

> 特に明細の終端行にカーソルが行くと「表示モード」になってしまうので,こ
> れを抑止したいです。

いきなり質問で申し訳ないのですが、ここでどうしたいのでしょう?

これって、「更新モードが終わって、表示モードに戻った」という状況だと思うのですが。
「終わる」のを抑止するのはいささか無理があるような。

考えられるのは次のいずれか?

1.元気よく行追加してしまう。
2.その行のままカーソルを強引にどこか前の項目に戻す。

私なら、(表のあるフォームだとして)「閲覧状態」なら表を「参照」で開かせる。
「訂正状態」なら「更新」で開いて、表示モードに戻っちゃったら更新モードに戻すボタンをつけておく程度にすると思います。

26256 Re:「更新モード」を維持したいのですが ONnoji 2004/05/11-15:30
記事番号26251へのコメント
キリキリ舞さん、こんにちは。

以下のように、フォームの[レコード移動]イベントを試したらいかがでしょうか?
外していたら、すいません。

*-------------------------------------------*
手続き定義開始 フォーム::レコード移動(長整数 …省略… &明細番号)
 if ( #eof )
  ジャンプ 行番号 = 最終
 end
手続き定義終了
*-------------------------------------------*

26257 Re:「更新モード」を維持したいのですが ONnoji 2004/05/11-15:43
記事番号26256へのコメント
> 特に明細の終端行にカーソルが行くと「表示モード」になってしまうので,こ
> れを抑止したいです。

キリキリ舞さん、こんにちは。

以下のように、フォームの[レコード移動]イベントを試したらいかがでしょうか?
行挿入も禁止したければ、

[フォーム]属性の[編集対象表]タブの[許可作業]ボタンを実行して、
□行挿入 のチェック印を消したらいかがでしょうか?

他にもいろいろな操作を禁止できますよ。

もしも、コマンドで行うのなら

*---------------------------*

オブジェクト操作 @フォーム.行挿入 = "0"

*---------------------------*

※掲示板では半角カナは全角カナに変換されます。
※@フォームは半角カナですのでご注意ください。

外していたらすいません。
26259 Re:「更新モード」を維持したいのですが キリキリ舞 2004/05/11-16:32
記事番号26255へのコメント
早速のレス,ありがとうございます。

>いきなり質問で申し訳ないのですが、ここでどうしたいのでしょう?

で,目的なのですが,次のような事がしたいのです。(うまく説明できているかどうか..)

・データの訂正時にはユーザが「意識」して「訂正モード」に「移行」するために,ボタン又は
キー操作(ファンクションキー)を扱うことで更新を許可するようにコードで実現しました。(これはできました)
・したがって,「訂正モード」から抜ける(即ち更新を禁止して表示モードに戻る)ときも
ユーザが「意識」した操作によって行うようにコードで実現しました。(これもできました)
・ただ,終端行の時は,勝手に「表示モード」戻ってしまうので困ったわけです。
・また,「訂正モード中」は常に入力できる状態にしたいため,「表示モード」に戻ってしまうと
入力のたびに「訂正」(例えばA−f・2キー)を操作する必要が生じるので,避けたいのです。

こんな勝手な目的なのですが...お分かり頂けたでしょうか?
26260 Re:「更新モード」を維持したいのですが キリキリ舞 2004/05/11-16:44
記事番号26256へのコメント
早速のレスありがとうございます。

ご教示の通り,レコード移動イベントの中で,強制的に最終行へジャンプさせることで
目的は達成できました。ありがとうございます。

で,レコード移動のイベントはフォームにあったんですね。当方はPCを”マイコン”と
呼んでいた世代なのですがオンラインマニュアルに弱くて駄目ですねえ。
これからはもう少しよく探します。

ありがとうございました。

で,全く明細のないデータの時(新規にデータを入力するときなど)はどうなるのだろう?
ダミーのレコードが必要かなぁ?
早速検証してみます。


26270 Re:「更新モード」を維持したいのですが しぼうかん 2004/05/11-21:49
記事番号26260へのコメント
キリキリ舞さん、こんばんは.

「閲覧」と「訂正」ボタン以外に「新規入力」ボタンを作って入力させるのが一番簡単じゃないでしょうか?

26273 更新モード維持の目的は 佐田 守弘 2004/05/11-23:52
記事番号26251へのコメント
キリキリ舞さん
始めに無理やり更新モードを維持する方法について述べます。
ONnojiさんが#26256で書かれている方法、つまり終端行に移動したら
1つ前の最終行にジャンプさせる方法は1つの方法ではありますが、
多分、御本人が#26260で書いている通り、入力レコードが1つもない
表の場合には不都合が起きるかと思います。
私が似た様な方法で考えてみたのは、終端行に移動したら、行追加を行って、
その行での入力を継続する方法ですが、これも似た様なものだと思います。
Enterキーを押し続けられたら、不要な空白行が無数に入力されてしまいますから。
この2つの折衷で、最終行にジャンプした結果、そこが終端行であった場合には、
行追加を行うといった当たりが妥当かも知れません。

●何のための更新モードの維持でしょうか
本論はこちらです。
桐は元来、表示モードがデフォルト状態であり、必要に応じて、行訂正
行追加などの編集モード(私の造語)に入ります。
つまり、常に行訂正などのモードを維持する事は、不自然ではないかと思います。
実の所、表示モード以外のモードでは、カーソルキーは、文字列間の移動操作になり、
セル間の移動操作になりません。
また編集モードでは、誤ったキー操作でデータが書き換えられてしまうおそれもあります。

そこで、なぜ更新モードの維持(編集を行うモード状態の継続)をする必要があるかです。
もしこのあたりの目的が解れば、別の観点からのコメントができるのではないかと思います。

私の1つの推定として、エクセルは常に入力ができるモードだから、
これに合わせたいという様な目的がありそうにも見えます。
仮にそうであるとの仮定で、以下の話を進めます。

エクセルの通常の状態は、桐で言えば、表示モードとほぼ同じモードです。
F2キーを押すと、桐の項目訂正モードと同じモードに入ります。
そして違うのは、セル間を自由に動ける表示モードで何か文字を入力すると
自動的に訂正モードに入る点です。しかも、この際に自動的に以前のデータ
がクリアされます。そして入力中にEnterキーを押すか、カーソルキーを操作すると、
入力を終えて再び表示モードに戻ります。

もしこの様なモードを望んでいるなら、試してはおりませんが、
キーダウンイベントを使って類似の操作性が作れるのではないかと思います。
つまりキーダウンイベントでまず現在のモードをチェックします。
表示モードの時には、「メソッド呼び出し 更新モード設定」コマンドを使って、
項目訂正モードに切り替えます。
最初に打ったキーがキーダウンイベントで拾われるので、データの入力の方に
反映されるかどうかの確認がしておりませんが、うまく行けば、
エクセルと似た操作性になる様な気がします。試してみて下さい。

佐田守弘(KS-00119)
26276 Re:更新モード維持の目的は キリキリ舞改めABZ研究所 2004/05/12-09:24
記事番号26273へのコメント
ハンドル名は同じような方がいらっしゃったので変更します。

アドバイスありがとうございます。
みなさんより,「なんで更新モードを維持したいのか」と数多くレスがあります。
これについて,私自身の(勝手な)ニーズを書いてみました。

理由1
現在,当方でDOSベース(それもPC−9800)の業務ソフト(在庫管理ソフト)を使用しています。
(私自身が15年くらい前に作成したもの・・・それもN88BASIC+機械語)今回,これをWin化しなければならなくなりました。
この現在使用中のソフト自体が「表示モード」と「訂正モード」に分かれており,
「訂正モード」では,連続して値の編集が可能であるユーザインターフェースとしています。
そのためこの辺りの操作性を継承したい目的があります。

*なぜWin化に「桐」なのか・・・
VBやACCESSが今風?なのかもしれませんが,これまで10数年に亘り蓄積されたDOSのテキストベースのデータが大量にあり,
これを新システムに移行しなければなりません。
その時,データ変換やリレーションを行うために慣れないACCESSでいちいちクエリーを作成したりするより,
直感的に作業できる「桐」が私として効率的だったからです。
ただ,VBから桐ファイルにアクセスできるのであれば,状況は違ったかもしれませんが・・

理由2
単なる趣味の問題かもしれませんが,「更新モード」が自動的に「表示モード」に復帰することは,
オペレータが「よし」と思っていないのに入力データが勝手に「確定」してしまったと印象を受けるようです。
間違っていれば,再度「更新モード」に戻して訂正すればいいと思いますが,
大量のデータを入力しているオペレータにとって,作業が流れているときに違った操作をさせるのは
作業効率の低下やミスを助長させると思います。
そのため,データ入力中は「更新モード」を維持してフリーカーソル的な操作性とし,
業務として区切りが得られた時点(例えば1枚の伝票入力が終わった時など)に
[確定]する操作形態としたいと思っています。

理由3
私自身,桐はVer2から世話になっており,通常の会話処理による操作については
特に違和感なく使用しております。慣れた人間にとっては問題視するようなことではないかもしれません。
例えば「更新モード」でも[SHIFT]+矢印キーでフリーカーソル的に項目の移動はできます。
だから,”「表示モード」の時は矢印キーで移動,「更新モード」の時は「SHIFT」も押して矢印キーを押すのだ”
としてもいいですが,モードが意図せず変化するとオペレータが混乱するのではと思いました。

長々と書きましたが,こんな目的です。

ただ,まだまだマスクしなければならない機能(例えば「更新モード」中の[ESC]キーなど)がありそうで,
佐田様がおっしゃるとおり,考え方の変更も必要かもしれません。
今,「表示モード」中に[ENTER]を押すことで,カーソルのある項目のみ「更新モード」に移行し,
再度[ENTER]で「表示モード」に復帰と言うのはどうかと検討しています。

実は,Win桐の使用にあたって解説本を探したのですがどれも絶版などで見つからず,
持っていたDOS桐の一括処理関係の本も処分していたため,あきらめていたところ佐田様のHPを見つけ,
わかりやすい解説があり「これならいける!」と思い,使用することにしました。
これからも,初歩的な質問ばかりかもしれませんがよろしくお願いいたします。
26278 ジャンプ 行番号 = 最終 ONnoji 2004/05/12-10:31
記事番号26260へのコメント
ABZ研究所さん、こんにちは。

>で,全く明細のないデータの時(新規にデータを入力するときなど)はどうなるのだろう?
>ダミーのレコードが必要かなぁ?
>早速検証してみます。

グループ項目のないフォームならば

if ( #eof)
 ジャンプ 行番号 = 最終
end

でも問題ないようですね。
ちょっと怖いですが、こんな書き方でも無限ループにはなりませんね。
※トレース出力ウィンドウで確かめられますよ。

しかし、厳密にするのなら、

if ( #eof .and #総件数 )
 ジャンプ 行番号 = 最終
end

というのがいいような気がします。

いずれにしてもフォームのプロパティで[行挿入]の許可はしないようにすると良いと思います。

また、グループ項目のあるフォームでは
新しいグループを追加して、行を登録した時に

KD1367:絞り込み状態または行集計状態では実行できません

というエラーになることがあります。

if ( #eof .and #総件数 .and .not #グループ選択状態 )
 ジャンプ 行番号 = 最終
end

これもフォームのプロパティで[行挿入]の許可はしないようにすると、
グループ追加自体が出来なくなりますので、そのほうが良いと思います。


>で,レコード移動のイベントはフォームにあったんですね。当方はPCを”マイコン”と
>呼んでいた世代なのですがオンラインマニュアルに弱くて駄目ですねえ。

イベントの種類に関しては、アクセスとそれほど違いはありませんよ。
もちろん桐独特のイベントもありますし、桐にないイベントもあります。
しかし、これは違うソフトどうしを比べても意味がありませんから仕方ないですね。

今はパソコンといいますから、マイコンという言葉は懐かしいですね。

Windows のデスクトップにもマイコンピュータというのがありますね。
最近これをしみじみ見つめて「お!、マイコンだぁ〜」と思ったりしました。(^^ゞ

>単なる趣味の問題かもしれませんが,「更新モード」が自動的に「表示モード」に復
>帰することは,オペレータが「よし」と思っていないのに入力データが勝手に「確
>定」してしまったと印象を受けるようです。

[フォーム]の属性の[編集]タブの[訂正モード]チェックボックスに
チェック印を付けて置くと、項目訂正にならずに訂正になるので便利ですよ。

26284 Re:更新モード維持の目的は 尾形 2004/05/13-09:25
記事番号26276へのコメント
解決済みのようですが、もし参考になれば。

>そのためこの辺りの操作性を継承したい目的があります。
自分も以前はこう思って、「更新モード」「表示モード」
を意識させないように作ってました

だが、どうしても
・想定外な操作
・マウス操作
・桐特有の便利な機能を利用する時
・イベントである処理をする
等々でどうしても表示モードになってしまうときがあります
このような時に、異常に入力担当者が混乱するのです

なので最初から「表示モード」「更新モード」を入力者に
意識させた方が後々楽でしたスペースキーを一度押すだけですから

26342 皆様,ありがとうございました キリキリ舞改めABZ研究所 2004/05/17-12:11
記事番号26251へのコメント
皆様,アドバイスありがとうございました。

元々,「データの閲覧状態」と「データの修正状態」を区別したかったのは
ユーザインターフェースを明確化したいためで,その具体的な手法として「更新モード」の固定化を目指していました。
これについて,皆様には色々な方法をご教示していただきましたが,「更新モードの固定」は
皆様の総合的な意見として「桐」自体がそのような使い方がスタンダードではなく,
ナンセンスなのではといったアドバイスを頂いた印象を受けました。
そこで,「ユーザインターフェースの明確化」であれば,「桐」本来の使い方に準じ,
「表示モード」を基本として一時的に「更新モード」へ移行することとし,
  ・「更新モード」が維持されないようにする(1項目のデータの入力が終了する毎
   に「表示モード」に戻るようにする)
  ・連続的にデータを入力することを考慮して,「更新モード」への移行はユーザが
   ストレスを感じない操作方法を検討する
  ・「更新モード」時に画面の色を変化させるなどを行い,状態をわかりやすくする
などにより,明確化が図れるのではないかと考えました。

こんな方向性で検討を進めたいと思います。
で,すでに困ったことが生じていますので別質問でまた,皆様のお知恵を拝借しようと思っています。

ありがとうございました。

戻る