こんな時どうする?
[Japanese Pocket C User's Page]-[Tips!]
ここでは、マニュアルには書かれていないけど、知っているといざってとき便利な使い方をまとめます。
「PocketC先輩プログラマryoさんのワンポイントTips」と改名した方がいいのかも・・・
メニューアイテム中の文字の前に「&」をつけると、下線が引かれ、ショートカットが利くようになります。
例)menuins(0, 0, 0x0, 100, "&Open");
sendmsgを利用すれば、クリップボードへのコピー、ペーストは出来るようです。
・次の宣言をはじめにしておく(windefs.hに記載されているため、PCFormを使っていれば不要)
#define EM_SETSEL 0xB1
#WM_COPY 0x0301
#WM_PASTE 0c0303
・これでコピー。
sendmsg(CTL_TXT_BOX, EM_SETSEL, 0, -1);
sendmsg(CTL_TXT_BOX, WM_COPY, 0, 0);
・これでペースト
sendmsg(CTL_TXT_BOX,WM_PASTE,0,0);
なお、sendmsgの一つ目の引数は、コントロールIDです。
PCFormを使うと"CTL_[コントロール名]"
という名前でdefineしてくれます。
PocketCはunicodeを採用していますが、実際に利用するファイルはS-JISで書きたい事が多いです。
そのために、filewrite関数があるのですが、現行Verではバグがあるようです。
文字数で書き込む「最大長」を指定できることになっていますが、
文字列長と指定最大長の「どちらか短い方」の数値を、
バイト数として使用しているからです。
・例1
filewrite(file_id, "1234", 4);
→バイト数のほうが短いので、結果は"12"
・例2
filewrite(file_id, "abcdあい", 6*2);
→半角は1バイトのため、文字列長のほうが短く、結果は"abcdあ"
・対策
filewrite(file_id, "abcdあいxx", 8);
→余分な1バイト文字を追加した上で、書き込みたいバイト数を指定する