過去の桐井戸端BBS (桐ver.8)
10280 一覧表フォームで、最後のレコードが処理対象行になりつつ前のレコードが見えるように、スクロールバーを制御したい みすず 2001/03/14-16:49
一覧表フォームでのスクロールバーを制御することはできますでしょうか?
具体的には一覧表の最後のレコードが処理対象行になりつつ、前のレコードが見えるという感じです。

ジャンプ 行番号=最終

とすると、最終行が一番頭に表示されて、それ以下は空白になってしまい、スクロールバーを動かさないと前のレコードが見ることができません。
10281 最終行にジャンプしその前の行を表示 佐田 守弘 2001/03/14-17:53
記事番号10280へのコメント
みすずさん
確かこの話題は以前に出た事があり、コメントを書いた憶えがあります。
おそらく、過去ログのどこか(CD本に収録されているはず)にあるかと思います。

結論ですが、質問の方法はできないと思います。
ただし、最終行にジャンプした後、何行か適当な行数だけ前の方にジャンプし、更にもう一度同じ行数後ろにジャンプする方法で、目的が達成されると思います。

何行が良いかはフォームの形によって変わりますから、御自身のフォームで調整してみて下さい。
概ね、表示されている行数以内でよいと思います。

佐田守弘(KS-00119)
10284 Re:最終行にジャンプしその前の行を表示 みすず 2001/03/14-18:34
記事番号10281へのコメント

>結論ですが、質問の方法はできないと思います。
>ただし、最終行にジャンプした後、何行か適当な行数だけ前の方にジャンプし、更
>にもう一度同じ行数後ろにジャンプする方法で、目的が達成されると思います。

なるほど。
   ジャンプ 行数=最終
   ジャンプ 行数=-20
を実行したら見事おもいどうりになりました。目からウロコです。
ありがとうございます。

10290 Re:スクロールバーの制御 悲しげ 2001/03/14-19:13
記事番号10280へのコメント
どもっ、みすずさん
これはスクスールバーの設定と云うよりは、sp6で新しく登場した「明細番号取得」と「明細番号設定」のメソッドを使うのではないでしょうか?
(htmlに後者の記載例があります)
とは云いつつ、私はこれも未だ使ったことありませんで、全然的外れかもしれませんけど、もしうまく行ったら教えて下さい。(^^;)
10300 明細番号メソッド みすず 2001/03/15-08:56
記事番号10290へのコメント
  ジャンプ 行番号=最終
  メソッド呼び出し @フォーム.明細番号設定(20)

など試しにいろいろやってみましたがダメでした。
メソッドを呼び出しても何も起こりませんでした。
明細番号メソッドって何のための物なんだろうか・・?
10301 過去ログ 尾形 2001/03/15-10:10
記事番号10300へのコメント
みすずさん、みんにちは
以前に私もここでお聞きしました
過去ログの
http://www.fuku3.com/~habata/kbbs/kakov8/07897.htm
10319 「明細番号設定」メソッドに初挑戦(^^)v 悲しげ 2001/03/15-19:21
記事番号10300へのコメント
手持ちの3000行超くらいのデータに一覧表wfm(明細部繰り返し数20)をこさえて試してみました。
最終行ジャンプ指定時には、どうしても画面真ん中行にしか表示されないので(?)、中途の100行目辺りを指定する処理で試してみたところ、
-------------(1)---------------
ジャンプ 行番号=100
----------------------------------
だけの記述だと、100行目は画面上の1行目にしか表示されません。
ただし、例えば最終行に飛んだ後に改めてこのジャンプ指定を行うと今度は100行目は画面真ん中に表示されます。

次、htmlヘルプの記載例に準じて次のような記述をして試しますと
-------------(1)---------------
* 変数宣言 長整数{ &明細番号 }
 メソッド呼び出し @フォーム.描画禁止( 1 )
* &明細番号=10
 ジャンプ 行番号=100
* メソッド呼び出し @フォーム.明細番号設定( &明細番号 )
 メソッド呼び出し @フォーム.明細番号設定(10)
 /*wfmの明細部繰り返し数を20とし、その半分を中心と見たてた*/
 メソッド呼び出し @フォーム.描画禁止( 0 )
