• 締切済み

ラベルフォントサイズの自動変更

.net2003にて開発しています。 ラベルに表示する文字数によってフォントサイズを変更し、 常に全体を表示させたいと考えています。 Excelで言うところの 「縮小して全体を表示する」 の機能を実現したいのですが、良い方法はありますでしょうか?

みんなの回答

回答No.1

C#で、テキストの表示幅の計算ロジックを求めたことがあります。 手続きはVB.NETでも、やることは一緒です。 適切なサイズを一発で求めることは難しいと思いますが、こまめにフォントサイズを変更し、収まるかどうかを判定する必要があると思います。 終電間近のため、コードをそのまま張ります。 多少の解説はつけておきます。 -----------------------------宣言部------------------------------- #region API関係 private const int WM_GETFONT = 0x31; [StructLayout(LayoutKind.Sequential)]private struct TSize { public int cx; public int cy; } [DllImport("user32.dll")]private static extern IntPtr SendMessage(int hWnd, int wMsg,int wParam,int lParam); [DllImport("gdi32.dll")]private static extern int GetTextExtentPoint32(IntPtr hdc, string lpsz, int cbstring ,[MarshalAs(UnmanagedType.Struct)] ref TSize lpSize); [DllImport("user32.dll")]private static extern IntPtr GetDC(IntPtr hwnd); [DllImport("user32.dll")]private static extern int ReleaseDC(IntPtr hwnd,IntPtr hdc); [DllImport("gdi32.dll")]private static extern int SelectObject(IntPtr hdc,IntPtr hObject); #endregion private IntPtr _hFont; -----------------------------フォーム起動時------------------------------- フォームに設定されているフォントを取得する _hFont = SendMessage(this.txtDmy.Handle.ToInt32(), WM_GETFONT, 0, 0); [必要に応じて、テキストボックスなどのダミーを用意し、それにフォント種類や体裁(太字斜体など)やサイズの設定を施し、それのフォントハンドルを求めてもOK] -----------------------------後は必要に応じて、この関数を実行する------------------------------- /// <summary> /// アリア幅を計算 /// </summary> /// <param name="fTextWidth">文字幅</param> /// <returns>計算後のエリア幅</returns> public int TextWidth(string sText) { System.Text.Encoding enc = System.Text.Encoding.GetEncoding(932); TSize udtSize= new TSize(); IntPtr hDC = GetDC(this.Handle); SelectObject(hDC, _hFont); int iRet = GetTextExtentPoint32(hDC, sText, enc.GetByteCount(sText), ref udtSize); ReleaseDC(this.Handle, hDC); return udtSize.cx; }

