2016年6月11日土曜日

数年前に作った 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 件のコメント:

コメントを投稿