----------------------------------
この時は、100行目は常に画面真ん中(この場合画面10行目)に表示されるようになります。
「描画禁止」methodとの組み合わせが味噌なのかな〜?

※今回使いはしませんでしたが、「明細番号取得」methodは、当該処理実施直前の画面上の行位置を取得しておくためのものと推測されます。
処理終了後、画面上のカレント行がずれないようにするため。

10347 フォーム開始時に最終行ジャンプ 悲しげ 2001/03/17-11:53
記事番号10319へのコメント
みすずさん、見てる〜?

懸案となっている挙動は「フォーム開始」時のことだったんですね。
これまた気づくのが蛍光燈ですいません。
若干の実験で挙動を整理分類してみました。

「フォーム開始」イベントで記述する場合
方法0)細工なし(画面の2行目以降が空となる)
 ジャンプ 行番号=最終
方法1)ジャンプ2回方式(by佐田)こうすると画面全体に表示されるが、
    但しレコードポインタは最終行では無い。
 ジャンプ 行番号=最終
 ジャンプ 行番号=-9 /*明細部行数は20の例*/
方法2)コマンド牡丹経由(byきりぎりす)
    牡丹「b最終行」の「マウス左クリック」イベントで
    「ジャンプ 行番号=最終」を記述するか、あるいは
    牡丹の機能としてのそれでも結果は同じはず。
 method @b最終行.実行()
    または「フォーム開始」イベントではなく、フォーム属性/
    オプション/実行コマンド開始時の指定でも同様のはず。
    いずれもレコードポインタは最終行である。
方法3)明細番号メソッド利用(無意味)
    無意味なら書くなってば。(^^;)
 method @フォーム.描画禁止(1)
 ジャンプ 行番号=最終
 method @フォーム.明細番号設定(11) /*明細部行数は20の例*/
 method @フォーム.描画禁止(0)


要するにこれら(特に上記0と3)は「フォーム開始」イベント時の特殊性に起因すると想像されますから、
こう云う時の逃げ方として、例によって「タイマーn」イベント(つまりは「フォーム開始」イベントの次の時点)の流用が考えられます。

手続き定義開始 フォーム::タイマー1()
 オブジェクト操作 @フォーム.タイマー1="0"
  /*タイマー値1は「0.1」としてある*/
* ジャンプ 行番号=最終  /*これだけではペケだった(^^;)*/
 method @フォーム.描画禁止(1)
 ジャンプ 行番号=最終
* method @フォーム.明細番号設定(19) /*(a)*/
 method @フォーム.明細番号設定(11)  /*(b)*/
 method @フォーム.描画禁止(0)
手続き定義終了

いずれも明細部繰り返し行数は20の例ですが、上記(a)(b)の違いなどで表示位置の細かい設定も可能なようではあります。

以上、お好みのパターンを御利用下さい。
10350 透明フォーム 悲しげ 2001/03/17-13:34
記事番号10347へのコメント
少し話題がずれるような気がしますが、「フォーム開始」時のイベント関連と考えると連続するとみなすこともできますので、このツリーのまま続けます。
#10347の最後の方法(「タイマー」イベント利用)では、フォームをオープンした刹那に、まずデータが一寸表示されてから最終行表示に画面が切り替わります。
瞬時とは云え、この画面の変化が許せないかもしれないとしたらどうだろうか?
と云うことで、若干試そうとしていたら、面白い挙動を見つけちゃいました。

「タイマーn」イベントに記述してあった

  method @フォーム.描画禁止(1)

これを「フォーム開始」イベントに移動したら、最初のチラリ表示がなくなるのではないかと考えた訳ですね。
で、実際にそのように試してみたら、何と透明フォームが現れました。(゜O゜)
いえ、ただそれだけのことです。その後どうなるのか、試してみたい方はどうぞ。
でも、フォームが壊れてもしりませんよ。(^^;)
10356 CMDでは中央に表示されます 今村 誠 2001/03/17-21:05
記事番号10347へのコメント
こんにちは、悲しげさんが詳しく解説していらっしゃるのですがよく分からないところがあるので教えてください。
一覧表WFMと一つの表でメイン&サブフォームでCMDからの一括でテストしました
フォーム開始ボタンとフォーム開始イベントに明細番号設定を試しましたが変化はありません。(悲しげさんご指摘の通りです)
タイマー1イベントを0.1に設定した場合フォーム開始では意図した通りの明細番号に設定できました。
がレコードを移動しても0.1秒後にやはり最終行に移動します。
フォーム開始では、みすずさんご指摘のように意味がないような気がします。
WFMと表の移動の都度最終行に移動するのは健康に良くないので設定はしません。