関連するQ&A

  • エクセル フォントサイズ変更

    エクセルでインデックスラベルを作成しています。 1シート目に罫線等でラベルの様式を作り、それに文字データを入れ、 2シート目に参照して文字のみ印刷するようにしています。 そこで、文字数が3~8文字ぐらいなのですが、 文字数によってフォントサイズを自動で変更できないかと思っています。 1行に入れる文字数は5文字で、それ以上はAlt改行で2行にしており、 セル内には収まっているので「折り返して全体を表示」や「縮小して全体を表示」ではなく、フォントサイズを変更したいです。 例えば、3文字は11、4文字は10、5文字は9、それ以上の2行になるものは8という風に、 入力すると自動でそのサイズになってほしいです。 その都度サイズ変更するのはかなり手間ですし、参照しているところには、 サイズ変更はされないのでとても時間がかかります。 もし、不可能なのであれば、ショートカットキー(Ctrl+△)などで、 サイズ変更するという方法もあるようなのですが、やり方がわかりません。 素人ですので、あまり難しいことはわかりませんが、ご指導よろしくお願いします。

  • 文字数に応じてfont-sizeを自動変更

    エクセルのセルの書式の中にある「縮小して全体を表示する」の様な ことをしたいのです。 具体的にはtableの固定幅セルのfont-sizeを、文字数に応じて自動的に 設定して、セル内で折り返しが発生しないようにしたい。 といっても、そんなに厳密でなくてもいいので、 「文字数が○文字未満ならfont-size:normal、以上ならsmall」 程度でいいんですが、これをCSSのみかCSS+JavaScriptで 実現できないものでしょうか。 文字数に応じて<td>のclassを変えればいいのでしょうが、 できれば、テキストの修正をすれば自動的に変わる様にしたいです。

  • ラベルのフォントサイズの変更

    VB.NETでラベルを動的に作成して、 ラベルのフォントサイズを変更したいのですが、 どうやって設定するか分かりません。 (オブジェクト名).Font.sizeはReadOnlyのようですし どなたかご教授いただけないでしょうか? ラベルを作成する部分は問題ないのですが、変更のやり方 が分かりませんどうかよろしくお願いします。

  • iPhoneアプリ開発でラベルにHTMLを用いたい

    カスタムセルを用いたUItablecellviewのラベルの文字にサイズの変更や色付けたいと思ったのですが、ラベルを大量に使用せずにHTMLのようなデータを送るだけ実現する方法はありますでしょうか? 例えばセルに書かれた文字列で先頭から1pxずつ文字を大きくしていく場合だと現在知っている方法だと文字列の数だけラベルが必要になってしまいますが、1つのラベルにHTMLのような <font size="1px">あ</font><font size="2px">い</font><font size="3px">う</font>・・・ などのデータを送るだけで上記の文字の装飾を行う方法はありますでしょうか?

  • ActiveReport中のフォントサイズ変更

    ActiveReportの中で、文字数によってフォントサイズを変更したいのですが、どこに値をセットすればフォントサイズが変更できるか教えて下さい。

  • サンダーバーとのフォントサイズ

    今までWindowsLiveメールを使っていましたが、 サンダーバードを使うようにしました。 そこで質問があります。 WindowsLiveメールでフォントサイズを10でメールを作成していましたが、 サンダーバードで同じフォントでサイズを10にするとかなり小さく表示されてしまいます。 1.相手に届くときは文字の大きさは一緒でしょうか? 2.フォントサイズを10のままにして、画面に表示される大きさは変えられるでしょうか?  ただしそのときだけでなく、メール作成画面では毎回その大きさで。 3.WindowsLiveメールだと特定の文字だけフォントサイズを数字を指定して変更できました。  サンダーバードですとフォントサイズを拡大します・フォントサイズを縮小します、  というボタンがあるだけです。特定の文字だけ数字でフォントサイズを変更できるでしょうか? 

  • フォントのサイズ変更

    今無料ソフトで日記をつけているのですが、本文中の文字のサイズを一部だけ大きくする方法について <FONT size="1"> などで変更するようにとアドバイスが載っていましたが、この<FONT、、、をどこでどうやって入力して文字を変更するのかわかりません。 パソコン初心者なもので恥ずかしい質問かもしれませんが、よろしくお願いします。

  • EXCELで突然フォントサイズが変わっている!

    社内でEXCELの共有ファイルを使用しています。 WIN2000サーバーにおいたファイルを12名で共有しております。 状況としましては、フォントサイズ11で入力し、セーブ後 ファイルを閉じ、あらためてファイルを開くと、直前に 入力した文字のサイズがフォントサイズ7に変わっています。 共通していることとしては、「→」の後ろに入力した文字 が変わってしまう、ということです。 「○○○(フォント11)→○○(フォント7)」 となってしまいます。 全員のPCでの設定を調べましたが、ユーザー設定の標準 サイズは11になっています。 もちろん、セル内の縮小表示を設定しているわけでは ありません。 この原因としては、どのようなことが考えられるでしょうか。 また、罫線の変更も同じく反映されません。 けっこうイライラして、ストレスが溜まっています。 ご助言ください。

  • ワードのフォントサイズ

    ワードのフォントサイズなんですが、300にしたいんです。 過去ログにサイズ変更の方法は載ってたんですが、 フォントサイズを300に変更すると、文字の上下が切れてしまい、ちゃんと全部表示されません。 どうしたらよいのでしょうか、教えてください。 お願いします。

  • エクセルで、自動的にフォントサイズを変更する式

    エクセルで、あるセルに、 「A」という文字が入っているときは標準の大きさのまま、 何かの数字(1~50000ぐらいのもの)を入力したら、 フォントサイズを自動的に大きいものに変更することは出来るのでしょうか。 ご存知の方、教えてください! 宜しくお願いします。

専門家に質問してみよう