こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VB6で、文字サイズを設定する関数

VB6で、文字サイズを設定する関数を作りたいと考えています。
変数の値の文字が、46文字以下ならフォントサイズ9、47文字以上なら6ポイントという感じ
にしたいと考えています。

アドバイスお願いします。

投稿日時 - 2011-05-16 16:51:26

QNo.6741959

すぐに回答ほしいです

質問者が選んだベストアンサー

>最後のpfm・・・で実際に設定しているかと思いますが

どこのフォントサイズを変えたいのだ?
No.4で示した回答はFGridのRow/Colで示されたセルのフォントサイズを設定するコードです。
基本的なことですがフォントサイズ指定はコントロール(オブジェクトなどを含む)に行うもので文字列に行うものではありません。
文字列データは単に文字コードの羅列でありフォントサイズなどの属性を持つことはできません。

pfm.CrObjects("frmName" & no).Text = FGrid.TextMatrix(ofs, clmfrmName)

上記コードでFGrid内の文字列をpfm.CrObjects("frmName" & no)にコピーしているようですがコピーできるのは文字列だけでフォントサイズなどの属性はコピーされません。
pfm.CrObjects("frmName" & no)のフォントサイズを変えたいのならpfm.CrObjects("frmName" & no)のプロパティーで値を変えてください。

投稿日時 - 2011-05-16 21:27:28

補足

最終的にこのpfm.CrObjects("frmAdr" & no)の文字サイズを変更しなければ
ならない状況です。
文字列はpfm.CrObjects("frmAdr" & no).Text = FGrid.TextMatrix(ofs, clmfrmAdr)
で取得しますが、その大きさの変え方がわかりかねていまして・・。

pfm.CrObjects("frmAdr" & no).Cellfontsize = 6などでは駄目なようで、やはり文字列に直接「.Cellfontsize 」をつけても仕方ないということでしょうか。

Fgridはオブジェクトなので.Cellfontsize で変えられるということでしょうか。

大変恐縮ですが、補足させていただきました・・。

投稿日時 - 2011-05-17 10:16:31

お礼

こちらについて解決しました。本当にありがとうございました。

投稿日時 - 2011-05-17 15:16:17

ANo.7

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(7)

ANo.6

ご参考まで・・・(机上で書いたので動作確認はしていません)

Private Sub Form_Load()
With frmSample.Fgrid
.Cols = 1
.Rows = 4
.FixedCols = 0
.FixedRows = 0

.Col = 0
.Row = 0
.Text = "123"
.CellFontSize = lngCalFontSize(.Text)

.Col = 0
.Row = 1
.Text = "1234"
.CellFontSize = lngCalFontSize(.Text)

.Col = 0
.Row = 2
.Text = "1234567"
.CellFontSize = lngCalFontSize(.Text)

.Col = 0
.Row = 3
.Text = "1234567890"
.CellFontSize = lngCalFontSize(.Text)

End With
End Sub

Private Function lngCalFontSize(strData As String) As Long
Dim lngStingLength As Long
lngStingLength = LenB(StrConv(strData, vbFromUnicode))
lngCalFontSize = 15
Select Case True
Case 3 < lngStingLength
lngCalFontSize = 12
Case 6 < lngStingLength
lngCalFontSize = 9
Case 9 < lngStingLength
lngCalFontSize = 6
End Select
End Function

投稿日時 - 2011-05-16 20:47:34

お礼

回答いただきありがとうございました。
ただいま、別回答者様にお教えいただいた方法を試しております。
それでもしできなかった際、検討させてください。
ありがとうございました。

投稿日時 - 2011-05-17 10:18:00

ANo.5

フォントサイズの変更方法が分からないのでしょうか?
それとも、文字列の長さからフォントサイズを算出する方法が分からないのでしょうか?

なお、Strconv関数は関数なので.fontsizeプロパティは持っていません。
これに値を設定しようとしてエラーのなるのは、至極当たり前の事です。

投稿日時 - 2011-05-16 18:51:08

お礼

基本的なところがわかっていないようで、勉強の必要を痛感しています・・。

投稿日時 - 2011-05-16 19:16:03

ANo.4

