- ベストアンサー
VB6で、文字サイズを設定する関数
VB6で、文字サイズを設定する関数を作りたいと考えています。 変数の値の文字が、46文字以下ならフォントサイズ9、47文字以上なら6ポイントという感じ にしたいと考えています。 アドバイスお願いします。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
>最後の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)のプロパティーで値を変えてください。
その他の回答 (6)
- umekihajime
- ベストアンサー率23% (13/55)
ご参考まで・・・(机上で書いたので動作確認はしていません) 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
お礼
回答いただきありがとうございました。 ただいま、別回答者様にお教えいただいた方法を試しております。 それでもしできなかった際、検討させてください。 ありがとうございました。
- umekihajime
- ベストアンサー率23% (13/55)
フォントサイズの変更方法が分からないのでしょうか? それとも、文字列の長さからフォントサイズを算出する方法が分からないのでしょうか? なお、Strconv関数は関数なので.fontsizeプロパティは持っていません。 これに値を設定しようとしてエラーのなるのは、至極当たり前の事です。
お礼
基本的なところがわかっていないようで、勉強の必要を痛感しています・・。
- uruz
- ベストアンサー率49% (417/840)
オブジェクト"FGrid"がMSFlexGridコントロールなら >FGrid.TextMatrix(ofs, clmfrmAdr).fontsize=9 ↓↓↓↓↓↓↓↓↓↓↓ FGrid.Row = ofs FGrid.Col = clmfrmAdr FGrid,CellFontSize = 9
補足
大変ありがとうございました。 ただ、エラーは出ませんが、設定がやはりできないようです。 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・・・で実際に設定しているかと思いますが、足りないでしょうか・・? すいません、お時間ありましたら、お願いします。・・・
- MARU4812
- ベストアンサー率43% (196/452)
フォントサイズの変更は、Font のプロパティを 変更するだけだから、関数なんか作らず、その まま書いた方がいいと思います。 まぁ、文字数に応じたフォントサイズの閾値を 共通化する意味で、文字数を引数で渡してフォ ントサイズが返ってくる関数はありかもしれない けど、ただの数値処理の関数なので、難しい問題 は無いと思います。
補足
別の回答者様への補足ですが、 LenBのところでは、LenBの()内で文字数を出してますが、()内の文字の大きさを変えたいという意味で StrConv(FGrid.TextMatrix(ofs, clmfrmAdr), vbFromUnicode).fontsize=9 としていますが、これではなぜダメなのでしょう・・?
- imogasi
- ベストアンサー率27% (4737/17069)
話題にしているのは、何オブジェクトのフォントですか。VB6もオブジェクト指向なのに、それを書かないで質問するとは。 オブジェクト.Font.Size=XXなんてのが多いと思うが,、質問の力点はなに? >フォントサイズ9、47文字以上なら6ポイントという感じ こういう風にバラバラの単位で設定(考える)のですか。
補足
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 としても「修飾子が不正です。」 と言われます・・・。
- uruz
- ベストアンサー率49% (417/840)
やりたい事は解りましたが質問はなんでしょうか? 文字列の文字数は LEN() 関数で調べられます、あとは IF分で分岐すればいいだけどけど.......
補足
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 としても「修飾子が不正です。」 と言われます・・・。
お礼
こちらについて解決しました。本当にありがとうございました。
補足
最終的にこのpfm.CrObjects("frmAdr" & no)の文字サイズを変更しなければ ならない状況です。 文字列はpfm.CrObjects("frmAdr" & no).Text = FGrid.TextMatrix(ofs, clmfrmAdr) で取得しますが、その大きさの変え方がわかりかねていまして・・。 pfm.CrObjects("frmAdr" & no).Cellfontsize = 6などでは駄目なようで、やはり文字列に直接「.Cellfontsize 」をつけても仕方ないということでしょうか。 Fgridはオブジェクトなので.Cellfontsize で変えられるということでしょうか。 大変恐縮ですが、補足させていただきました・・。