◆◇◆ Tips! ◆◇◆

こんな時どうする?

[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してくれます。


< ASCIIで書き込みたい >

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バイト文字を追加した上で、書き込みたいバイト数を指定する

 


[Japanese Pocket C User's Page]-[Tips!]