MS Access Tips/Sample and VBA and Blog customize etc...

フォーム上のテキストボックス内の文字を自動で縮小して全体を表示

レポートでこの機能を実現する方法は下記で既に紹介しています。

テキストボックス内の文字を自動で縮小して全体を表示

AutoFontSize関数を垂直文字配置の指定ができるよう改良

これがフォーム上でもできないかという質問が掲示板の方であったので作成してみました。

フォントサイズ自動縮小フォーム

難易度:

制限、仕様

単票フォームのみ対応という制限があります。帳票フォームでも動作はしますが、カレントレコードで縮小するとすべてのレコードで縮小してしまいます。

また、縦書には対応させませんでした。勝手に需要がないだろうとの決めつけです。必要なら、レポート用のAutoFontSizeを参考にコードを追加してください。

コード

フォームでは、レポートのTextWidthメソッド、TextHeightメソッドは使えませんので、APIで文字幅、文字高を取得します。このAPIを利用して文字幅、文字高を返す関数は既に下記で紹介しています。

AutoFontSize関数をAccess97にも対応させる

レポート用のAutoFontSize関数の TextWidthメソッド、TextHeightメソッドをこの関数に置き換えて、Formに対応するよう書き換えれば完成です。

追記 2013.07.19: バグがあったのでコードを修正しました。

誤)    arStr = Split(Str, vbCrLf, vbTextCompare)
正)    arStr = Split(Str, vbCrLf, -1, vbBinaryCompare)

使用法

構文

AutoFontSizeF Ctr, IniFontSize[, VTextAlign

引数内容
Ctrテキストボックスまたはラベルオブジェクト
IniFontSize規定のフォントサイズ、このサイズで収まらないときは収まるサイズまで縮小します。
VTextAlign省略可能。縦の文字配置を指定します。省略した場合 Top
引数 VTextAlign の設定値
定数説明
Top0テキストが上に配置されます。
Center1テキストが中央に配置されます。
Bottom2テキストが下に配置されます。

フォームのレコード移動時のイベントプロシージャに下記のように記述します。

フォントサイズを下げすぎると見にくいので、最小フォントサイズを規定では4に設定してます。変更したい場合は、AutoFontSizeF関数の下記の部分の数値を変更してください。

    Const MinFontSize = 4 '最小のフォントサイズ

サンプルファイルが下記からダウンロードできます。
FrmAutoFontSize_07.zip (Access 2007-2010 形式 - 40kb)
FrmAutoFontSize.zip (Access 2002-2003 形式 - 31kb)
FrmAutoFontSize_2k.zip (Access 2000 形式 - 29kb)

拍手する

3 Comments

mishe says..."コンボボックスでもできますか?"

見事に縮小表示されました。いつもこちらのHPで勉強させて頂いております。
そこでお聞きしたいのですが、単票フォーム上のコンボボックスでも、縮小して全体表示できますでしょうか?上記コードを試すと、単にフォントサイズが11になります。

2016.01.15 11:13 | URL | #tNDIe6Xg [edit]
hatena says..."re:コンボボックスでもできますか?"

とりあえず、コードの下記の部分を、

If Ctr.ControlType = acTextBox Then
Str = Nz(Ctr.Value, "")
ElseIf Ctr.ControlType = acLabel Then
Str = Ctr.Caption
Else
Exit Sub
End If

下記に修正してください。

Select Case Ctr.ControlType
Case acTextBox, acComboBox
Str = Nz(Ctr.Value, "")
Case acLabel
Str = Ctr.Caption
Case Else
Exit Sub
End If

ただし、連結列がテキストボックス部分に表示されている設定の場合です。

複数列で連結列が列幅の設定で非表示になっている場合は Value と表示れるテキストが一致しませんので、Columnプロパティで表示されている列の値を取得する必用があります。

2016.01.18 01:55 | URL | #5uE6dEgY [edit]
mishe says..."re:re:コンボボックスでもできますか?"

ありがとうございます。返事が遅くなって大変失礼いたしました。
コードを修正してみましたら、コンパイルエラーが出て、
名前が適切ではありません:emVTextAlign
と、3行目のところで止まってしまいました。何か別名にすると良いのでしょうか?

2016.01.25 17:44 | URL | #- [edit]

Leave a reply






Trackbacks

trackback URL
http://hatenachips.blog34.fc2.com/tb.php/368-34cf8cd0
該当の記事は見つかりませんでした。