RichTextBox コントロールの自動的 なフォントの変更

閲覧: 96 回
最初の未読メッセージにスキップ

YSP

未読、
2003/06/03 5:10:202003/06/03
To:
実行中の RichTextBox コントロールにユーザーが、
"ABC"など英語を入力した場合に自動的にフォントが
[Arial]に変わっている場合があります。
このような自動的なフォントの変更がないようにで
きないでしょうか?

Shin-ichi Ueta

未読、
2003/06/10 3:19:312003/06/10
To:
こんにちは、植田です。

EM_GETLANGOPTIONS/EM_SETLANGOPTIONSメッセージで
IMF_AUTOFONTまたはIMF_DUALFONTをクリアしてやると件の
現象は抑制できるようです。
.NETのクラスライブラリにはこれを直接サポートしたプロパティや
メソッドが見当たらないようなので、直接メッセージを送ってやる
しかないのかな?

--
植田システム設計事務所
Ueta System Design Studio
http://www1.odn.ne.jp/usdesign/
植田真一
usde...@par.odn.ne.jp

YSP

未読、
2003/06/14 5:49:542003/06/14
To:
.NETのクラスライブラリがサポートしているメンバ以外の方法は知識がありません
(^_^;)
できればもう少し詳しく教えていただければ嬉しいのですが...

"Shin-ichi Ueta" <usde...@par.odn.ne.jp> wrote in message
news:%23WdQmCy...@TK2MSFTNGP11.phx.gbl...

Shin-ichi Ueta

未読、
2003/06/14 6:12:132003/06/14
To:
どうも、植田です。

YSP wrote:
> .NETのクラスライブラリがサポートしているメンバ以外の方法は知識がありません
> (^_^;)
> できればもう少し詳しく教えていただければ嬉しいのですが...

それは困りましたね...^^;)

要はAPIのSendMessage()でRichEditコントロールに
直接メッセージを送って制御してやるわけです。
あいにく私はまだ.NETに手を出していないので、それ以上の
ことはよく分かりません。

クラスライブラリからコントロールのウィンドウハンドルは取得
できるはずですから、あとはいかにしてAPIを呼び出すかが
問題になろうかと思います。

SDKレベルのコードだと、たとえばこんな感じです。

HWND hwndRichEdit;

DWORD dwLangOptions = SendMessage(hwndRichEdit, EM_GETLANGOPTIONS, 0, 0);
dwLangOptions &= ~IMF_DUALFONT; // IMF_DUALFONTかIMF_AUTOFONTをクリア
SendMessage(hwndRichEdit, EM_SETLANGOPTIONS, 0, (LPARAM)dwLangOptions);

Fumiaki Yoshimatsu

未読、
2003/06/14 19:26:362003/06/14
To:
こんなクラスを作って、RichTextBoxの代わりに使ってみては。
using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;

public class RichTextEx : RichTextBox {
private const uint IMF_DUALFONT = 0x0080;
private const uint WM_USER = 0x0400;
private const uint EM_SETLANGOPTIONS = (WM_USER + 120);
private const uint EM_GETLANGOPTIONS = (WM_USER + 121);

[DllImport("user32.dll", EntryPoint = "SendMessageA")]
private static extern uint SendMessage(IntPtr hWnd, uint wMsg, uint
wParam, uint lParam);

public RichTextEx() {
uint dwLangOptions = 0;
SendMessage(this.Handle, EM_GETLANGOPTIONS, 0, dwLangOptions);
dwLangOptions &= ~IMF_DUALFONT;
SendMessage(this.Handle, EM_SETLANGOPTIONS, 0, dwLangOptions);
}
}

Form1.cs
#region Windows フォーム デザイナで生成されたコード
/// <summary>
/// デザイナ サポートに必要なメソッドです。このメソッドの内容を
/// コード エディタで変更しないでください。
/// </summary>
private void InitializeComponent()
{
this.richTextBox1 = new RichTextEx();
...

吉松

Shin-ichi Ueta

未読、
2003/06/15 1:54:292003/06/15
To:
どうも、植田です。

Fumiaki Yoshimatsu wrote:
> こんなクラスを作って、RichTextBoxの代わりに使ってみては。

フォロー感謝です。

VS.NET2003を待ってたら、すっかり出遅れてしまった...^^;)

Shin-ichi Ueta

未読、
2003/06/15 2:02:322003/06/15
To:
どうも、植田です。度々すいません。

Fumiaki Yoshimatsu wrote:
> uint dwLangOptions = 0;
> SendMessage(this.Handle, EM_GETLANGOPTIONS, 0, dwLangOptions);
> dwLangOptions &= ~IMF_DUALFONT;
> SendMessage(this.Handle, EM_SETLANGOPTIONS, 0, dwLangOptions);

EM_GETLANGOPTIONSメッセージの場合は、
その戻り値をdwLangOptionsに代入します。

uint dwLangOptions =
   SendMessage(this.Handle, EM_GETLANGOPTIONS, 0, 0);

―― でいいのかな?

YSP

未読、
2003/06/15 5:35:392003/06/15
To:
色々ありがとうございました♪
みなさんに教えていただいた方法と、その辺を調べて試してみたいと思います。

全員に返信
投稿者に返信
転送
新着メール 0 件