Unicodeいろいろ
Unicodeいろいろ
#include "user32.as"
#include "gdi32.as"
#define DT_WORDBREAK 0x00000010
#define DT_EDITCONTROL 0x00002000
// http://hsp.tv/play/pforum.php?mode=pastwch&num=41339
#define WS_CHILD $40000000
#define WS_VISIBLE $10000000
#define WS_BORDER $800000
#define WS_TABSTOP $10000
#define ES_AUTOHSCROLL $80
#define STYLE WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_AUTOHSCROLL
#define UNKNOWN $200 ; HSPのインプットボックスに設定されていたEXスタイルの値
#define WM_SETFONT 0x0030
// オブジェクト生成
// フォントをメイリオにしておく
font "メイリオ", 18, 16 : objmode 2, 1
pos 0, 0
// inputを使うと不具合があるので、winobjをつかう
;sdim dummy
;input dummy, 640, 34 : objid_input = stat : hobj_input = objinfo(objid_input, 2)
objsize 640, 34
winobj "Edit", "", UNKNOWN, STYLE : objid_input = stat : hobj_input = objinfo(objid_input, 2)
// winobjで作成したオブジェクトのフォントを指定する(後で開放が必要)
mref BMSCR, 67
CreateFontIndirect varptr(BMSCR(49))
hFont = stat
sendmsg hobj_input, WM_SETFONT, hFont, 1
// 残りを描画
objsize 320, 34
button gosub "文字列をセット(その1)", *s1
button gosub "文字列をセット(その2)", *s2
button gosub "文字列の取得(その1)", *s3
button gosub "文字列の取得(その2)", *s4
onexit gosub *exit
stop
*s1
// 文字をinputにセットする(objprmとかは使用しない)
string.0 = 0x0bf50bf5,0x0bf50bf5,0x0bf50bf5,0x0bf50bf5,0x0bf50bf5,0x0bf50bf5
string.6 = 0x0bf50bf5,0x0bf50bf5,0x0bf50bf5,0x0bf50bf5,0x0bf50bf5,0x0bf50bf5
string.12 = 0
// 反映
SetWindowTextW hobj_input, varptr(string)
return
*s2
// 文字をinputにセットする(objprmとかは使用しない)
sdim s
cnvstow s, "文字列を代入したよ♪"
// 反映
SetWindowTextW hobj_input, varptr(s)
return
*s3
// 文字列を取得して描画してみる
sdim uni_word, 1024*2 + 2
GetWindowTextW hobj_input, varptr(uni_word), 1024
// 真っ白に
color 255,255,255 : boxf : color
// 表示
rect = 0, 200, 640, 480
DrawTextW hdc, varptr(uni_word), -1, varptr(rect), DT_WORDBREAK | DT_EDITCONTROL
redraw
return
*s4
// 0xXXXX の形式で取得する
sdim uni_word, 1024*2 + 2
GetWindowTextW hobj_input, varptr(uni_word), 1024
num = stat
if num == 0 : dialog "失敗したとか?何も代入されていないとか?" : return
// 0xXXXX に変換する
sdim sf
repeat num
sf += strf("0x%04X ", wpeek(uni_word, cnt*2))
loop
sf += "\n↑Unicode(UTF-16)"
// 真っ白に
color 255,255,255 : boxf : color
// 表示
rect = 0, 200, 640, 480
DrawTextA hdc, varptr(sf), -1, varptr(rect), DT_WORDBREAK | DT_EDITCONTROL
redraw
return
*exit
// 終了時に削除
DeleteObject hFont
end
return