いつも拝見させていただいております。
StatusBarを使って状態表示をしたいと思います。
・StatusBarのテキストを変更することはできます。
(StatusBar1.Panels(1).Text = "hogehoge")
・StatusBarにアイコンを表示させることもできます。
(最初にプロパティでtext.icoを設定しただけ)
状況に応じてアイコンを変更するにはどうしたらいいですか?
StatusBar1.Panels(1).Picture.Handle
この辺で変更できそうなのですがわかりません(見当違い?)
MSDNの資料を見てもアイコン変更だけ書かれていないような感じがします。
よろしくお願いします。
WinXPSP2/VB6SP6
> この辺で変更できそうなのですがわかりません(見当違い?)
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 を使ってできること]
└[パフォーマンスと互換性]
└[アプリケーションの速度の最適化]
└[グラフィックスに使われるメモリの最小化]
何とか画像を変更することはできるようになりました。
ありがとうございます。
ただ、現状は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
よろしくお願いします。
ちなみに以下のようにもやってみました。
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
>ただ、現状はPICURE BOXに最初から設定してあるアイコンを切り替えるだけです。
>もっとスマートに、というか動的に、というかできるようにはなるものでしょうか??
ImageListにアイコンや画像を仕込んでおいて
動的に切り替える方法が簡単であると思われますが。
皆様のアドバイスを下に以下のようにしてなんとかできました(>_<)
ありがとうございました。
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
ツイート | ![]() |