StatusBarのアイコンを変更するには?

解決


BIOPRIN  2006-03-21 12:52:01  No: 130741

いつも拝見させていただいております。

StatusBarを使って状態表示をしたいと思います。

・StatusBarのテキストを変更することはできます。
  (StatusBar1.Panels(1).Text = "hogehoge")

・StatusBarにアイコンを表示させることもできます。
  (最初にプロパティでtext.icoを設定しただけ)

状況に応じてアイコンを変更するにはどうしたらいいですか?

StatusBar1.Panels(1).Picture.Handle

この辺で変更できそうなのですがわかりません(見当違い?)
MSDNの資料を見てもアイコン変更だけ書かれていないような感じがします。

よろしくお願いします。

WinXPSP2/VB6SP6


魔界の仮面弁士  2006-03-21 13:55:26  No: 130742

> この辺で変更できそうなのですがわかりません(見当違い?)
Pictureプロパティを使うところまではあっています。変更するには、
  Set StatusBar1.Panels(1).Picture = 『Pictureオブジェクト』
という感じですね。

代入式の右辺に指定するPictureオブジェクトとしては、
  ・LoadPicture()で読み込まれた画像ファイル
  ・LoadResData()で読み込まれたリソース内の画像
  ・FormのIconプロパティに割り当てられていたアイコン
  ・Form, PictureBox, Imageコントロール等のPictureプロパティの画像
  ・Form, PictureBoxのImageプロパティで得られる描画内容
  ・Clipboard.GetData で得られるクリップボード内の画像
などといった物を指定できます。

> MSDNの資料を見てもアイコン変更だけ書かれていないような感じがします。
このあたりに書いてあると思います。

[Visual Basic ドキュメント]
└[Visual Basic の使用方法]
  └[プログラミング ガイド]
    └[Visual Basic を使ってできること]
      ├[Visual Basic の標準コントロールの使用]
      │├[イメージ コントロールの使用]
      │└[ピクチャ ボックス コントロールの使用]
      └[テキストおよびグラフィックスの操作]
        └[Picture オブジェクトの使い方]

ついでに、今回の件とは直接は関係ありませんが、このあたりも見ておくと良いかも。

[Visual Basic ドキュメント]
└[Visual Basic の使用方法]
  └[プログラミング ガイド]
    ├[Visual Basic の基本]
    │└[フォーム、コントロール、およびメニュー]
    │  └[ピクチャおよびグラフィックスを表示するコントロール]
    │    └[簡易グラフィックス コントロール]
    └[Visual Basic を使ってできること]
      └[パフォーマンスと互換性]
        └[アプリケーションの速度の最適化]
          └[グラフィックスに使われるメモリの最小化]


BIOPRIN  2006-03-21 23:26:03  No: 130743

何とか画像を変更することはできるようになりました。
ありがとうございます。

ただ、現状はPICURE BOXに最初から設定してあるアイコンを切り替えるだけです。
もっとスマートに、というか動的に、というかできるようにはなるものでしょうか??
それとも以下のような使い方が一般的ですか??

☆イマイチアイコンの(プログラム内での)読み込ませ方がわかりません。

Option Explicit

Private Sub Command1_Click()
    
    StatusBar1.Panels(1).Picture = Picture1.Picture

End Sub

Private Sub Command2_Click()

    StatusBar1.Panels(1).Picture = Picture2.Picture

End Sub

Private Sub Form_Load()
    
    Picture1.Visible = False
    Picture2.Visible = False

End Sub

よろしくお願いします。


BIOPRIN  2006-03-21 23:46:15  No: 130744

ちなみに以下のようにもやってみました。
PICTURE1の画像はCOMMAND1、COMMAND2で変わります。
しかし、PANELS(1).PICTURE  は「一度しか」変わりません。

Option Explicit

'標準モジュール
Private Declare Function DrawIconEx Lib "USER32" (ByVal hDC&, ByVal xLeft&, ByVal yTop&, ByVal hIcon&, ByVal cxWidth&, ByVal cyWidth&, ByVal istepIfAniCur&, ByVal hbrFlickerFreeDraw&, ByVal diFlags&) As Long
Private Declare Function ExtractIconEx Lib "shell32.dll" Alias "ExtractIconExA" (ByVal lpszFile As String, ByVal nIconIndex As Long, phiconLarge As Long, phiconSmall As Long, ByVal nIcons As Long) As Long

'ropImageとropMaskのラスタ操作を実行する
'Public Const DI_NORMAL = &H3
 Const DI_NORMAL = &H3

'指定されたアイコンファイルをPICTURE1にセットする
Private Function LoadIcon(nFile As String)

    Dim Ret As Long
    Dim L As Long
    Dim S As Long

    Ret = ExtractIconEx(nFile, 0, L, S, 1)

    DrawIconEx Form1.Picture1.hDC, 0, 0, L, 0, 0, vbNull, 0, DI_NORMAL

End Function

Private Sub Command1_Click()
    Dim tmp As Variant
    
    ''PICTURE1にアイコンをセットする
    tmp = LoadIcon(App.Path & "\" & "01.ico")
    
    'PICURE1から読み出す
    StatusBar1.Panels(1).Picture = Picture1.Picture
    
End Sub

Private Sub Command2_Click()

    Dim tmp As Variant
    
    'PICTURE1にアイコンをセットする
    tmp = LoadIcon(App.Path & "\02.ico")
    
    'PICURE1から読み出す
    StatusBar1.Panels(1).Picture = Picture1.Picture

End Sub

Private Sub Form_Load()
    
    Picture1.Visible = False

End Sub


我龍院忠太  2006-03-22 00:39:46  No: 130745

>ただ、現状はPICURE BOXに最初から設定してあるアイコンを切り替えるだけです。
>もっとスマートに、というか動的に、というかできるようにはなるものでしょうか??

ImageListにアイコンや画像を仕込んでおいて
動的に切り替える方法が簡単であると思われますが。


BIOPRIN  2006-03-22 01:53:28  No: 130746

皆様のアドバイスを下に以下のようにしてなんとかできました(>_<)
ありがとうございました。

Option Explicit

'  Microsoft Common Control 6.0 (SP4)を追加して
'  ImageListを使用可能にし、デザインプロパティで
'  Imageを追加しておく

Private Sub Form_Load()

    'Create object variable for the ImageList.(MSDN)
    Dim imgX As ListImage
    Set imgX = ImageList1.ListImages.Add(, "OnLine", LoadPicture(App.Path & "\" & "01.ico"))
    Set imgX = ImageList1.ListImages.Add(, "OffLine", LoadPicture(App.Path & "\" & "02.ico"))
    Set imgX = ImageList1.ListImages.Add(, "Caution", LoadPicture(App.Path & "\" & "drwtsn32.ico"))

End Sub

Private Sub Command1_Click()
    
    'アイコンの変更
    'StatusBar1.Panels(1).Picture = ImageList1.ListImages.Item(1).Picture
    StatusBar1.Panels(1).Picture = ImageList1.ListImages.Item("OnLine").Picture
   
End Sub

Private Sub Command2_Click()
    
    'アイコンの変更
    'StatusBar1.Panels(1).Picture = ImageList1.ListImages.Item(2).Picture
    StatusBar1.Panels(1).Picture = ImageList1.ListImages.Item("OffLine").Picture

End Sub


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加