数年前に作った REALbasic・REALStudio のアプリをXOJOでビルドしなおして悩んだ不具合
ListBoxでActiveCell を使って直接編集してる時、日本語を確定しようとリターンキーを押すと編集できない状態に戻っちゃって、日本語入力が面倒に成ってしまいました。
悩んだあげく一定の成果が出たのでメモです。
要は、「入力前のアイビーム位置」と「増える前の文字数」と「増え後の文字数」を使って「新しいアイビーム位置」を計算で出すってことです。
環境は
MacOSX 10.11.5
標準の日本語入力
XOJO 2016 r1.1
下のコードはコピペで書き出したので間違ってるかもしれません。
あー疲れた。
変換前の文字数を拾うために
EditField などを別途用意
ListBox のCellGetFocus と CellTextChange に
EditField1.Text = ListBox1.ActiveCell.Text //変換前の文字列コピー
ListBox の CellKyeDown に
Dim i,TextIBeamOld,TextIBeamNew,MojisuuOld,MojisuuNew As Integer
TextIBeamOld = ListBox1.ActiveCell.SelStart //日本語変換前のアイビーム位置
MojisuuOld = Len(EditField1.Text) //日本語変換前の文字数
If Keyboard.AsynckeyDown(&h24) Then //returnキーが押されたら
MojisuuNew = Len(ListBox1.Cell(Row,column))//日本語変換後の文字数
ListBox1.EditCell(Row,column)
TextIBeamNew = TextIBeamOld + (MojisuuNew - MojisuuOld)
ListBox1.ActiveCell.SelStart = TextIBeamNew
ListBox1.ActiveCell.SelLength = 0
Return True
End If
0 件のコメント:
コメントを投稿