TeamKNOx WEB-Site
Last Update : 2005/Dec/11
Series60Tips
ファイルの読み込み
日本語リソースの設定
UIDの変更箇所
エミュと実機のビルド
エディタの入力モードを変更したい
コード変換
DynInitMenuPane の注意点
<<戻る

    Series60青本(表紙が全体に青っぽいので…)は非常に内容が充実しているが、翻訳本なので日本語を扱うときに少し試行錯誤が必要になる。プログラミングの過程で得た知識をメモしていく。


  • ファイルの読み込み

    • BOM の取り扱い

      日本語を取り扱うときは UTF-8 形式のファイルを取り扱う必要がある。UTF-8 形式のファイルはファイルの先頭にBOMが付加されているのでファイルを読み込ませるときは予め、この部分を飛ばしてから読み込ませる必要がある。

    • UTF-8 -> UNICODE

      内部的には UNICODE で処理されているので UTF-8 を UNICODE に変換する必要がある。具体的には以下のAPIを使って変換する。

      const TInt returnValue=CnvUtfConverter::
      ConvertToUnicodeFromUtf8(unicodeOutputBuf, utf8Buf);


  • 日本語リソースの設定

    Series60青本の230ページあたりに詳しい記述があるが、日本語(2バイト?)を取り扱うときは以下の点にも注意する必要がある。

    • *.loc ファイル中に CHARACTER_SET UTF8 を記述する。*.loc ファイルそのものも UTF-8 形式にする
    • 各言語のリソースを記述する *.l01 ファイルなども UTF-8 形式にする

    ちなみに日本語の場合だと *.l32 になる。

    *.pkg ファイルの記述を工夫すると各言語セットごとにファイル構成を変えることが出来る。これにより、各国に合わせたビットマップや音声などをセットアップすることが出来る。


  • UIDの変更箇所

    本格的なアプリケーション開発を行うようになると UID が必要になってくる。アプリケーションを開発するときはサンプルコードを改造したり、Application Wizard を用いて開発することが多いと思う。どっちにしても UID を後から設定する必要がある。(ちなみに筆者は Application Wizard でうまく設定出来たためしがない…。)以下のファイルを編集する

    • 〜Application.h
    • 〜Aif.rss
    • 〜.mmp
    • 〜.pkg


  • エミュと実機のビルド

    エミュと実機でビルドの条件を少しだけ変えたい場合は以下のようにする。(NextTrain60 から引用)

    #if __WINS__
    _LIT(KTbls, "C:\\nexttrain60\\tbls\\");
    #else
    _LIT(KTbls, "E:\\nexttrain60\\tbls\\");
    #endif

    エミュレータのときは "_LIT(KTbls, "C:\\nexttrain60\\tbls\\");" がコンパイルされる。


  • エディタの入力モードを変更したい

    エディタの入力時は漢字モードになっているが、漢字ではなく英字を直接、入力しなければならない時はいちいち、モードを変更しなければならない。ダイアログのリソース設定により、最初から漢字以外の入力モードにすることができる。

    RESOURCE DIALOG r_dataquery_data_query
    	{
    	flags=EGeneralQueryFlags; 
    	buttons = R_AVKON_SOFTKEYS_OK_CANCEL;
    	items =
    		{
    		DLG_LINE
    			{
    			type = EAknCtQuery;
    			id = EDataQueryDlgCIdDataQuery;
    			control = AVKON_DATA_QUERY
    				{
    				layout = EDataLayout;
    				control = 
    					EDWIN
    						{
    				avkon_flags = EAknEditorFlagLatinInputModesOnly;
    						width = KMaxCommandNameLength;
    						lines = 1;
    						maxlength = KMaxCommandNameLength;
    						};
    				};
    			}
    		};
    	}
    
    
    


  • コード変換

    SymbianOS は Unicode が使われているけど、色んな漢字コードが日本には存在する。とりあえず、使いたいときは下記の様にお手軽に使える。

    TBool CBTMSG60AppView::CharConvertL(TInt aTargetCode, TDes &  aDes) const
    	{
    	TBuf unicodeMessage;
    	TBuf8 jiscodeMessage;
    
    	unicodeMessage.Copy(aDes);
    
    	CCnvCharacterSetConverter* converter = CCnvCharacterSetConverter::NewLC();
    	if(converter->PrepareToConvertToOrFromL(aTargetCode,
    		iEikonEnv->FsSession()) != CCnvCharacterSetConverter::EAvailable)
    		User::Leave(KErrNotSupported);
    
    	if(CCnvCharacterSetConverter::EErrorIllFormedInput == converter->ConvertFromUnicode(jiscodeMessage, unicodeMessage))
    		User::Leave(KErrArgument);  //Leave if error in conversion.
    
    	aDes.Copy( jiscodeMessage );
    
    	return ETrue;
    
    	}
    
    
    

    呼び出すときは

    iAppView->CharConvertL(KCharacterSetIdentifierShiftJis, textData);

    って感じで。他の漢字コードを使いたいときは一つ目の引数を変える。charconv.h charconv.lib も忘れずに!!


  • DynInitMenuPane の注意点

    メニューの項目を動的に減らすメソッドの DynInitMenuPane だが、Series60青本では、なぜか それ自身をオーバーライドしていない。一応、注意点としてオーバーライドするように書いてあるが、忘れがちになるので注意すること。


頁の先頭
織田裕一へメール


Copyright (C) 1998 - 2005 TeamKNOx