オブジェクト"FGrid"がMSFlexGridコントロールなら

>FGrid.TextMatrix(ofs, clmfrmAdr).fontsize=9
↓↓↓↓↓↓↓↓↓↓↓

FGrid.Row = ofs
FGrid.Col = clmfrmAdr
FGrid,CellFontSize = 9

投稿日時 - 2011-05-16 18:13:00

補足

大変ありがとうございました。
ただ、エラーは出ませんが、設定がやはりできないようです。

If LenB(StrConv(FGrid.TextMatrix(ofs, clmfrmName), vbFromUnicode)) <= 38 Then
FGrid.row = ofs
FGrid.Col = clmfrmName
FGrid.CellFontSize = 9
ElseIf 40 <= LenB(StrConv(FGrid.TextMatrix(ofs, clmfrmName), vbFromUnicode)) <= 116 Then
FGrid.row = ofs
FGrid.Col = clmfrmName
FGrid.CellFontSize = 6
End If

pfm.CrObjects("frmName" & no).Text = FGrid.TextMatrix(ofs, clmfrmName)

最後のpfm・・・で実際に設定しているかと思いますが、足りないでしょうか・・?

すいません、お時間ありましたら、お願いします。・・・

投稿日時 - 2011-05-16 19:42:14

ANo.3

フォントサイズの変更は、Font のプロパティを
変更するだけだから、関数なんか作らず、その
まま書いた方がいいと思います。

まぁ、文字数に応じたフォントサイズの閾値を
共通化する意味で、文字数を引数で渡してフォ
ントサイズが返ってくる関数はありかもしれない
けど、ただの数値処理の関数なので、難しい問題
は無いと思います。

投稿日時 - 2011-05-16 17:23:39

補足

別の回答者様への補足ですが、
LenBのところでは、LenBの()内で文字数を出してますが、()内の文字の大きさを変えたいという意味で
StrConv(FGrid.TextMatrix(ofs, clmfrmAdr), vbFromUnicode).fontsize=9

としていますが、これではなぜダメなのでしょう・・?

投稿日時 - 2011-05-16 17:57:11

ANo.2

話題にしているのは、何オブジェクトのフォントですか。VB6もオブジェクト指向なのに、それを書かないで質問するとは。
オブジェクト.Font.Size=XXなんてのが多いと思うが,、質問の力点はなに?
>フォントサイズ9、47文字以上なら6ポイントという感じ
こういう風にバラバラの単位で設定(考える)のですか。

投稿日時 - 2011-05-16 17:12:14

補足

If LenB(StrConv(FGrid.TextMatrix(ofs, clmfrmAdr), vbFromUnicode)) <= 92 Then

pfm.CrObjects("frmAdr" & no).Text = FGrid.TextMatrix(ofs, clmfrmAdr)

現在、LenB以下で文字数を取っています。then以下で文字の大きさを設定するつもりです。

StrConv(FGrid.TextMatrix(ofs, clmfrmAdr), vbFromUnicode).fontsize=9
としても「オブジェクトが必要です」
と言われ、

FGrid.TextMatrix(ofs, clmfrmAdr).fontsize=9
としても「修飾子が不正です。」
と言われます・・・。

投稿日時 - 2011-05-16 17:39:05

ANo.1

やりたい事は解りましたが質問はなんでしょうか?
文字列の文字数は LEN() 関数で調べられます、あとは IF分で分岐すればいいだけどけど.......

投稿日時 - 2011-05-16 17:09:04

補足

If LenB(StrConv(FGrid.TextMatrix(ofs, clmfrmAdr), vbFromUnicode)) <= 92 Then

pfm.CrObjects("frmAdr" & no).Text = FGrid.TextMatrix(ofs, clmfrmAdr)

現在、LenB以下で文字数を取っています。then以下で文字の大きさを設定するつもりです。

StrConv(FGrid.TextMatrix(ofs, clmfrmAdr), vbFromUnicode).fontsize=9
としても「オブジェクトが必要です」
と言われ、

FGrid.TextMatrix(ofs, clmfrmAdr).fontsize=9
としても「修飾子が不正です。」
と言われます・・・。

投稿日時 - 2011-05-16 17:39:26

あなたにオススメの質問