過去の桐井戸端BBS (桐ver.8)
12290 フォームで特定の項目のみを更新禁止するには? 悲しげ 2001/07/14-18:10
フォームのテキストオブジェクト(ソースは項目値)で、あるテキストは更新可で、
別なあるテキストは更新不可のような設定って出来ましたっけ?

ただし、フォーカス設定は可能としたい。テキストソースを計算式にするとフォーカスが行かなくなってしまう。
表定義において、項目計算式が設定されているものは、期待する挙動が得られるが、
このためだけに計算項目を増設するつもりは無い。

場合によっては、更新不可なる個々のテキストにイベントを設定するとすれば
(実はそこまでやりたくも無いのですが)、最も簡単な記述は如何?
私が考えたのは、「入力前」と「入力後」で編集文字列を比較して、
違えば入力前の値に戻す。あ、「入力前」で更新不可の確認も出そうか?
でも、該当する全部のテキストに設定するのは・・・(^^;)。

類似の質問があったかもしれませんが、見つけられなかったので。
12291 Re:wfm 特定の項目のみ更新禁止には? bonito 2001/07/14-19:26
記事番号12290へのコメント
悲しげさん、こんにちは...。
既にお試しかも知れませんが...こんなのはどう?って事で (^^;

レイアウトに若干の(多大な?)制限と、そしてユニークな値を持つ表に限られますが

>あるテキストは更新可で、別なあるテキストは
>更新不可のような設定って出来ましたっけ?
>ただし、フォーカス設定は可能としたい。
(bonitoが勝手に文章を改竄しましたゴメンナサイ)

更新不可用のテキストを配置した多重化サブフォームを作りメインフォームに置きます。
同じレコードを表示するようにリンクを設定します。
(前に悲しげさんが発表したカードのグループ化も可)

そして
サブフォームの許可作業で「行挿入」と「行訂正」のチェックを外します。

ダメ...?

12292 Re:wfm 特定の項目のみ更新禁止には? 悲しげ 2001/07/14-21:08
記事番号12291へのコメント
どもっ、bonitoっつぁん

う〜ん、却下。(^^;)
言い忘れてましたが、どっちかっつーと、一覧表wfmでの使用を想定しているもんで。(あ、伝票でもいいですが)
12294 Re:wfm 特定の項目のみ更新禁止には? 森藤 2001/07/15-00:01
記事番号12290へのコメント
>フォームのテキストオブジェクト(ソースは項目値)で、あるテキストは
>更新可で、別なあるテキストは更新不可のような設定って出来ましたっけ?

悲しげさん、いつも活発な発言に感心しています。
ちょっとはずしているのかもしれませんが、
表定義で更新禁止では?
12296 Re:wfm 特定の項目のみ更新禁止には? Ogo 2001/07/15-01:13
記事番号12290へのコメント

>フォームのテキストオブジェクト(ソースは項目値)で、あるテキストは
>更新可で、別なあるテキストは更新不可のような設定って出来ましたっけ?

>ただし、フォーカス設定は可能としたい。テキストソースを計算式にする
>とフォーカスが行かなくなってしまう。

カット&ペーストができるようにという趣旨?

>場合によっては、更新不可なる個々のテキストにイベントを設定するとす
>れば(実はそこまでやりたくも無いのですが)、最も簡単な記述は如何?

- - -

手続き定義開始 Family数値更新禁止::フォーカス取得(文字列 &喪失オブジェクト名)
 メソッド呼び出し ハンドル=&hwindow,ソース値取得(&最大値,0)
 オブジェクト操作 ハンドル=&hwindow,&STR=&this.ソース
 代入 &STR=#文字置換(#文字置換(&STR,"[",""),"]","")
手続き定義終了

手続き定義開始 Family数値更新禁止::フォーカス喪失(文字列 &取得オブジェクト名)
 行訂正 &STR=&最大値
手続き定義終了

- - -

バリエーションはケースバイケースでね。



12299 Re:wfm 特定の項目のみ更新禁止には? hidetake 2001/07/15-06:46
記事番号12290へのコメント
どうせイベントを使わないといけないのなら、前の更新モード状態や、あるいは1度でも項目を変更確定してしまったら、
後の行の状態が変わるのもイヤな場合もあるでしょうから・・・
---------------------------------------------------------------------
手続き定義開始 編集項目::編集文字列変更()
  method 戻り値=&実行リターン,@編集項目.編集文字列取得(&選択ファイル名)
  cond ([編集項目]<>&STR) method 戻り値=&実行リターン,@編集項目.編集文字列設定([編集項目])
手続き定義終了
---------------------------------------------------------------------
なんて言うのは?(イベントも1ヶで済ませてしまう)


12301 Re:wfm 特定の項目のみ更新禁止には? hidetake 2001/07/15-07:32
記事番号12299へのコメント
>手続き定義開始 編集項目::編集文字列変更()

これはファミリーでは使えませんでしたね! (^_^;
適当なサブルーチン組んで call しても良いでしょうし?

あと、キーダウンで、必要な項目にフォーカスがあり、
更新モードが追加・訂正等の時は入力を処理中止する
方法もあると思いますが、この場合は Enter や Tab 、
それに Ctrl + なんとかの場合は処理を続行しなければならないなど、
条件を付けるのが少々面倒くさそう・・・


12302 Re:wfm 特定の項目のみ更新禁止には? hidetake 2001/07/15-07:48
記事番号12301へのコメント
>キーダウン

一番単純な例では次のようなもののあると思うけど
--> や <-- に Shift+矢印、それに Ctrl + C とか
Ctrl + V も通すようにしないとコピー&ペースト
等が全てマウス操作になり使いにくいですね!  (^_^ゞ

それに更新モード等は必要に応じて付け加える必要がありますけど・・・
--------------------------------------------------------------------
手続き定義開始 (フォーム::キーダウン(長整数 &仮想キーコード,長整数 &スキャンコード,長整数 &フラグ,参照 長整数 &処理中止)
  method @フォーム.フォーカスオブジェクト取得(&選択ファイル名)
  method @フォーム.更新モード取得(&選択件数)
  cond (&選択ファイル名="編集項目" .and &選択件数=2 .and .not(&仮想
キーコード=9 .or &仮想キーコード=13 .or &仮想キーコード=27)) &処理中止=1
手続き定義終了
--------------------------------------------------------------------


12304 Re:wfm 特定の項目のみ更新禁止には? 通行人 2001/07/15-09:39
記事番号12292へのコメント
こんにちは。
一番簡単な方法は、テキストの上に透明なコマンドボタンを配置することです。
テキストのフォーカス設定は禁止にしておいて、コマンドボタンの方は許可にしておきます。
あとはオブジェクトの配置順を調整すればよし。
このテクニックを使うと、行カーソルも作れますよ。(^^)
12308 Re:wfm 特定の項目のみ更新禁止には? 悲しげ 2001/07/15-11:38
記事番号12294へのコメント
どもっ、森藤さん

>いつも活発な発言に感心しています。
>表定義で更新禁止では?

「感心」されちゃうのも何だかなぁ、と云う気もしますが(^^;)、
それはさておき、
すいません、これも駄目です。
事前情報が不足でしたが、これは一覧表wfmとカードwfmを切り替えながら使うような形の使用でして、
例えば一覧表wfmでは幾つかの項目について更新禁止とし、カードwfmではその項目はフォーカス禁止にしたり
或いは更新許可(!)にしたりすると云う変な使い方をする予定だからです。
12309 Re:wfm 特定の項目のみ更新禁止には? 悲しげ 2001/07/15-11:40
記事番号12296へのコメント
さっすがぁ、Ogoさん
そうですそうです、個々のテキストについて設定するのは面倒と云うことで、ファミリーを使いたかったのです。
ちなみに当方で想定していた用途は、当該項目にかかる「検索」でした。
(ま、検索は他にフォーカスがあっても任意の項目を指定はできますけどね)
で、ファミリーだと、なるほど「フォーカス*」イベントですね。
--------------------------------------------------------------
手続き定義開始 Family数値更新禁止::フォーカス取得(文字列 &喪失オブジェクト名)
 メソッド呼び出し ハンドル=&hwindow,ソース値取得(&最大値,0)
 オブジェクト操作 ハンドル=&hwindow,&STR=&this.ソース
 代入 &STR=#文字置換(#文字置換(&STR,"[",""),"]","")
手続き定義終了

手続き定義開始 Family数値更新禁止::フォーカス喪失(文字列 &取得オブジェクト名)
 行訂正 &STR=&最大値
手続き定義終了
--------------------------------------------------------------
さっそく試してみました。
が、レレレのおっさんになってしまいました。
別稿のとおり、これは一覧表wfmでの使用が主なのですが、別なレコードの値が入ってしまうではあ〜りませんか!?
しばしの熟考の後、原因が判りました。
(1)あるレコードで、当該テキストにフォーカスインする(項目値を変数に取得する)。
(2)フォーカスオブジェクトを変更しないで、他のレコードに移動する(変数の値は上記(1)のレコードのもの)。
(3)その後、フォーカスアウトすると、何と(1)のレコードの値が入る!

と云う訳で、この方式については、レコード移動イベントと組合せて判断させる必要がありそうです。
で、その線で試そうかとも思いましたが、ファミリーのフォーカス系イベントの利用と云うことで、次のような方法が閃きました。
--------------------------------------------------------------------
手続き定義開始 ファミリ::フォーカス取得(文字列 &喪失オブジェクト名)
 method @フォーム.更新モード設定(0)
 オブジェクト操作 @フォーム.行訂正="0"
手続き定義終了

手続き定義開始 ファミリ::フォーカス喪失(文字列 &取得オブジェクト名)
 オブジェクト操作 @フォーム.行訂正="1"
手続き定義終了
--------------------------------------------------------------------
コピペには使えませんが、一応はこれでバッチリです。(^^)v
12310 Re:wfm 特定の項目のみ更新禁止には? 悲しげ 2001/07/15-11:41
記事番号12302へのコメント
どもっ、hidetakeさん、
今回は一応「ファミリ」を使う線で行きたいと思います。
12311 Re:wfm 特定の項目のみ更新禁止には? 悲しげ 2001/07/15-11:44
記事番号12304へのコメント
通な通行人さん、コメントをどうも。

>一番簡単なの方法は、テキストの上に透明なコマンドボタンを配置することです。
>テキストのフォーカス設定は禁止にしておいて、コマンドボタンの方は許可にして
>おきます。あとはオブジェクトの配置順を調整すればよし。
>このテクニックを使うと、行カーソルも作れますよ。(^^)

これだと、特にイベントを設定する必要もなさそうですね。
ただ、若干試してみたのですが、どうもうまく行かない。
[Enter]で移動する際に、当該コマンド牡丹で引っ掛かってしまうこともありますが、
一番判らないことは、矢印またはタブで移動している時でも牡丹にフォーカスが行った際に、
何だか背景が反転表示されないようなのでフォーカスの所在が不明になることです。
この時、反転表示させる方法ってありませんでしたっけ?
12312 Re:wfm 特定の項目のみ更新禁止には? 通行人 2001/07/15-13:11
記事番号12311へのコメント
>[Enter]で移動する際に、当該コマンド牡丹で引っ掛かってしまうこともありますが、

確かに、この点は救えないですね。


>この時、反転表示させる方法ってありませんでしたっけ?

私なら、フォーム明細部セクションの[処理対象行文字色]と[処理対象行背景色]を設定しておき、
ボタンにフォーカスが移動したタイミングで、背景のテキストオブジェクトの背景モードと
前景モードを継承に、喪失時に任意の色にするイベントを書きます。
フォーム明細部に余白を設けていないのなら、このやり方がもっとも簡単です。
フォーカスの取得と喪失だからこれならファミリも使えますし、2行書くだけで済みますでしょ。
12313 Re:wfm 特定の項目のみ更新禁止には? 【多遊】 2001/07/15-13:24
記事番号12312へのコメント
>>この時、反転表示させる方法ってありませんでしたっけ?
>
>私なら、フォーム明細部セクションの[処理対象行文字色]と[処理対象行背景色]を設定してお
>き、ボタンにフォーカスが移動したタイミングで、背景のテキストオブジェクトの背景モードと
>前景モードを継承に、喪失時に任意の色にするイベントを書きます。フォーム明細部に余白を設
>けていないのなら、このやり方がもっとも簡単です。フォーカスの取得と喪失だからこれならフ
>ァミリも使えますし、2行書くだけで済みますでしょ。

私の場合、一覧表形式フォームで、テキストはフォーカス禁止でその上にボタンを置く
インデックスとして利用するケースを多用しています。

設定は、セクションオブジェクト・セクションタブの処理対象行の反転を利用しています
もちろん、ボタンは透明です。
イベントは不要です。
12314 Re^2:wfm 特定の項目のみ更新禁止には? 通行人 2001/07/15-13:28
記事番号12312へのコメント
>>[Enter]で移動する際に、当該コマンド牡丹で引っ掛かってしまうこともありますが、
>
>確かに、この点は救えないですね。

失礼。コマンドボタンの機能に[フォーカス移動]を設定すれば[Enter]でも反応します。
この調子なら、入力時にフォーカスを禁止するのも簡単だと思う。
12315 Re^2:wfm 特定の項目のみ更新禁止には? 悲しげ 2001/07/15-15:05
記事番号12314へのコメント
どもっ、通行人さん
なるほど、コマンド牡丹の機能[フォーカス移動]を設定すればOKですね。
ただし、反転表示に関しては、どうせファミリの「フォーカス*」イベントを使うんだったら、
牡丹を経由しないNo12309の方を採用したいな。(^^;)
12316 Re:wfm 特定の項目のみ更新禁止には? 悲しげ 2001/07/15-15:07
記事番号12313へのコメント
どもっ、【多遊】さん

>設定は、セクションオブジェクト・セクションタブの処理対象行の反転を利用しています
>もちろん、ボタンは透明です。イベントは不要です。

さっそく試してみましたが、どうもうまく行かない。
できればここんとこもう少し詳しく教えて下さい。
それとも、【多遊】さんのHPで解説されてましたっけ?(とすれば何番?)

一応私がやってみたこと(うまく行かない)を挙げておきます。

▼明細部セクション自体のの背景を指定色・白にしました。
▼そして「セクション」タブでは、処理対象行文字色、処理対象行背景色とも「反転色」としました。
▼その上に載せる、各テキスト・コマンド牡丹とも背景色は透明。

これで動かしてみると、確かに処理対象行全体が反転色になってくれるのですが、
牡丹を重ねた項目の文字は常に見えず、またそれ以外の項目でもフォーカスが当たっている項目以外は文字が見えません(真っ黒け)。
これは上記設定で処理対象行文字色だけを「設定しない」にしても同じことでした。
実は、私のところにも、透明牡丹を重ねて反転が綺麗に行っている例がひとつあるんですよ(某師匠の作で)。
ところがこれを見てもどこが違ふのかが判らない(師匠自身も覚えていないと云ふし)。
12318 Re:wfm 特定の項目のみ更新禁止には? 【多遊】 2001/07/15-15:26
記事番号12316へのコメント
悲しげさんこんにちは>

どこかに原因があればいいのですが。気づいたままに
1.セクションタブを表示して右上の?で、処理対象行を参照下さい
  ノートのところ。背景色モードは<継承>

2.テキストは背景も<継承>にしています。

3.横一列に反転・・・
私の場合インデックスに使用していますので、1〜2項目だけで十分です。
したがって不要なところは反転しないようにしています
方法は、明細・罫線タブで縦の左右の罫線幅を600とか設定しています。
罫線の上にもオブジェクトの配置はできます

すみません。これくらいしか思いつきませんが。

12320 Re:wfm 特定の項目のみ更新禁止には? 悲しげ 2001/07/15-16:37
記事番号12318へのコメント
どもっ、【多遊】さん
原因のひとつは、白地に黒字のところに反転して黒地に黒字だから
真っ黒で見えなかったと云うこともありました。(^^;)
そこで、文字色を黒字以外(例えば灰色)にしておいてから、
仰せのとおりの設定(つまりテキストの背景色モードを<継承>)でやってみました。
何とか見れないことは無い程度にはなりましたが、でもやはりまだ変なような……
特にボタンを被せたテキストはかなり見にくく……、
と云う訳で、もう少し試みてはみますが、一応報告。
12325 Re^*:wfm 特定の項目のみ更新禁止には? 通行人 2001/07/15-22:57
記事番号12316へのコメント
>▼明細部セクション自体のの背景を指定色・白にしました。
>▼そして「セクション」タブでは、処理対象行文字色、処理対象行背景
>色とも「反転色」としました。
>▼その上に載せる、各テキスト・コマンド牡丹とも背景色は透明。

基本的に明細セクションの反転色属性に反応させるためには、
前面に配置するオブジェクトの背景モードと文字色モード(=前景モード)を継承にします。

ただ、イベントを使うんだったらこの際、あまり気にしなくてよくて、
ボタンにフォーカスがいったときの前景色と背景色を変更すればいいという感じです。
12326 Re^2:wfm 特定の項目のみ更新禁止には? 通行人 2001/07/15-23:05
記事番号12315へのコメント
>なるほど、コマンド牡丹の機能[フォーカス移動]を設定すればOKですね。
>ただし、反転表示に関しては、どうせファミリの「フォーカス*」イベント
>を使うんだったら、牡丹を経由しないNo12309の方を採用したいな。(^^;)

でも、表の編集モードをフォーカス取得&喪失単位で操作するのは、
とっても嫌らしいことが多いですよ。
経験的にボタンを手前に配置しておくのが一番楽。
入力時の制御も軽くて済むと思う。

ま、Windowsのプロパティシートらしいといえばらしいけど(笑)、
ぼこんぼこんいう感じの動きになるから、個人的には好かんです。

戻る