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