Palm Programmer's Laboratory

トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

【NS Basic/Palm】イベントコードサンプル

[開発情報]

【NS Basic/Palm】FormのEventCodeサンプル

  • GetKeyのヘルプに、5Way NavigatorやClie Jog Dialのエントリーを追加したものです。

使用方法

  • コードをコピー&ペーストでFormのEventCodeに貼り付けて、“...”の部分にコードを書けば動作する(はず)です。
  • 実際には、イベントの発生するタイミングなどで使用しない方がいいKeyコードも含まれていますが、とりあえず一通り載せてます。実際に使用する際には、不要なものは削ってください。

コードサンプル

dim evt as Integer
dim key as string

evt=GetEventType()
key=getKey()
If evt=NSBKeyOrButton then '-- Button Event
select case asc(key)
	case 1	'-- アプリケーションボタン#1
	...
	case 2	'-- アプリケーションボタン#2
	...
	case 3	'-- アプリケーションボタン#3
	...
	case 4	'-- アプリケーションボタン#4
	...
	case 5	'-- シルクスクリーンのメニューキー
	...
	case 17	'-- シルクスクリーンのアプリケーション起動キー
	...
	case 7	'-- シルクスクリーンの検索キー
	...
	case 16	'-- シルクスクリーンの計算機キー
	...
	case 11	'-- Up(上)ボタン
	...
	case 12	'-- Down(下)ボタン
	...
	case 14	 '-- 電源(on/off)ボタン
	...
	case 15	 '-- クレードルHotsyncボタン
	...
	case 18	 '-- 自動電源オフ
	...
	case 50	 '-- 5Way UP(OS5.4以降)
	If sysinfo(9)=50 Then Exit Sub	'-- 文字入力の場合を排除
	...
	case 51	 '-- 5Way Down(OS5.4以降)
	If sysinfo(9)=51 Then Exit Sub	'-- 文字入力の場合を排除
	...
	case 52	 '-- 5Way Left(OS5.4以降)
	If sysinfo(9)=52 Then Exit Sub	'-- 文字入力の場合を排除
	...
	case 53	 '-- 5Way Right(OS5.4以降)
	If sysinfo(9)=53 Then Exit Sub	'-- 文字入力の場合を排除
	...
	case 61	 '-- 5Way Center Push(OS5.4以降)
	If sysinfo(9)=61 Then Exit Sub	'-- 文字入力の場合を排除
	...
	case 54	 '-- 5Way Center Release(OS5.4以降)
	If sysinfo(9)=54 Then Exit Sub	'-- 文字入力の場合を排除
	...
	case else
	...
end select
ElseIf evt = nsbPalm5Way Then  '-- Palm 5Way(OS5.2以前) & DIA Button Event
select case asc(key)
	Case 15		'-- DIA Home Button
	SetEventHandled	 '-- 2重にイベントを拾う恐れがあるので必ず指定
	...
	Case 16		'-- DIA Menu Button
	SetEventHandled	 '-- 2重にイベントを拾う恐れがあるので必ず指定
	...
	Case 17		'-- DIA Calc Button
	SetEventHandled	 '-- 2重にイベントを拾う恐れがあるので必ず指定
	...
	Case 18		'-- DIA Find Button
	SetEventHandled	 '-- 2重にイベントを拾う恐れがあるので必ず指定
	...
	case 200	'-- 5Way Button Release(OS5.2以前)
	...
	case 202	'-- 5Way Left(OS5.2以前)
	...
	case 208	'-- 5Way Right(OS5.2以前)
	...
	case 216	'-- 5Way Center Push(OS5.2以前)
	...
end select
ElseIf evt = NsbJogDial Then  '-- CLIE JOG DIAL Event
select case asc(key)
	Case 0	'-- JogUp(ジョグ上回し)
	...
	Case 1	'-- JogDown(ジョグ下回し)
	...
	Case 2	'-- JogPressRepeat(ジョグ長押し)
	...
	Case 3	'-- JogPageUp(ジョグ上押回し)
	...
	Case 4	'-- JogPageDown(ジョグ下押回し)
	...
	Case 5	'-- JogPress(ジョグ押下)
	...
	Case 6	'-- JogRelease(ジョグを離す)
	...
	Case 7	'-- BackButton(Backボタン押下)
	...
end select
EndIf

注意事項

ClieのJogDialに関しては、OS5以降であればJOGアシストが有効になっていますので、JogPress、JogPressRepeat、JogRelease以外は受け付けません。
これは、OS4以前でもJOGアシストが有効になっていても同じです。
JOGアシストが有効なときは、JogUp=上ボタン、JogDown=下ボタンのイベントが返ってきます。またJogPageUp、JogPageDownに関してはイベントが発生しません。
またJOGの押し込みでの処理は、経験上JogPressイベントで処理するのではなく、JogReleaseで処理をした方がいいです。
これはJogPressRepeatなど、他のJog押し込みで発生するイベントと区別するためです。

5Way NavigatorはOS5.4以降とOS5.2以前でコードや挙動が違います。
OS5.4以降では、他のキーイベントと同様に扱えますが、GetKey()のみでの判別は、一部の英文字や記号文字が入力された場合と区別が付きませんので、sysinfo(9)と併用で判別します。

OS5.2以前では5WayLeft、5WayRight、5WayCenterのイベントが、キーを押している間、高速でリピートがかかった状態で発生します。
1回の押し込みで1回のイベント処理をしたいのであれば、キーの押し込みでイベントコードを変数に記憶させ、5Way Button Releaseイベントで処理を行うのが良いでしょう。

Tungsten|T3、T5、T|X等のPalm社製ワイドハイレゾデバイスで、ホームボタンなどGraffitiエリア上のボタンのイベントを拾えなくなる事がある。
DIA上のボタンは、通常どおりのnsbKeyOrButtonタイプのイベントが発生する直前に、Palm5Wayタイプのイベントが発生するので、そちらで処理してやるとよい。
ただし、nsbKeyOrButtonも連続して発生するので、SetEventHandled命令を挿入し、多重処理を回避してやる必要がある。

コメント

このページの情報に関する誤りや追加情報がありましたら、コメントをお願いします。

お名前: コメント:


表示された文字列