[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2005/11/16(Wed) 13:51
投稿者名:GOD
Eメール:
URL :
タイトル:
ステータスバーの文字列を取得
ステータスバーの文字列の色を変更したく、WM_PAINT時に自分で描画しようとしています。
そこでウィンドウハンドルからステータスバーの文字列を取得したいのですが、正しく取得できま
せん。
現状、問題点は2つあります。
1)StatusBar1.Panelsで設定した文字列を取得できない。
2)SB_SETTEXTで文字列を設定すると一時的に文字列を取得できるが、ウィンドウサイズを変更す
ると文字列が取得できなくなる。
上記問題点はオーナードローとは関係なく普通に行っても同様の現象が出てしまいます。
自分で文字列を描画する時は、コントロールの持っている文字列(Panelsで設定した文字列)は取得
できないものなのでしょうか。
現在、回避法としてステータスバーオブジェクトをグローバル変数に退避するくらいしか思いつか
ないのですが他に良い方法はありませんでしょうか。問題点の1が解決してくれるのが一番いいの
ですが...

環境:Win2000+SP4, IE6+SP1, VB6+SP5

サンプル:
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA"
    (ByVal hwnd As Long, _
     ByVal wMsg As Long, _
     ByVal wParam As Long, _
     lParam As Any) As Long
Private Const WM_USER As Long = &H400
Private Const SB_SETTEXTA As Long = (WM_USER + 1)
Private Const SB_GETTEXTA  As Long = (WM_USER + 2)
Private Const SB_GETTEXTLENGTHA  As Long = (WM_USER + 3)

'文字設定ボタン
Private Sub Command1_Click()
    Dim strText As String

    strText = StrConv("Test", vbFromUnicode)
    '文字列設定
    Call SendMessage(StatusBar1.hwnd, SB_SETTEXTA, 0, ByVal StrPtr(strText))
End Sub

'文字取得ボタン
Private Sub Command2_Click()
    Dim strText As String
    Dim lngLen As Long

    '文字数取得
    lngLen = SendMessage(StatusBar1.hwnd, SB_GETTEXTLENGTHA, 0, 0) And &HFFFF&
    If lngLen = 0 Then
        Debug.Print "文字列なし"
        Exit Sub
    End If
    strText = String(lngLen, vbNullChar)
    '文字列取得
    Call SendMessage(StatusBar1.hwnd, SB_GETTEXTA, 0, ByVal StrPtr(strText))
    strText = StrConv(strText, vbUnicode)
    strText = Left(strText, InStr(1, strText, vbNullChar) - 1)
    Debug.Print strText
End Sub

'文字設定2ボタン
Private Sub Command3_Click()
    StatusBar1.Panels(1).Text = "Test"
End Sub

問題点1の再現法:
1)Command3押下
2)Command2押下 → 文字列が取得できない

問題点2の再現法:
1)Command1押下
2)Command2押下 → 文字列が取得できる
3)Windowサイズを変更
4)Command2押下 → 文字列が取得できない

投稿時間:2005/11/16(Wed) 14:28
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: ステータスバーの文字列を取得
StatusBar コントロールでは試していないのですが、CreateStatusWindow API で作成した
ステータスバーで上記文字列取得のコードを試したところ、1) 2) 共問題なく取得できて
おります。

又、下記のような方法でフォントカラーを設定する手もあるようです。

hhttp://www.bcap.co.jp/hanafusa/vbbbs/wforum.cgi?mode=allread&no=3602#3622
の一番下のURLのサンプル

投稿時間:2005/11/16(Wed) 17:48
投稿者名:GOD
Eメール:
URL :
タイトル:
Re^2: ステータスバーの文字列を取得
返信ありがとうございました。

> StatusBar コントロールでは試していないのですが、CreateStatusWindow API で作成した
> ステータスバーで上記文字列取得のコードを試したところ、1) 2) 共問題なく取得できて
> おります。
>
CreateStatusWindowで文字列を取得することが確認できました。Windowサイズを変更しても大
丈夫みたいです。
ただ、CreateStatusWindowを使用するためには結構作りこまねばならないみたいですね。

> hhttp://www.bcap.co.jp/hanafusa/vbbbs/wforum.cgi?mode=allread&no=3602#3622
>
実は投稿する前に同一案件がないか確認する為、「ステータスバー」にてぐぐってましたので紹
介していただいたURLも確認はしてました。やはりイメージを取り込んだほうがいいのかな。