|
|
|
2008/2/27(Wed) 00:28:29|NO.13777
どうも、はじめまして。
HSPで小物をチマチマと作っているのですが、先日フランス語と英語に翻訳したいとメールが来たんです。
英語のほうはどうにかなったのですが、問題はフランス語です。
HSP内部がSHIFT-JISで動作している為、そのままフランス語をいれても文字化けを起こしてしまいます。
cnvwtos関数はUnicodeからShift-Jisに変えるだけ(?)なので、フランス語特有のアクセント文字が消えてしまいます。
HSPはResHackerなどで書き換えができないし、困ってしまいました。
Unicodeで保存したフランス語をHSPにWin32APIで読み込んでみた例。
(※本来はUnicodeで書かれたINIファイルを読み書きしたかったんですが・・・)
#uselib "user32.dll"
#define global CreateWindowEx CreateWindowExW
#func global CreateWindowEx "CreateWindowExW" wptr,wptr,wptr,wptr,wptr,wptr,wptr,wptr,wptr,wptr,wptr,wptr
bload "language.txt",text,-1,0
CreateWindowEx 0, "Edit" ,text,$40000000 | $10000000 | $00800000 | $00000004 |$00080000, 0, 0, 640, 480, hwnd, 0, hinstance, NULL
以上のままですと正しく表示されませんが、
直接文字をエディトボックスに貼り付けてあげると
フランス語のアクセント文字まで正しく表示できました。(ハングル文字も張り付きました。)
文字列変数がSHIFT-JISで処理してしまっているのが原因と考えているのですが・・・
試してみたOS:Windows 2000-Pro,XP-Pro,Vista-HomePre
フランス語のアクセント文字は
http://translation.infoseek.co.jp/?ac=text&lng=fr
で翻訳した結果をコピーしてUnicodeで保存しました。
残念ながらこちらの掲示板はEUC-JPのようなので貼り付けできませんでした。
ご意見をよろしくお願いいたします。
|
|
2008/2/28(Thu) 00:46:54|NO.13792
CreateWindowで作った後、フォントを設定してやったら表示されたよ。
#include "user32.as"
#include "gdi32.as"
#const WM_SETFONT 0x0030
text = $30933053, $3061306B, $000D306F, $4F60000A, $000D597D, $C548000A, $D558B155, $C694C138, $000A000D, $26632660, $26662665, $000A000D, $0000
CreateWindowExW 0, "Edit", varptr(text), $40000000 | $10000000 | $00800000 | $00000004, 0, 0, 640, 480, hwnd, 0, hinstance, 0
hwnd_edit = stat
bkup = ginfo_sel
buffer 100,1,1
font msgothic, 16
mref BMSCR, 67
CreateFontIndirect varptr(BMSCR(49))
hFont = stat
gsel bkup
SendMessageW hwnd_edit, WM_SETFONT, hFont, 1
mesboxに、WM_SETTEXTでもいける。
#include "user32.as"
#const WM_SETTEXT 0x000C
buf = ""
mesbox buf, 400,300, 5, 0
hwnd_edit = objinfo_hwnd(stat)
text = $30933053, $3061306B, $000D306F, $4F60000A, $000D597D, $C548000A, $D558B155, $C694C138, $000A000D, $26632660, $26662665, $000A000D, $0000
SendMessageW hwnd_edit, WM_SETTEXT, 0, varptr(text)
|
|
2008/2/28(Thu) 00:49:00|NO.13793
#uselib "user32.dll"
#func global CreateWindowExW "CreateWindowExW" wptr,wptr,wptr,wptr,wptr,wptr,wptr,wptr,wptr,wptr,wptr,wptr
file="language.txt"
exist file: flen=strsize
sdim vtext,flen+2
bload file,vtext;,-1,0
CreateWindowExW 0, "Edit" ,varptr(vtext),$40000000 | $10000000 | $00800000 | $00000004 |$00080000, 0, 0, 640, 480, hwnd, 0, hinstance, NULL
stop
|
|
2008/2/28(Thu) 20:08:57|NO.13807
皆様どうもありがとう御座いました。無事にUnicodeを扱うことができました。
一応、Unicodeで保存したテキストファイルから読みこむスクリプトを置いておきます。
もしかしたら、他の人が使ってくれるかもしれませんので。
#include "user32.as"
#include "gdi32.as"
#const WM_SETFONT 0x0030
file="language.ini"//ファイル指定
//text = $30933053, $3061306B, $000D306F, $4F60000A, $000D597D, $C548000A, $D558B155, $C694C138, $000A000D, $26632660, $26662665, $000A000D, $0000
exist file
sdim load,strsize
load=""
bload file,load,-1,0
repeat strsize/4
if cnt\50=0:title ""+cnt+"/"+strsize/4
text(cnt) = lpeek(load,cnt*4)
if cnt+1=strsize/4:title ""+strsize/4+"/"+strsize/4
loop
CreateWindowExW 0, "Edit", varptr(text), $40000000 | $10000000 | $00800000 | $00000004 |$00200000, 0, 0, 640, 480, hwnd, 0, hinstance, 0
hwnd_edit = stat
bkup = ginfo_sel
buffer 100,1,1
font msgothic, 16
mref BMSCR, 67
CreateFontIndirect varptr(BMSCR(49))
hFont = stat
gsel bkup
SendMessageW hwnd_edit, WM_SETFONT, hFont, 1
|
|
2008/2/28(Thu) 21:26:31|NO.13810
CreateFontIndirectの戻り値(ここではhFont)を終了時にでも
DeleteObjectしといてくださいー。
|
|
2008/2/28(Thu) 23:06:01|NO.13814
こんな感じでよろしいのでしょうか?
オブジェクトを終了時に開放するのは初めて知りました。
onexit goto *e
#include "user32.as"
#include "gdi32.as"
#const WM_SETFONT 0x0030
file="language.ini"//ファイル名
//text = $30933053, $3061306B, $000D306F, $4F60000A, $000D597D, $C548000A, $D558B155, $C694C138, $000A000D, $26632660, $26662665, $000A000D, $0000
exist file
sdim load,strsize
load=""
bload file,load,-1,0
repeat strsize/4
if cnt\100=0:title ""+cnt+"/"+strsize/4
text(cnt) = lpeek(load,cnt*4)
if cnt+1=strsize/4:title ""+strsize/4+"/"+strsize/4
loop
CreateWindowExW 0, "Edit", varptr(text), $40000000 | $10000000 | $00800000 | $00000004 |$00200000, 0, 0, 640, 480, hwnd, 0, hinstance, 0
hwnd_edit = stat
bkup = ginfo_sel
buffer 100,1,1
font msgothic, 16
mref BMSCR, 67
CreateFontIndirect varptr(BMSCR(49))
hFont = stat
gsel bkup
SendMessageW hwnd_edit, WM_SETFONT, hFont, 1
stop
*e
DeleteObject hFont
end
|
|
2008/2/29(Fri) 21:02:30|NO.13834
|
|