Unicode表示

解決


Take4  2004-04-28 12:27:37  No: 83210  IP: [192.*.*.*]

VB初心者なので、単語などおかしなところが
あるかもしれません。(^-^;;

VB6.0標準コントロールで使えるテキストボックスに
ついてですが、UniCodeで処理をして、
ANSIに自動変換されてから出力されると言う
説明文がありました。

このUnicode>ANSIの自動変換処理の部分を
しないようにできないでしょうか?

よろしくお願いします。

編集 削除
魔界の仮面弁士  2004-04-28 12:55:53  No: 83211  IP: [192.*.*.*]

> このUnicode>ANSIの自動変換処理の部分を
> しないようにできないでしょうか?

VBの機能(Textプロパティとか)を使わず、
API(SendMessageA関数 + WM_GETTEXT/WM_SETTEXTとか)だけで
操作するようにすれば、ANSI形式のまま操作できますよ。

編集 削除
Take4  2004-04-28 13:58:21  No: 83212  IP: [192.*.*.*]

魔界の仮面弁士さん、レスありがとうございます。

せっかくレスを頂いたのですが、一部訂正します。(^-^;;

> このUnicode>ANSIの自動変換処理の部分を
> しないようにできないでしょうか?
自動変換をさせず、Unicodeで表示すると訂正いたします。

>VBの機能(Textプロパティとか)を使わず、
>API(SendMessageA関数 + WM_GETTEXT/WM_SETTEXTとか)だけで
>操作するようにすれば、ANSI形式のまま操作できますよ。
ということは、この操作を行えばUnicode形式での表示も
可能になるのでしょうか?
もし可能になるのであれば、それらの関数についての
説明が載っている参考書やURLなどを教えていただけないでしょうか?

よろしくお願いします。

編集 削除
魔界の仮面弁士  2004-04-28 14:44:43  No: 83213  IP: [192.*.*.*]

VB6の標準コントロールは Unicodeに対応していませんので、どうやっても「Unicodeのまま」というのは無理です。
(そもそもWin9X系では、Unicode版コントロールがサポートされていませんし)

Unicodeのまま取り扱いたいのであれば、WebBrowserのような
「Unicode対応版のActiveXコントロール」を使うか、もしくは、
NT系限定ですが「APIでUnicode版EditBoxを作成する」事になるかと。

# なお、APIでコントロールを作成した場合は、イベント処理や
# プロパティなどの操作も、すべてAPIで処理するという事を意味します。


ちなみに、VB.NETのTextBoxはUnicodeに対応していますので、
これを機に .NETに移行すると言うのも、一つの手かと。

編集 削除
Take4  2004-04-28 15:11:26  No: 83214  IP: [192.*.*.*]

魔界の仮面弁士さん、レスありがとうございます。

VB.NETへの移行は考えましたが、
何分今回の開発に関しては時間がない為、
多少は使い慣れているVB6.0で継続開発と
いう選択をせざるを得ませんでした。(T_T

>NT系限定ですが「APIでUnicode版EditBoxを作成する」事になるかと。
Win2K用を開発しておりますので、この手法に関して
もう少々お教えいただけますでしょうか?

よろしくお願いします。

編集 削除
Take4  2004-04-28 15:43:31  No: 83215  IP: [192.*.*.*]

>魔界の仮面弁士さん
WebBrowserについて調べていたところ、
ここの過去ログにこの記事を発見いたしました。
http://madia.world.coocan.jp/cgi-bin/VBBBS/wwwlng.cgi?print+200306/03060029.txt

こちらに書かれている魔界の仮面弁士さんが
UserControl化したTextBoxを、誠に勝手ながら
使用させていただきました。申し訳ありません。

申し訳ないついでに、もう一つだけ質問させてください。

このTextBoxを使ったところ、Textに変化があった時
何か処理をさせるということができませんでした。
標準テキストボックスにあるTextbox_changeのような
イベントを起こさせたいのですが、
どうしたらよいのでしょうか?

よろしくお願いします。
(魔界の仮面弁士さんの作ったUserControlの使用に
  問題がありましたら、すぐに使用を中止いたします。)

編集 削除
魔界の仮面弁士  2004-04-28 16:58:37  No: 83216  IP: [192.*.*.*]

表示だけならTextOutW APIで行えますけど、入力も必要な場合は、VB6だと面倒ですね。

> VB.NETへの移行は考えましたが、
あとは、Office VBAで開発するとか…。
最近のExcelやWordやAccessでは、Unicode文字の入力が可能ですし。

> Win2K用を開発しておりますので、
ちなみに、9X系でUnicodeの入力が必要なら、riched20.dllのリッチエディットv2.0を利用できます。これも、API(CreateWindow等)で生成する必要がありますけどね。

> UserControl化したTextBoxを、誠に勝手ながら
それを使うのは構いませんけど、サンプル程度に作った物なので、
エラー制御の不足やバグなどの問題もあると思いますよ。
自己責任で使ってくださいね。(^^;

> 標準テキストボックスにあるTextbox_changeのような
> イベントを起こさせたいのですが、
テキストの変更時には、onchangeイベントが発生するのですが、
このイベントは、VBのChangeイベントとは動作条件が異なります。

VBのTextBox_Changeは「入力されるたびに」発生しますが、HTMLのonchangeは、
「編集後、フォーカスが移動した時」に発生する仕様なのです。

Changeと完全に同じにはできませんが、さしあたって
  onkeypress イベント(キー入力時に発生)
  onpaste イベント(クリップボードからの貼り付け時に発生)
などを利用すれば、それに近い事はできるかも知れません。

編集 削除
Take4  2004-04-29 01:09:58  No: 83217  IP: [192.*.*.*]

魔界の仮面弁士さん、レスありがとうございます。

>Office VBAで開発
なるほど・・・そちらならいけるかも?
検討させていただきます。

>自己責任で
当然そうさせていただきます。
さすがに勝手に使って文句は言えませんし。(^-^;
コードを見ながら勉強させていただきます。

>VBのChangeイベント
なるほど。
そこら辺を細工して見ることにします。

Unicodeによる表示と言う目的は達成できましたので、
これで解決とさせていただきます。
質問に丁寧に答えてくださった魔界の仮面弁士さん、
本当にありがとうございました。

またどうしても判らないことがありましたら、
ここを利用させていただきますので、
そのときはまたよろしくお願いします。(^-^

編集 削除