[リストへもどる]
一括表示

投稿時間:2003/01/30(Thu) 13:23
投稿者名:あやめ
Eメール:
URL :
タイトル:
OptionButton Caption表示について
はじめまして。

Styleを"1-グラフィックス"で設定したボタン状のOptionButtonに
Width値よりも長い文字列をCaptionへ設定すると、複数行で表示されます。
このCaptionを1行で下記のように表示する方法はありますか?
    ┌────┐    ┌────┐
    │AAAAAAAA│    │        │
    │AAAAAAAA│ → │AAAAA...│
    │AAAAAAAA│    │        │
    └────┘    └────┘

ご存知の方がいらっしゃったら、教えてください。
よろしくお願いいたします。

Win2000 VB6.0 SP5 です。

投稿時間:2003/01/30(Thu) 16:10
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: OptionButton Caption表示について
> はじめまして。
>
> Styleを"1-グラフィックス"で設定したボタン状のOptionButtonに
> Width値よりも長い文字列をCaptionへ設定すると、複数行で表示されます。
> このCaptionを1行で下記のように表示する方法はありますか?
>     ┌────┐    ┌────┐
>     │AAAAAAAA│    │        │
>     │AAAAAAAA│ → │AAAAA...│
>     │AAAAAAAA│    │        │
>     └────┘    └────┘

ひょっとして、質問内容が逆じゃありませんか?
複数行に表示したいのでは!

投稿時間:2003/01/30(Thu) 16:18
投稿者名:あやめ
Eメール:
URL :
タイトル:
Re^2: OptionButton Caption表示について
> ひょっとして、質問内容が逆じゃありませんか?
> 複数行に表示したいのでは!

1行で、最後を"..."で表示したいのですが...。

投稿時間:2003/01/30(Thu) 16:32
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: OptionButton Caption表示について
> > ひょっとして、質問内容が逆じゃありませんか?
> > 複数行に表示したいのでは!
>
> 1行で、最後を"..."で表示したいのですが...。

Styleを"1-グラフィックス" なら通常1行しか表示しませんが!
文字列の長さに合せて、後ろに ... を付加したのではだめですか?
Option1.Caption = Left$("Option1", 6) & "..."

投稿時間:2003/01/30(Thu) 16:55
投稿者名:あやめ
Eメール:
URL :
タイトル:
Re^4: OptionButton Caption表示について
> Styleを"1-グラフィックス" なら通常1行しか表示しませんが!
全角文字の場合、複数行になりますよ。

> 文字列の長さに合せて、後ろに ... を付加したのではだめですか?
> Option1.Caption = Left$("Option1", 6) & "..."
Widthの値が可変になるので、文字数の指定が出来ません。

投稿時間:2003/01/30(Thu) 17:19
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^5: OptionButton Caption表示について
> Widthの値が可変になるので、文字数の指定が出来ません。

文字列の長さを TextWidth で測って下さい。

投稿時間:2003/01/30(Thu) 18:27
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^5: OptionButton Caption表示について
> Widthの値が可変になるので、文字数の指定が出来ません。

ちょっとテストして見ました。後はご自分の環境で調整して下さい。
尚、Form と Option ボタンのフォントの設定は同じにして測定して下さい。

関数化したサンプルをUPしましたので、こちらは削除致します。

投稿時間:2003/01/30(Thu) 19:08
投稿者名:あやめ
Eメール:
URL :
タイトル:
Re^6: OptionButton Caption表示について
> ちょっとテストして見ました。後はご自分の環境で調整して下さい。
> 尚、Form と Option ボタンのフォントの設定は同じにして測定して下さい。
有り難う御座いました。
この方法だと、OptionButton以外でも使用できますね。
(FormのFontを合わせないといけないけど)

投稿時間:2003/01/31(Fri) 00:45
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^6: OptionButton Caption表示について
こちらのサンプルと差換えて下さい。
WinXP と Win9x 系ではフォントが違いますので注意が必要です。
Margin のサイズを大きく取る等して調整して下さい。

Option Explicit

Private Sub Form_Resize()
    Dim Opt1Width As Long
    Dim Com1Width As Long
    Opt1Width = Form1.Width - 4000
    Com1Width = Form1.Width - 4000
    
    If Opt1Width < 1000 Then
        Opt1Width = 1000
        Com1Width = 1000
    End If
    If Opt1Width > 3000 Then
        Opt1Width = 3000
        Com1Width = 3000
    End If
    Option1.Width = Opt1Width
    Command1.Width = Com1Width
    
    'fGetTextWidth 関数の使用例
    Option1.Caption = fSetCaption(Option1, "OptionボタンのCaption名", 300)
    Command1.Caption = fSetCaption(Command1, "CommandボタンのCaption名", 300)
End Sub

Private Function fSetCaption(MyControl As Control, _
                ByVal myString As String, ByVal Margin As Long) As String

    Dim meFontSize As Single, BakString  As String
    Dim meFontName As String, ScaleMode1 As Long
    Dim meFontBold As Boolean, LoopCount As Long
    Dim WidTwips   As Long
    BakString = "・・・"
    With Me
        '元のフォントの設定を取得
        ScaleMode1 = .ScaleMode
        meFontSize = .FontSize
        meFontName = .FontName
        meFontBold = .FontBold
        '現在使用のフォントを設定
        .ScaleMode = vbTwips
        .FontSize = MyControl.FontSize
        .FontName = MyControl.FontName
        .FontBold = MyControl.FontBold
        DoEvents
        '文字列長を取得
        For LoopCount = 1& To Len(myString)
            '元の長さ以上の場合
            If LoopCount = Len(myString) Then
                fSetCaption = myString
                Exit For
            End If
            WidTwips = Me.TextWidth(Left$(myString, LoopCount) & BakString)
            'ちょうど良いサイズが見つかった場合
            If WidTwips > (MyControl.Width - Margin) Then
                fSetCaption = Left$(myString, LoopCount) & BakString
                Exit For
            End If
        Next LoopCount
        'フォントの設定を元に戻す
        .ScaleMode = ScaleMode1
        .FontSize = meFontSize
        .FontName = meFontName
        .FontBold = meFontBold
    End With
End Function