桐野港さんも書いていらっしゃる疑似行挿入で試してみました。
私の画面伝票フォームでは、明細番号設定コマンドを使用したら意図した通りの場所に行挿入できました。
明細が画面行数を超えたときに意味がでてくるみたいです。(是非設定するべきです)
画面行数以下の場合は明細設定があってもなくても同じ挙動をするみたいです。

またみすずさんご指摘のジャンプ=最終行で1行だけしか表示しないが再現できません。
私のフォームでも悲しげさんのと一緒で、22行表示一覧表では必ず11行目に最終行が表示されるので、困ったことはないのですが、
すっきりしないので投稿しました。
どんなときに、先頭行に表示されるのでしょうか。

モーダルフォームで表を多重化(あるいは全く別の表でも良いと思います)してオープンした場合に表の操作で索引の設定と検索を設定しています。
こうすると最初のフォームから次のフォームに編集対象行の引継が出来ます。
そして「きりぎりすさん」お薦めのフォーム開始実行ボタンを使用しました。
悲しげさんの方法の2です。
「明細設定」なるコマンドボタンをワークスペースにおいて24行ある明細の15行目に表示するように設定すると
見事にそこ(15行目)が編集対象行になってフォームで編集できます。

明細設定のコマンドボタンの 機能は 手続き実行 パラメータは ”明細設定”
手続き定義開始 明細設定()
 メソッド呼び出し @フォーム.描画禁止( 1 )
代入 &秒=15 /* ここを替えると行の位置が変わる。直接数字でも良いと思います*/
メソッド呼び出し ハンドル= &hwindow,戻り値 = &合計値,@フォーム.明細番号設定( &秒)
 メソッド呼び出し @フォーム.描画禁止( 0 )
手続き定義終了

10358 Re:CMDでは中央に表示されます 悲しげ 2001/03/17-21:42
記事番号10356へのコメント
どもっ、今村 誠さん

私の場合は、cmdでは全く試しておらず、kev上のみなので、もしかしたら挙動を異にしているのかもしれませんが、2点だけコメントします。

>タイマー1イベントを0.1に設定した場合
>フォーム開始では意図した通りの明細番号に
>設定できました。がレコードを移動しても
>0.1秒後にやはり最終行に移動します。

これは
-----------------------------------------------
手続き定義開始 フォーム::タイマー1()
 オブジェクト操作 @フォーム.タイマー1="0"
-----------------------------------------------
の記述を忘れているからでは?
ここの記述は、「フォーム開始」の次のイベントとして、1回だけ発生させることを意味しています。

次、

>またみすずさんご指摘のジャンプ=最終行で1行だけしか表示しない
>が再現できません。

みすずさんご自身はそうは明言していませんでしたから、私も当初は再現できなくて変だと思いましたが、
でもこれはどうやら「フォーム開始」イベント時のことのようですよ。
ですよね?>みすずさん
10366 忘れていたみたいです 今村 誠 2001/03/18-15:42
記事番号10358へのコメント

> オブジェクト操作 @フォーム.タイマー1="0"
>-----------------------------------------------
>の記述を忘れているからでは?

初めてタイマーなるものを使ってみました。
全然意味が分からないでいたのですが、こんな時に使えるのですね。
タイマーの中でなく、cmdの中にジャンプを記載して明細の移動だけをタイマーに書くと表からフォームでもスムーズにいくみたいです。
悲しげさん何度もありがとうございました。

10415 Re:CMDでは中央に表示されます みすず 2001/03/21-08:25
記事番号10358へのコメント
>みすずさんご自身はそうは明言していませんでしたから、私も当初は再
>現できなくて変だと思いましたが、でもこれはどうやら「フォーム開始」
>イベント時のことのようですよ。ですよね?>みすずさん

「フォーム開始」イベントでジャンプ=最終行を実行すると編集対象表の最後のレコードが第一番目になります。
 

戻る