コンピュータを楽しもう!!

今、自分が面白くていろいろやってみたことを書き綴りたいと思います。連絡先はtarosa.yでgmail.comです。

DSでかな漢字変換(3)

DSでかな漢字変換入力を行うプログラムですが、一気にエイヤとラインエディットできる日本語かな漢字変換入力プログラムを書き上げてしまいました。
とはいうものの、一通りの動作ができるだけで、細かなところは全然できていません。候補語もたくさんあるときには、選択できません。
一気にプログラムをいっぱい書いてしまったので、このブログで細かく紹介していくのがちょっと面倒になってしまっています。
ソースプログラムはNDS Program Roomにアップしました。興味がある方は見てみてください。
画面だけ紹介しておきます。

DSでかな漢字変換


ご覧の通り、かな打ちです。私がかな打ちなので仕方ないですね・・・・。

少しはプログラム紹介

ラインエディタ部分が2ヶ所あります。かな漢字変換部とキーからの文字入力部です。1つにまとめるよりも分けたほうがプログラムが楽なので、こうしました。このラインエディタを使うために、下記の構造体を用意しました。

//ラインエディタ用構造体
typedef struct LineEditPara{
 char *Text;    //編集する文章
 int  *CurPosi;   //カーソルの位置
 int  *MojiDispTop;  //文字を表示する先頭位置 編集文字列が表示文字列よりも短ければMojiDispTop[0] = 0
 int  ChaMojiSu;   //扱える文字数(半角換算)
 int  CurColor;   //カーソルの色
 int  ChaColor;   //文字の色
 int  BacColor;   //背景の色
 int  Lx;     //編集エリアのX座標
 int  Ly;     //編集エリアのY座標
 int  ChaDispNum;   //表示可能な文字数(半角)
 int  *OldDispCurPosi; //1つ前のカーソル位置
 int  *DispCurPosi;  //表示文字列上でのカーソル位置(0〜chaDispNum)
 int  *TextLen;   //編集する文字列の長さ(最後)[nullの位置]
 int  *MojiDispLast;  //表示する文字列の最後の位置
} LineEditParam;

そして、KanaKanjiプログラムの中で、2つの構造体をセットしています。

//**************************************************
//  テキスト入力します
// tlen:は入力可能なサイズ(半角換算)
//**************************************************
int TextInput( uint16* gamen, char *text, int tlen )
{
LineEditParam mainText;
LineEditParam kanaKan;
char kanji[KANJI_TEXT_SIZE];
int  ret;
int  postCurPos = 0;
int  postMojiDispTop = 0;
int  textlen;
int  mojiDispLast, oldDispCurPosi, dispCurPosi;
int  kpostCurPos = 0;
int  kpostMojiDispTop = 0;
int  ktextlen;
int  kmojiDispLast, koldDispCurPosi, kdispCurPosi;

 kanji[0] = 0;

 mainText.Text = text;      //編集する文章
 mainText.CurPosi = &postCurPos;    //カーソルの位置
 mainText.MojiDispTop = &postMojiDispTop; //文字を表示する先頭位置 編集文字列が表示文字列よりも短ければMojiDispTop[0] = 0
 mainText.ChaMojiSu = tlen;     //扱える文字数(半角換算)
 mainText.CurColor = RGB(31,0,0);   //カーソルの色
 mainText.ChaColor = RGB(0,0,0);   //文字の色
 mainText.BacColor = RGB(31,31,31);   //背景の色
 mainText.Lx = EDIT_AREA_X;     //編集エリアのX座標
 mainText.Ly = EDIT_AREA_Y;     //編集エリアのY座・
 mainText.ChaDispNum = 41;     //表示可能な文字数(半角)
 mainText.OldDispCurPosi = &oldDispCurPosi; //1つ前のカーソル位置
 mainText.DispCurPosi = &dispCurPosi;  //表示文字列上でのカーソル位置(0〜chaDispNum)
 mainText.TextLen = &textlen;    //編集する文字列の長さ(最後)[nullの位置]
 mainText.MojiDispLast = &mojiDispLast;  //表示する文字列の最後の位置

 kanaKan.Text = kanji;      //編集する文章
 kanaKan.CurPosi = &kpostCurPos;    //カーソルの位置
 kanaKan.MojiDispTop = &kpostMojiDispTop; //文字を表示する先頭位置 編集文字列が表示文字列よりも短ければMojiDispTop[0] = 0
 kanaKan.ChaMojiSu = KANJI_TEXT_SIZE - 1; //扱える文字数(半角換算)
 kanaKan.CurColor = RGB(31,0,0);   //カーソルの色
 kanaKan.ChaColor = RGB(0,14,31);   //文字の色
 kanaKan.BacColor = RGB(31,31,31);   //背景の色
 kanaKan.Lx = EDIT_KANJI_AREA_X;    //編集エリアのX座標
 kanaKan.Ly = EDIT_KANJI_AREA_Y;    //編集エリアのY座・
 kanaKan.ChaDispNum = KANJI_DISP_SIZE;  //表示可能な文字数(半角)
 kanaKan.OldDispCurPosi = &koldDispCurPosi; //1つ前のカーソル位置
 kanaKan.DispCurPosi = &kdispCurPosi;  //表示文字列上でのカーソル位置(0〜chaDispNum)
 kanaKan.TextLen = &ktextlen;    //編集する文字列の長さ(最後)[nullの位置]
 kanaKan.MojiDispLast = &kmojiDispLast;  //表示する文字列の最後の位置

 KeyboardIni( gamen ); // キーボード表示準備をします

 ret = LeditKanaKan( mainText, kanaKan );
 return( ret );
}

こんな感じです。
もう一つ、DSでツイッターにつぶやくだけのソフトTwitOnlyに、このプログラムを実装してみました。

ブログも毎日書かないと、当然、訪問者も減りますね。今年度からは、ぼちぼち書いていきたいと思います。そろそろ、Androidのソフトも作りたいと思っています。DSは卒業だ。

本当にやりたいことリスト

(ブログの終わりにやりたいことを書いておきたいと思います)

  • 求職活動・・・このブログで興味を持った人一声かけてください。m(_ _)m
  • Androidプログラム
  • Web系のプログラム