左矢印←キーで、一つ前の項目へ移動(戻りたい)
いつもお世話になっております。
商品コード 商品名 数量 といったテーブルコントロール入力画面があります。
001 3色ボールペン 12本 といった項目が入力されており
Enterキーで、次項目へ移動されて
Shift+Tabで 前項目へ移動するようにはなっております。
dbMAGIC V8の時は、
項目の先頭にカーソル(点滅)がある時は、
キーボードの左矢印キー(←)でも前の項目へ移動が出来ておりました。
(3色ボールペン の「3」の左側にカーソルがある時や
12本の1の左側にカーソルがあるときなど)
dbMAGIC V8のキーボード割り付けは
#126 次項目 Left #1 表:逆方向
#147 前文字 Left #1 編:非行先頭
#148 前項目 Left #1 表:順方向
になっております。
前項目で探すと、先程の分以外では
#149 前項目 Rght #1 表:逆方向
#150 前項目 Shift+Tab
#151 前項目 Up #1 表:スクリーンモード
xpa 3 でも同様の実行時キーボード割付にしているつもりなのですが
項目の先頭で点滅しているときに、左矢印キーで1つ前の項目へ
移動できません。
分かる方おられましたら、解決方法を教えて頂けないでしょうか。
-
うまくいかないみたいですね・・・・
サポートに確認した方がよいかもですね
-
こちらですが、私も同じ悩みを持ってサポートに問い合わせしました。
(私の場合uniPaaSからxpaでしたが)Magicの標準機能ではこれはどうやっても解決できません。
また参考までにマニュアルにキーボードステータスがxpaから役に立たなくなったような記述がありました。い~さぽに問い合わせしたところサンプルプログラムをもらいました。
サンプルとはいえ、私から公開してよいものかわからないので公開しないでおきますが、メインプログラムにロジックを作ることでほぼ同じような動作になります。
それでもuniPaaS時代とまったく同じにはなりませんでしたのでかなり手を加えて、leftとrghtイベントを40行くらいで作成しました。 -
ISHIJIMA様、hira様
お世話になっております。
レスポンス頂き誠にありがとうございます。
(V9 Plusでも同様に左矢印で戻らない事は午前中確認をしました。)hira様 情報感謝します。
わかりませんがキャレット?など役立ちそうですね。uniPaaS V1 Plusなどは、項目先頭左矢印で前項目へ戻れたんですね。
キーボードで戻る時は、Shift+Tabで戻りゃいいやぐらいにしか
私は思いませんが、お客様は←キーで項目戻りをしていたので。 -
hiraさん
サンプルプログラムは無理としても大まかにどんな風にするのか投稿できませんか?
-
レフトキーイベントを拾い、
キャレットがゼロなら前項目イベント
そうでなければ伝播とか、チャレンジしたいと思ってます。 -
ISHIJIMA様、hira様
実験しました。
簡単なテストですが今の所、問題無い気がします。メインプログラムに、イベント Left スコープ=サブツリー
ブロック IF CaretPosGet( )=1
イベント実行 前項目
ブロック ELSE
イベント実行 前文字
ブロック ENDやっぱりフォーラムには質問してみるもんですね。
いいヒントを頂けました。これでお客様環境に納品してみます。
昔、CaretPosGet関数を知った時は使い道を思いつきませんでしたが
こんな所で役に立つとは。 -
お客様は次項目移動は、Enterをお使いなので、Leftのみ定義したいと思います。
-
メインプログラムに、イベント Left スコープ=サブツリー 伝播をYesにすれば
ブロック IF CaretPosGet( )=1
イベント実行 前項目
ブロック ENDでもいけそうですが、照会モードの時に、←キーを押すと、ピロンピロン音がするので
よくないのかもしれません。
なのでやはり先程投稿した
イベント Left スコープ=サブツリー、伝播=No
ブロック IF CaretPosGet( )=1
イベント実行 前項目
ブロック ELSE
イベント実行 前文字
ブロック ENDを採用します。
-
CaretPosGet関数で完璧にできそうですね
メインで照会モード以外とかの条件でできないですかね
いろいろ試して条件を追加していけばよいのかな
-
照会モードの時に処理を変更する方法でよいのかなと
どんな動きにするかですが項目先頭だったら音が鳴りませんね
ブロック IF CaretPosGet( )=1
イベント実行 前項目
ブロック ELSE
イベント実行 項目先頭
ブロック END -
サポートの回答は同じだったのでしょうか?
-
hiraさんがサポートからアドバイスをもらったのはどのような内容だったのか知りたいですね!
私は6:38の投稿内容でひとまず完結です。 -
hiraさん
>また参考までにマニュアルにキーボードステータスが
>xpaから役に立たなくなったような記述がありました。
この記述どのあたりにありますか?
探してみましたが見つからないのでできたら教えて下さい。
-
私の投稿した方法ではコンボボックスでは、前項目には移動しないようです。
ですがそれはそれで良しとしたいと思います。
-
コンボボックスはCaretPosGet( )でゼロが返ってくるので
CaretPosGet( )<=1とすればよいのかな
-
テーブルだけにしたい場合はCURROW関数でゼロ以外という条件で何とかなりますね
-
CaretPosGet( )<=1でコンボボックスでも前項目へ移動しました。
Currow関数も使った事がありませんでした。
ありがとうございました。
-
ISHIJIMA さん、nkmtさん
遅くなって申し訳ございません。
サンプルプログラムでは以下のような内容でした。
Rghtイベント
①右が入力された場合以下の結果を変数へ入力
IF (VarAttr (VarInp (0))='N', Str (EditGet (),'L' & VarPic(VarInp(0),0)),EditGet())
②変数から現在の位置マイナス1が同じだった場合
Left (①の変数, CaretPosGet () - 1) = ①の変数
③②がTrueの場合、「次項目」へ。Falseの場合「次の文字」へ
Leftイベント
①「CaretPosGet( )=1」だったら「前項目」へ。上記のままではテーブルコントールと通常のエディットが混ざっていると前と同じ動きにならなかったので以下のようなことをしました。
①CurRow(0)で現在のカーソルがテーブルコントールであることを確認するようにしています。
②MCQのモードによって一文字動くか次項目か変えています。(MCは次の文字、Qなら次の項目)(これは私のところだけかもしれません)
③LeftイベントもRghtイベント同じようなロジックに変えています。
④Left動作では前のパークの1文字目にカーソルがいっていますので前項目の後に項目末尾を入れています。>また参考までにマニュアルにキーボードステータスがxpaから役に立たなくなったような記述がありました。
申し訳ありません。2年前のことだったのでこちら私の勘違いでした。
キーボードステータスが全部役に立たないわけではありませんでした。
当時の資料を確認したところ、マニュアルではなくテクニカル情報の「2002152」でした。xpa2.xのものになりますが、3.xでも同じ仕様だとい~さぽに確認してました。 -
回答ありがとうございました。
>テクニカル情報の「2002152」
2.3a~からむ無効なのですね・・・・
-
なかなか、DOSの操作性から抜けきれないユーザさんが多いと思いますので大変ですね。EXCELのDOS互換の操作がなければ一気にWinodowsの操作性に切り替わると思うのですがね。
-
Shift+Tab押すのは面倒臭い、マウス操作で戻るのは面倒臭いというお客様の心境もわからんでもないです。
このお客様はDOS版というかdbMAGIC V8を長くつかっていました。
かと思えば、私の担当ではありませんが、Enterで項目移動しないシステムに慣れているクラサバユーザーもいたり。 -
そうですね、そのあたりのバランスが難しいですね。EXCELですと動いちゃいますからね。EXCELの動きがなければ、DOSからWindowsに変わったタイミングで通せたんですけどね。
-
そうですね。EXCELは上下左右の矢印で移動出来ますもんね。
Magicの話ですが、入力文字数が多いと
左矢印キーで前項目に戻るのに時間かかりますけど
便利なので、いろんなシステムに組み込みたいと思います。 -
設定を変えれば、Enterで右移動もできるみたいです。
サインインしてコメントを残してください。
コメント
24件のコメント