• ベストアンサー

VB6.0 ボタンキャプションの折り返し

VB6.0でダイアログベースの開発を行っています。 このダイアログにボタンがついているのですが、ボタンキャプションが長くなると、自動的に折り返されてしまいます。 キャプションに与える文字列の性質上、文字列の折り返されるよりは、途中で切れたほうがよいのですが、ボタンのプロパティのなかに折り返しを禁止できそうな項目が見つからず困っています。 どなたかお知恵をお貸しください。 ------ ↓ ソース(一部抜粋)と補足説明 ------- 外部から受け取った文字列がgstrBtn変数に格納されている。 この変数には日本語または英語が入る。 全角文字の場合9文字まで、半角文字の場合13文字まで表示したい。 そこで、Left(gstrBtn, 13)でgstrBtnの先頭から13文字を取り出し、あとはボタン幅で字数を制限しようとしている。 よって、折り返されると都合が悪い。 'ボタンの文字列の設定 If gstrBtn > "" Then cmdFind.Caption = Left(gstrBtn, 13) End If

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

  • ベストアンサー
  • m-toshi
  • ベストアンサー率31% (6/19)
回答No.1

>cmdFind.Caption = Left(gstrBtn, 13) これですと、全角・半角の判断ができません。 cmdFind.Caption = StrConv(LeftB(StrConv(Trim(gstrBtn), _ vbFromUnicode), 13), vbUnicode) これで、出来ると思います。 試してみて下さい。

その他の回答 (3)

回答No.4

コマンドボタンのStyleプロパティを1(グラフィックス)に するという方法もある。

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.3

★Win32 API でボタンのスタイルに『折り返しする』という項目があります。 ・私は C/C++ 言語が専門ですので、VB6.0 は自動的に『折り返しする』のオプションに  チェックされるのかもしれませんね。 ・API でのお話になりますが、上記の折り返しする指定は『BS_MULTILINE』という定数で  行えます。よって、ボタンのスタイルを VB6.0 の方法で取得してから『BS_MULTILINE』  のフラグをリセット(論理演算)して下さい。 ・また動的にボタンのスタイルを変更するときには、やはり Win32 API の操作になりますが  『SetWindowLong()』関数に『SWP_FRAMECHANGED』定数を指定して更新する必要があります。 ・下に C 言語ですがサンプルを載せます。 Cサンプル: LONG dwStyle; dwStyle = GetWindowLong( Button.hWnd, GWL_STYLE ); dwStyle &= ~BS_MULTILINE; ←VBでは『dwStyle = dwStyle And (Not BS_MULTILINE)』かな? SetWindowLong( Button.hWnd, GWL_STYLE, (LONG)(INT64)dwStyle ); SetWindowPos( Button.hWnd, NULL, 0, 0, 0, 0, (SWP_NOMOVE|SWP_NOSIZE|SWP_NOZORDER|SWP_FRAMECHANGED) ); 最後に: ・上記の『Button.hWnd』がボタンのウインドウ・ハンドルになります。コントロールのウインドウ  ハンドルですよ。→API 関数では Button.hWnd = GetDlgItem( hDlg, IDC_BUTTON ); で取得できますが…。 ・重要なのはボタンスタイルの『BS_MULTILINE』定数をリセットすることです。  VB6.0 にボタンスタイルを変更する『Modify』関数などがあれば、それで変更が可能です。  変更後は必ず、『SetWindowLong()』関数に『SWP_FRAMECHANGED』定数を使っての更新処理を  行って下さい。これを忘れるとメモリ内のキャッシュ・スタイルのまま見た目の変化が起こりません。 ・以上。おわり。→上手く VB6.0 用に書き換えて下さい。

参考URL:
http://www.activebasic.com/help_center/Pages/API/Window/Window/CreateWindowEx.htm
  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.2

'--------------------------------------------------  Dim K As Integer  Dim CapWidth As Double  CapWidth = TextWidth("国国国国国国国国国")  ’予め調べた幅  Dim Moji As String  Moji = "あいうえおかきくけこさしすせそ"  '●取込んだ文字  Moji = Left(Moji, 13)  For K = Len(Moji) To 1 Step -1    Moji = Left(Moji, K)    If CapWidth >= TextWidth(Moji) Then Exit For  Next K  cmdFind.Caption = Moji '------------------------------------------------------- デザイン時にcmdFindの幅を全角9文字表示できるように配置する 全角9文字の幅を予め調べておく 取り込んできた文字を無条件に13文字取る 予め調べておいた9文字の幅 >= 取込んだ文字の幅 この状態になるまで取込んだ文字から一文字ずつ減らし比較していく。 なお、この方法ではFontにより10文字表示される場合もある 勘違い等ありましたらご容赦願います。 以上です。  

関連するQ&A