[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2006/03/27(Mon) 18:53
投稿者名:風見鶏
Eメール:
URL :
タイトル:
MS−WORDのようなフォント強制設定
こんにちは。

環境はVB6(SP6)、Win2KまたはXPです。

リッチテキストボックスのフォント属性設定用に、あるコンボボックスにフォント名を
一覧表示した中から設定させるプログラムを作成しています。

そこでリッチテキスト内に日本語(全角、半角カナ)が入力された場合、コンボボックスの
フォント名が日本語フォント(MSゴシックやMS明朝等)でなかった場合、MS−WORD
のように強制的にリッチテキストのフォントおよびコンボボックスのフォント名の内容を
”MSゴシック”に切り替えたいと思っております。

そのようなことが可能でしょうか?
もしご存知の方がいらっしゃいましたらご教授頂きたいと思います。
よろしくお願い致します。

投稿時間:2006/03/28(Tue) 12:15
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: MS−WORDのようなフォント強制設定
IF 文等を使ってそのようなコードを書けばいいのでは。?
又は、最初から日本語フォントだけをコンボボックスに表示しておくとか。
標準でほぼ同様の動きをするようですが....。

Private Sub Command1_Click()
    With RichTextBox1
        Debug.Print .SelFontName
        .SelFontName = "Raavi"
        Debug.Print .SelFontName
        If .SelFontName <> "Raavi" Then
            .SelFontName = "MS ゴシック"
        End If
        Debug.Print .SelFontName
    End With
End Sub

というより何が解らないのでしょうか?

投稿時間:2006/03/28(Tue) 15:23
投稿者名:風見鶏
Eメール:
URL :
タイトル:
Re^2: MS−WORDのようなフォント強制設定
花ちゃんさん、回答ありがとうございます。

説明不足な感じで申し訳ありません。
プログラムのリッチテキストボックスの属性はユーザーがフォント以外にもテキストの文字色や
背景色も設定できるような形になっているのです。

> 又は、最初から日本語フォントだけをコンボボックスに表示しておくとか。

日本以外、中国や英語圏等でもこのプログラムは使用されるため、日本語フォント以外も
使用できるようにしておかないといけないのです。
フォントについては以下のような形でコンボに登録しています。

For i = 0 To Screen.FontCount - 1
    If Mid$(Screen.Fonts(i), 1, 1) <> "@" Then
    Call Combo1.AddItem(Screen.Fonts(i))
    End If
Next i

で、何がわからないのか?ということですが、いろいろ試してみた中で出てきた質問としては

@Combo1.Textの内容が日本語フォントなのか?それとも日本語フォント以外なのかの判別方法
 ・Shift-JIS(Charset128)で判別だと、MSゴシックやMS明朝が除かれてしまい
  困ってしまいました。
  日本語が表示できるフォントは全て日本語フォントとしたいと思っております。

Aリッチテキストボックスへ入力時(RichTextBox1_Changeイベント)、日本語(全角および半角カナ)
 が入力されたかどうかの判別
 ・全角が入力されたかという判別についてはネット上で検索してこれたのですが、半角カナが入力
  されたと判断するには、どうしたらよいでしょうか?

Bリッチテキストボックスに入力されているテキストおよび文字色、背景色は現在表示されている
 ままの形でフォント属性のみを変更することが出来るでしょうか?

以上たくさん書いてしまい恐縮する次第ですが、どうしたらよいでしょうか?
よろしくお願いいたします。

投稿時間:2006/03/28(Tue) 16:12
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: MS−WORDのようなフォント強制設定
質問1.私が試した限りでは問題なく日本語のフォントと思われるものは全て列挙できました。
但し、取得には、高速に取得するために、Win32APIのEnumFontFamiliesExを使っております。

質問2.
逆にお聞きしますが、英数の場合はどうするのですか? 日本語と中国語は?
フォントの設定はどのような場面でするのですか? 選択文字に対して?
RichTextBox のデフォルトの設定ですか?
通常に文字を入力している場合は、RichTextBox のデフォルトの設定でのフォントとなり
ますよね。

どの言語を使っているかは、IME やキーボードの方で調べた方がいいように思うのですが。
状況がよく解りませんので、パス

質問3.
変更しなければ余計なものまで変らないですよね。 どこか変るのでしょうか?

日本語を入力した範囲を選択して下記を実行して見て下さい。
指定文字に対してサポートしていないフォントには変更できませんし、指定外は変更されないし
太字・カラー等は指定すれば変更できますよね。

    With RichTextBox1
        Debug.Print .SelFontName
        .SelFontName = "Raavi"
        Debug.Print .SelFontName
    End With

投稿時間:2006/03/28(Tue) 17:51
投稿者名:風見鶏
Eメール:
URL :
タイトル:
Re^4: MS−WORDのようなフォント強制設定
花ちゃんさん、ありがとうございます。

> 質問1.私が試した限りでは問題なく日本語のフォントと思われるものは全て列挙できました。
> 但し、取得には、高速に取得するために、Win32APIのEnumFontFamiliesExを使っております。

ネットで調べてみましたがEnumFontFamiliesExの使い方がいまいちよくわかりませんでした。
どうやってこのAPIを使うのでしょうか?

> 質問2.
> 逆にお聞きしますが、英数の場合はどうするのですか?

英数だった場合にはそのまま現在指定されているフォントを使用することにします。

> 日本語と中国語は?

APIのGetUserDefaultLCIDを使用してロケールのコードを取得しようと思います。
で、日本だった場合には”MS Pゴシック”を中国だったら 繁体字または簡体字の
フォントを設定するようにしようと思います。

> フォントの設定はどのような場面でするのですか? 選択文字に対して?

あるディスプレイに入力したテキストを表示させるのですが、ユーザーにそのテキストに対して
表示させたいフォントを設定してもらう際に選択させたいと思っています。


> RichTextBox のデフォルトの設定ですか?
> 通常に文字を入力している場合は、RichTextBox のデフォルトの設定でのフォントとなり
> ますよね。

いえ、デフォルト設定ではなく、こちらで事前にフォント、文字色、背景色を指定しております。
フォントのコンボ以外にも文字色や背景色を設定しているコントロールが別にあります。

> どの言語を使っているかは、IME やキーボードの方で調べた方がいいように思うのですが。
> 状況がよく解りませんので、パス

とりあえずロケールでなんとかなるかと思っておりますが・・・。

> 質問3.
> 変更しなければ余計なものまで変らないですよね。 どこか変るのでしょうか?

確かにRichTextBox1.SelFontNameでフォントを変えるのですが、指定している場所が悪いせいか
(RichTextBox1_Changeイベント)なぜか文字色まで変わってしまっているのです。
(変わった文字色は多分リッチテキストのデフォルト色だと・・・。フォント自身は変わって
 いるように思われますが・・・)
試しているソースをそのままお出し出来ないのでこちらに関してはもう少し自分で考えてみます。

投稿時間:2006/03/28(Tue) 18:34
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^5: MS−WORDのようなフォント強制設定
> ネットで調べてみましたがEnumFontFamiliesExの使い方がいまいちよくわかりませんでした。
> どうやってこのAPIを使うのでしょうか?

ここの[当サイト内・外の検索]から[EnumFontFamiliesEx VB]をキーワードにGoogle等で
検索して見て下さい。

hhttp://tinyurl.com/mbruq 他、サンプルが色々見つかりますが。

投稿時間:2006/03/30(Thu) 11:49
投稿者名:風見鶏
Eメール:
URL :
タイトル:
Re^6: MS−WORDのようなフォント強制設定
先日の夜から不覚にも風邪をひいてしまい、回答が遅くなってしまいました。
申し訳ありません。m(_ _)m

> ここの[当サイト内・外の検索]から[EnumFontFamiliesEx VB]をキーワードにGoogle等で
> 検索して見て下さい。
>
> hhttp://tinyurl.com/mbruq 他、サンプルが色々見つかりますが。

サンプルを見つけることが出来たので動作させてみました。
サンプルなのでこのままでは日本語フォントのみを取得してこれませんでした。
(海外サイトだったので書いてある内容まではよく理解しておりません・・・)

具体的に何を変更すれば日本語が使用できるフォントのみを取得できるでしょうか?

質問ばかりでごめんなさい。

投稿時間:2006/03/30(Thu) 04:00
投稿者名:Starfish
Eメール:
URL :
タイトル:
Re^3: MS−WORDのようなフォント強制設定
> (2)リッチテキストボックスへ入力時(RichTextBox1_Changeイベント)、日本語(全角および半角カ
ナ)
>  が入力されたかどうかの判別
>  ・全角が入力されたかという判別についてはネット上で検索してこれたのですが、半角カナが入力
>   されたと判断するには、どうしたらよいでしょうか?

 日本語は、&H80以上かで見ればいいのでは。"\"のフォントが日本語の
フォントは円マークですが、あちらのフォントはバックスラッシュです
このあたりも対応が必要かも。

Option Explicit
Dim mlngSelStart    As Long
Dim mlngSelStart2   As Long

Private Sub RichTextBox1_Change()
Dim i               As Long
Dim lngSelStart     As Long
Dim lngSelStart2    As Long

    lngSelStart = RichTextBox1.SelStart
    lngSelStart2 = mlngSelStart2
    If mlngSelStart2 < lngSelStart Then
        For i = lngSelStart2 To lngSelStart - 1
            RichTextBox1.SelStart = i
            RichTextBox1.SelLength = 1
            If RichTextBox1.SelText <> "" Then
                If Asc(RichTextBox1.SelText) < &H80 And Asc(RichTextBox1.SelText) <> &H5C
Then
                    RichTextBox1.SelFontName = "Arial Black"
                Else
                    RichTextBox1.SelFontName = "MS Pゴシック"
                End If
            End If
        Next
        RichTextBox1.SelStart = lngSelStart
    End If

End Sub

Private Sub RichTextBox1_SelChange()
    
    mlngSelStart2 = mlngSelStart
    mlngSelStart = RichTextBox1.SelStart
    
End Sub

投稿時間:2006/03/30(Thu) 12:05
投稿者名:風見鶏
Eメール:
URL :
タイトル:
Re^4: MS−WORDのようなフォント強制設定
Starfishさん、回答ありがとうございます。

>  日本語は、&H80以上かで見ればいいのでは。"\"のフォントが日本語の
> フォントは円マークですが、あちらのフォントはバックスラッシュです
> このあたりも対応が必要かも。

記述していただいたコードで、リッチテキストに”あ”を入力して、ブレークさせて
ステップごとに動作させてみましたが、

If Asc(RichTextBox1.SelText) < &H80 And Asc(RichTextBox1.SelText) <> &H5C Th
en

にてElse側の処理に移らなかったので、

If AscB(RichTextBox1.SelText) < &H80 And AscB(RichTextBox1.SelText) <> &H5C
Then

Asc関数をAscB関数に変更して動作しました。
これだとElse側の処理に移りましたが、問題ないでしょうか?

このコードでいろいろ試してみたいと思います。

投稿時間:2006/03/30(Thu) 14:41
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^5: MS−WORDのようなフォント強制設定
下記にしばらくの間、サンプルをUPしておきますので参考にして下さい。
hhttp://www.bcap.co.jp/hanafusa/VBHLP/font01.htm

尚、下記等も参考になるかと。
hhttp://www.vbapihelpline.de/ref/funca.php4?Func=EnumFonts&Letter=e

投稿時間:2006/03/30(Thu) 19:06
投稿者名:風見鶏
Eメール:
URL :
タイトル:
Re^6: MS−WORDのようなフォント強制設定
> 下記にしばらくの間、サンプルをUPしておきますので参考にして下さい。
> hhttp://www.bcap.co.jp/hanafusa/VBHLP/font01.htm
>
> 尚、下記等も参考になるかと。
> hhttp://www.vbapihelpline.de/ref/funca.php4?Func=EnumFonts&Letter=e

花ちゃんさん ありがとうございます。
日本語フォントのみ取得することができました。

投稿時間:2006/03/30(Thu) 18:26
投稿者名:Starfish
Eメール:
URL :
タイトル:
Re^5: MS−WORDのようなフォント強制設定
> Asc関数をAscB関数に変更して動作しました。
> これだとElse側の処理に移りましたが、問題ないでしょうか?

 すみません。ミスってました。以下のようにしてください。

If Asc(RichTextBox1.SelText) > 0 And Asc(RichTextBox1.SelText) < &H80 And Asc
(RichTextBox1.SelText) <> &H5C Then

投稿時間:2006/03/30(Thu) 19:08
投稿者名:風見鶏
Eメール:
URL :
タイトル:
Re^6: MS−WORDのようなフォント強制設定
>  すみません。ミスってました。以下のようにしてください。
>
> If Asc(RichTextBox1.SelText) > 0 And Asc(RichTextBox1.SelText) < &H80 And Asc
> (RichTextBox1.SelText) <> &H5C Then

Starfishさん 回答ありがとうございます。
こちらのIf文で試してみます。

投稿時間:2006/03/31(Fri) 15:02
投稿者名:風見鶏
Eメール:
URL :
タイトル:
Re^7: MS−WORDのようなフォント強制設定
花ちゃんさん、Starfishさんのおかげで無事思い通りの動作が出来るようになりました。

あらためてお礼申し上げます。