MI-E1対応縦型アプリ開発について

2000/12/23 (最終更新:2005/08/28 15:27)

◎ 縦型アプリとは

従来のザウルスはすべて横長の画面を持っていました。 QVGA が 320x240ドット、VGA が 640x480 ドットで、 パソコンの画面と比率は一緒です。 VGA 機種も 1ドットを 4ドットで描画することで、QVGA 用アプリケーションと 完全な互換性を保っていました。

今度新しく登場した MI-E1 は、キーボード内蔵のため本体も縦持ちであり、 縦長の画面を持っています。 ちょうどこれまでのザウルスの画面を90度回転、横に倒した形であり、 QVGA ながら 横が 240ドット 縦が 320ドット となります。

そのため MI-E1 内蔵のアプリケーションも、 縦長画面に合わせた画面レイアウトの変更が行われているようです。

もちろん今まで作った MORE ソフトなど、従来のザウルス用に 作られたアプリケーションも MI-E1 でそのまま動きます。 その代わり横画面なので、本体も横にして見なければなりません。 MI-E1 内蔵機能でもごく一部、フォトメモリとインターネットブラウザが 横画面の仕様になっています。

◎ 横画面なら完全互換

横画面での動作のみ考えるのであれば、MI-E1 はこれまでのザウルスと 完全な互換性を保っています。 横画面状態では MI-C1 等のように、キーパッドもきちんと横に現れ タイプライターボードも登場します。 MORE ソフトもそのまま動きます。

◎ 縦画面アプリを作るには

縦画面専用の描画APIが新設されるのかと思っていましたが、 どうやら違うようです。 SZAB を使ったアプリケーション開発では、 プログラム構造そのものの変更は不要です。 座標系は勝手に変換されるので、 プログラム的には単純に画面の大きさが 320x240 から 240x320 に変わっただけにしか見えません。

最初から縦型のアプリケーションフォームで作成するのであれば、 これまでと作り方は一切変わらず、 今まで通りの作成手順で作れます。

◎ 横画面アプリを縦画面に変換するには

かなり早い時期に mab さん が こちらのコラムで 「16回 やってみよう縦型化」 解説されています。

具体的には、画面の座標系を変換するおまじないとして ????main.c の PIMExecSetup() に次の 3行を加えます。 (????はアプリケーション識別子です)

PIMExecWork->WhichWindow= PIM_WIN_UNIVERSAL;
strcpy( PIMExecWork->PIMWindowRes.ResFile, "SYSTST00" );
PIMExecWork->PIMWindowRes.ResID= NormAplVWindowID;
これだけで画面は 90度回転します。 画面の左側 240x240dot 分しか必要としないアプリケーションであれば、 上記3行だけで修正はおしまいです。 また機種判別を行い、上記の3行を実行するかしないか分岐を加えれば、 簡単に縦横兼用アプリケーションができあがります。

もちろん、 そう都合良く 240x240dot しか使っていないアプリケーションはないので、 実際はもっといろいろ手直しをする必要があります。

◎ フォームは作り直し

座標を合わせて横画面できっちりレイアウトされたフォームの場合、 残念ながら縦画面用にレイアウトし直さなければなりません。 どれだけ手間がかかるかは、それぞれのアプリケーション依存でしょう。

ダイアログの場合は、????main.c の修正だけでは縦に変換されないものがあります。 これはフォームのプロパティにフラグを設定しなければなりません。 (MDLS_WIN_OPTION_PID の MDLS_WO_VERTICALなど) もし縦横兼用アプリケーションにするならば、 このフラグはプログラム中で設定を切り替える必要があります。

◎ 縦横兼用アプリの場合

縦横兼用アプリケーションの場合は、画面レイアウトのかなりの制約を 受けてしまうことになります。 特にフォームの GUI パーツの場合は簡単に移動できないものもあるので、 プログラム中でそれらを全部再配置するのは面倒です。 画面左側に主要なパーツを集めるなどの、 ごまかしも必要になってくるでしょう。

筆者のプログラムの場合は、幸いというかあまりまじめに SZAB を使っていないというか、描画パーツをさほど使用していませんでした。 ほとんどのエリアは自前のコンソールライブラリで描画APIで直接文字を ウィンドウに書き込んでいます。

このコンソールライブラリは、もともとフォントサイズ、文字数や行数、 画面に対する開始位置などを自由に設定できるようになっていたので、 VGA 対応同様、縦長画面に合わせた修正も最小限の手間で済ませることができました。 初期化時の引数が違うだけで、また一部ボタンの座標をずらしているだけで、 フォームも完全に兼用のまま縦横両対応アプリケーションに仕上げています。

かえで のソース(MPGDmain.c)の一部。機種判定と縦型化

------------------------------------------------------------------------
BOOLEAN
PIMAplSetup(PIMINFO *PIMInfo,MESSAGE *Message,USHORT InitLevel)
{
	MESSAGE msg;
	UCHAR	ModelName[MODEL_NAME_MAX];
	ULONG	Version;
	GetSystemInfo( ModelName, &Version );

	if( (Version>>16) < MODEL_NUMBER_MIE1 ){
		//
	}else{
		SetAPP( APPFLAG_VERTICAL );
	}
	return	true;
}

BOOLEAN
PIMExecSetup(PIMEXECWORK *PIMExecWork,MESSAGE *Message)
{
	if( TestAPP( APPFLAG_VERTICAL ) ){
		PIMExecWork->WhichWindow= PIM_WIN_UNIVERSAL;
		s_strcpy( PIMExecWork->PIMWindowRes.ResFile,
						(__STRTYPE*)"SYSTST00" );
		PIMExecWork->PIMWindowRes.ResID= NormAplVWindowID;
	}
	return	true;
}
-------------------------------------------------------------------------

◎ 従来機種での縦型画面は?

従来機種、つまり MI-E1 以前の横画面を持った Zaurus で、 現在の E1 用に作られた縦画面アプリケーションを、 縦画面で動かすことはできません。 SZAB の開発は多くの部分を本体の内蔵機能に依存しているので、 E1 のように簡単に縦表示できないからです。 自前で描画したりライブラリを作れば縦画面に描画することはもちろんできます。 これまでにも縦画面アプリケーションとして haramasa さんの TTV ブックリーダー や timamu さんの スピード+α 、 夏町 銅貨 さんの ざうすけ がありました。

もちろんキーパッドの表示は横に出るので、 入力処理など工夫しなければならない部分もあります。

◎ サンプルプログラムとして

縦横のみならず、QVGA横、QVGA縦、VGA横、 と3つの画面モード対応のプログラム SerialTerminal のソースを こちら で公開しています。 参考になるかどうかわかりませんが 興味ある方はどうぞ。

[戻る]
[メニューに戻る] [ZAURUS総合] [DirectX] [Ko-Window] [Win32] [WinCE] [携帯電話] [その他]
フルパワー全開 Hyperでんち

Hiroyuki Ogasawara <ho>