メインコンテンツへスキップ

左矢印←キーで、一つ前の項目へ移動(戻りたい)

コメント

24件のコメント

  • ISHIJIMA

    うまくいかないみたいですね・・・・

    サポートに確認した方がよいかもですね

  • hira

    こちらですが、私も同じ悩みを持ってサポートに問い合わせしました。
    (私の場合uniPaaSからxpaでしたが)

    Magicの標準機能ではこれはどうやっても解決できません。
    また参考までにマニュアルにキーボードステータスがxpaから役に立たなくなったような記述がありました。

    い~さぽに問い合わせしたところサンプルプログラムをもらいました。
    サンプルとはいえ、私から公開してよいものかわからないので公開しないでおきますが、メインプログラムにロジックを作ることでほぼ同じような動作になります。
    それでもuniPaaS時代とまったく同じにはなりませんでしたのでかなり手を加えて、leftとrghtイベントを40行くらいで作成しました。

  • nkmt

    ISHIJIMA様、hira様
    お世話になっております。
    レスポンス頂き誠にありがとうございます。
    (V9 Plusでも同様に左矢印で戻らない事は午前中確認をしました。)

    hira様 情報感謝します。
    わかりませんがキャレット?など役立ちそうですね。

    uniPaaS V1 Plusなどは、項目先頭左矢印で前項目へ戻れたんですね。
    キーボードで戻る時は、Shift+Tabで戻りゃいいやぐらいにしか
    私は思いませんが、お客様は←キーで項目戻りをしていたので。

  • ISHIJIMA

    hiraさん

    サンプルプログラムは無理としても大まかにどんな風にするのか投稿できませんか?

     

  • nkmt

    レフトキーイベントを拾い、
    キャレットがゼロなら前項目イベント
    そうでなければ伝播とか、チャレンジしたいと思ってます。

  • nkmt

    ISHIJIMA様、hira様

    実験しました。
    簡単なテストですが今の所、問題無い気がします。

    メインプログラムに、イベント Left スコープ=サブツリー

     ブロック IF CaretPosGet( )=1
          イベント実行 前項目
     ブロック ELSE
          イベント実行 前文字
     ブロック END

    やっぱりフォーラムには質問してみるもんですね。
    いいヒントを頂けました。

    これでお客様環境に納品してみます。

    昔、CaretPosGet関数を知った時は使い道を思いつきませんでしたが
    こんな所で役に立つとは。

  • nkmt

    お客様は次項目移動は、Enterをお使いなので、Leftのみ定義したいと思います。

  • nkmt

    メインプログラムに、イベント Left スコープ=サブツリー 伝播をYesにすれば

     ブロック IF CaretPosGet( )=1
          イベント実行 前項目
     ブロック END

    でもいけそうですが、照会モードの時に、←キーを押すと、ピロンピロン音がするので
    よくないのかもしれません。


    なのでやはり先程投稿した
    イベント Left スコープ=サブツリー、伝播=No
     ブロック IF CaretPosGet( )=1
          イベント実行 前項目
     ブロック ELSE
          イベント実行 前文字
     ブロック END

    を採用します。

  • ISHIJIMA

    CaretPosGet関数で完璧にできそうですね

    メインで照会モード以外とかの条件でできないですかね

    いろいろ試して条件を追加していけばよいのかな

  • ISHIJIMA

    照会モードの時に処理を変更する方法でよいのかなと

    どんな動きにするかですが項目先頭だったら音が鳴りませんね

     ブロック IF CaretPosGet( )=1
          イベント実行 前項目
     ブロック ELSE
          イベント実行 項目先頭
     ブロック END

  • ISHIJIMA

    サポートの回答は同じだったのでしょうか?

  • nkmt

    hiraさんがサポートからアドバイスをもらったのはどのような内容だったのか知りたいですね!
    私は6:38の投稿内容でひとまず完結です。

  • ISHIJIMA

    hiraさん

    >また参考までにマニュアルにキーボードステータスが

    >xpaから役に立たなくなったような記述がありました。

    この記述どのあたりにありますか?

    探してみましたが見つからないのでできたら教えて下さい。

  • nkmt

    私の投稿した方法ではコンボボックスでは、前項目には移動しないようです。

    ですがそれはそれで良しとしたいと思います。

  • ISHIJIMA

    コンボボックスはCaretPosGet( )でゼロが返ってくるので

    CaretPosGet( )<=1とすればよいのかな

  • ISHIJIMA

    テーブルだけにしたい場合はCURROW関数でゼロ以外という条件で何とかなりますね

  • nkmt

    CaretPosGet( )<=1でコンボボックスでも前項目へ移動しました。

    Currow関数も使った事がありませんでした。

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

  • hira

    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でも同じ仕様だとい~さぽに確認してました。

  • ISHIJIMA

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

    >テクニカル情報の「2002152」

    2.3a~からむ無効なのですね・・・・

  • tanda

    なかなか、DOSの操作性から抜けきれないユーザさんが多いと思いますので大変ですね。EXCELのDOS互換の操作がなければ一気にWinodowsの操作性に切り替わると思うのですがね。

  • nkmt

    Shift+Tab押すのは面倒臭い、マウス操作で戻るのは面倒臭いというお客様の心境もわからんでもないです。
    このお客様はDOS版というかdbMAGIC V8を長くつかっていました。
    かと思えば、私の担当ではありませんが、Enterで項目移動しないシステムに慣れているクラサバユーザーもいたり。

  • tanda

    そうですね、そのあたりのバランスが難しいですね。EXCELですと動いちゃいますからね。EXCELの動きがなければ、DOSからWindowsに変わったタイミングで通せたんですけどね。

  • nkmt

    そうですね。EXCELは上下左右の矢印で移動出来ますもんね。
    Magicの話ですが、入力文字数が多いと
    左矢印キーで前項目に戻るのに時間かかりますけど
    便利なので、いろんなシステムに組み込みたいと思います。

  • tanda

    設定を変えれば、Enterで右移動もできるみたいです。

サインインしてコメントを残してください。