xpa 3.2へマイグレーション後のCaretPosGet()関数について
お世話になっております。
Magic uniPaaS V1Plus 1.9g2 PT5からMagic xpa 3.2へマイグレーションを行ないましたが
一部機能が同等の動きをしない箇所がありました。
ボタンをクリックしたときに、エディットコントロールへある文字列を挿入するというものなのですが、
uniPaaS V1Plus では挿入したい箇所にカーソルを位置づけしてボタンを押すとそカーソル位置に文字列を挿入できるのですが、Magic xpa 3.2では元ある文字列がすべて消えてしまい、先頭に挿入したい文字列が貼り付けられるといった状態になります。(イメージ的には元ある文字列が全選択されてしまいそこに上書きされている感じです。)
CaretPosGet()関数を使用しエディットコントロール内のカーソルの位置を取得し、そこに文字列を挿入しているのですが、
実際にCaretPosGet()関数で取得した位置を確認すると、カーソルの位置ではなく、エディットコントロール内の文字の
最後の位置を取得していました。
uniPaaS V1Plusでは、カーソルの位置がきちんととれていたのですが、Magic xpa 3.2ではカーソルの位置が取れないという現象が起きています。
どなたかご存じの方いらっしゃいましたら教えていただけないでしょうか。
宜しくお願い致します。
開発環境
Windows10Pro64bit
Xpa3.2c
-
こちらでも確認しましたがuniPaaS とxpaでは動きが違いますね・・・・
サポートに問い合わせして確認した方がよさそうです。
-
ボタンではなくてFキー等を割り当てると問題ないみたいです。
バクなのか・制約事項なのか・回避策はあるのか・・・・
XPA4.7.1でもできませんでした・・・
-
回避策として下記内容でできるかと思います。
ユーザーイベントのパラメタに桁数項目を作成します。
ボタンを押した時のユーザーイベントのパラメタにCaretPosGet()を入れます。
イベント内に桁数項目を作成します。
そうするとそこに桁数が入ってきます。
-
ファンクションキーの使用ですとか、フォーカスの移動しないイベントならOKのようですね。
-
ISHIJIMA様、tanda様
お早い返信ありがとうございます。
ボタンクリックのように、一旦エディットコントロールから
フォーカスが離れるような場合は上手くいかないのでしょうかね。
ISHIJIMA様
>ユーザーイベントのパラメタに桁数項目を作成します。
>ボタンを押した時のユーザーイベントのパラメタにCaretPosGet()を入れます。
>イベント内に桁数項目を作成します。
>そうするとそこに桁数が入ってきます。この場合はボタンクリックでも上手くいくのでしょうか?
ユーザーイベントを作成してパラメータ等作成してみましたが上手くいかなかったので。
これは、ユーザーイベントを作成して、そのイベントをボタンクリックした時のイベントから
呼び出すような仕組みでよろしいのでしょうか?宜しくお願い致します。
-
ボタンでうまくいっています。
タスク環境のユーザーイベントでイベントを追加する時にパラメタを追加
ボタンのプロパティ内
イベントタイプに設定したイベントタイプ
イベントに設定したイベント
パラメタにCaretPosGet()
ロジック
イベント 設定したイベント(新規にイベントを作成すると自動的に項目パラメタが追加される)
この項目を使用して処理を行えば該当する位置になるはずです。
-
ISHIJIMA様
ありがとうございます。教えて頂いた方法で、カーソルの位置を取得することができました。
ただ、位置は取得できましたが、実際その位置に挿入しようとするとやはり
元の文字列全体に上書きしたようになってしまいました。ClipAdd(挿入文字列)
ClipWrite()
MarkText(カーソル位置-1,0)
イベントの貼り付け以上のような流れで作成していますが、元の文字列が全て削除され、挿入文字列のみが表示されます。
やはりボタンクリックした時に、全選択になっているようでそのあたりが関係しているのでしょうか。
ご存知でしたら教えていただけますでしょうか。再度、質問のような形になり申し訳ございません。
-
サンプルを作成してサポートに確認された方が良いかと思います。
-
>ClipAdd(挿入文字列)
>ClipWrite()
>MarkText(カーソル位置-1,0)
>イベントの貼り付けどこの関数がうまくいっていないか確認されましたか?
-
ISHIJIMA様
ありがとうございました。サポートに確認したいと思います。
-
MarkText(カーソル位置-1,0)の文字数がゼロだと駄目みたいですね・・・・
バグかな
文字数を1にするとその文字が消えますが挿入されます。
どちらにしてもサポートに確認ですね・・・
-
お世話になります。
サポートにはまだ確認していませんが、
先ほどの文字列挿入の件ですが、MarkText()の仕方がまずいみたいで、
第二引数の'文字数'でこれがマークする文字数を表す数値ですが、ここで0を指定すると
Magic uniPaaS V1Plusではちょうど指定場所に挿入されるのですが、Magic xpa だと
元の文字列が消えてしまう現象が起きていました。
引数に1以上を指定すれば、uniPaaSと同じ動きみたいです。
ただ今回は、カーソル位置に挿入したいので引数に1以上を指定しますと、その文字数だけ
上書きされるので、そのあたりをサポートに確認しようとおもいます。
-
ゼロで同じ動きになる事が正解だと思いますのでバクだと思われます。
現状の回避策としては文字数1のマークの後に前文字イベント・次文字イベントでマークを解除するぐらいでしょうか
ただ一番先頭だと変な動きになりますが・・・(unipaasと同じ動き?)
-
CaretPosGetとMarkTextはuniPaaSとxpaでは動き方か違うという事をサポートに確認しておいた方が良いかもです。
バグなのか制約事項なのか・・・
-
ISHIJIMA様
いろいろとありがとうございます。
-
現在のMagicのフォームエディタは、MicrosoftのVisual Studioのフォームデザイナーを使用していますので、それが原因かもしれませんね。
サインインしてコメントを残してください。
コメント
16件のコメント