HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
0227
inoviaHSPでUnicodeを扱うには?6解決


inovia

リンク

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のようなので貼り付けできませんでした。

ご意見をよろしくお願いいたします。



この記事に返信する


a

リンク

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)



ANTARES

リンク

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



inovia

リンク

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



Kpan

リンク

2008/2/28(Thu) 21:26:31|NO.13810

CreateFontIndirectの戻り値(ここではhFont)を終了時にでも
DeleteObjectしといてくださいー。



inovia

リンク

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



Kpan

リンク

2008/2/29(Fri) 21:02:30|NO.13834

OKですー。

http://msdn.microsoft.com/library/ja/jpgdi/html/_win32_createfontindirect.asp
>フォントが不要になったら、〜



ONION software Copyright 1997-2023(c) All rights reserved.