自作のアイコンをPictureBoxにロードし、そのハンドルを
Shell_NotifyIconのアイコンハンドルに渡しました。
実行するとタスクトレイに表示されたアイコンがグレー1色に
なってしまいます。
色を出すにはどうしたらよいのでしょうか?
アイコンは32×32の256色と16×16の16色のをやってみましたが、
両方ともグレー1色になってしまいます。
試しにやってみましたが問題無く表示出来ています。
しいて言えば若干色がおかしいかなー……。
アイコンはちゃんとアイコン形式のものを使っていますか?
環境は?
あと、実際にPictureBoxにロードしている部分と
Shell_NotifyIconのアイコンハンドルに渡している部分のソースを掲示して頂けないでしょうか?
アイコンはアイコンエディタで作成しました。
アイコン形式になっています。
環境はWindows2000でVB6.0で行なっています。
ソースは以下のようになっています。
'タスクトレイに入れるアイコンをピクチャーボックスにロードします。
Picture1.Picture = LoadPicture(App.path & "\RC.ico")
'ウィンドウをタスクトレーに入れる
Dim ncd As NOTIFYICONDATA
With ncd
.cbSize = Len(ncd)
.hWnd = Picture1.hWnd
.uID = 10
.hIcon = Picture.Picture.Handle
.uFlags = NIF_MESSAGE Or NIF_ICON Or NIF_TIP
.uCallbackMessage = WM_LBUTTONDOWN
.szTip = "Real" & vbNullChar
End With
'システムトレイに登録
Call Shell_NotifyIcon(NIM_ADD, ncd)
ソースはこんな感じでいいでしょうか??
> .hIcon = Picture.Picture.Handle
ここがPicture1になってません。
う〜ん、それ以外に問題になっている部分は無いように見えますが……。
構造体や定数、APIの宣言も間違っていないですよね??
Picture1に直してみましたが、だめでした。
構造体や定数、APIの宣言もサンプルプログラムを参照し、
MSDNでも確認しましたので、あっていると思います。
新しいプロジェクトを作ってやってみましたが、普通に動きました。
例えば、\Program Files\Microsoft Visual Studio\Common\Graphics\Icons以下に
あるようなアイコンでも表示されないのでしょうか?
'※新しいフォームにコマンドボタン2つとピクチャーボックス1つを用意して下さい。
Option Explicit
'●●●API宣言●●●///////////////////////////////////////////////////////////
'タスクトレイにアイコンを表示
Private Declare Function Shell_NotifyIcon Lib _
"shell32.dll" Alias "Shell_NotifyIconA" _
(ByVal dwMessage As Long, ByRef pnid As NOTIFYICONDATA) _
As Long
'●●●構造体●●●////////////////////////////////////////////////////////////
'タスクトレイ関連の構造体と定数
Private Type NOTIFYICONDATA
cbSize As Long '構造体のサイズ
hWnd As Long '通知を受け取るウインドウのハンドル
uID As Long 'タスクバーアイコンのユーザー定義のID
uFlags As Long '有効なメンバーを示す次の定数の組み合せ
uCallbackMessage As Long 'ユーザー定義メッセージ
hIcon As Long 'アイコンのハンドル
szTip As String * 64 'チップヘルプの文字列
dwState As Long 'アイコンの状態(???)
dwStateMask As Long 'アイコンの状態のマスク(???)
End Type
'●●●定数●●●//////////////////////////////////////////////////////////////
Private Const NIF_ICON As Long = &H2& 'hIconの値は有効
Private Const NIF_MESSAGE As Long = &H1& 'uCallbackMessageの値は有効
Private Const NIF_TIP As Long = &H4& 'szTipの値は有効
Private Const NIM_ADD As Long = &H0& 'アイコンを追加する
Private Const NIM_DELETE As Long = &H2& 'アイコンを削除する
Private Const NIM_MODIFY As Long = &H1& 'アイコンを変更する
Private Const WM_USER As Long = &H400&
Private Const TRAY_NOTIFYICON As Long = WM_USER + 1& 'タスクトレイの通知メッセージ
Private Const WM_LBUTTONDOWN As Long = &H201& 'マウスの左ボタンが押された
'●●●変数●●●//////////////////////////////////////////////////////////////
Private uIcon As NOTIFYICONDATA
Private Sub Command1_Click()
With uIcon
.cbSize = Len(uIcon)
.hWnd = Picture1.hWnd
.uID = 10
.hIcon = Picture1.Picture.Handle
.uFlags = NIF_MESSAGE Or NIF_ICON Or NIF_TIP
.uCallbackMessage = WM_LBUTTONDOWN
.szTip = "Real" & vbNullChar
End With
Call Shell_NotifyIcon(NIM_ADD, uIcon)
End Sub
Private Sub Command2_Click()
Call Shell_NotifyIcon(NIM_DELETE, uIcon)
End Sub
Private Sub Form_Load()
With Picture1
.Visible = False
.Picture = LoadPicture("C:\Program Files\Microsoft Visual Studio\Common\Graphics\Icons\Computer\form.ico") '←適当に変える
End With
End Sub
プロジェクトまで作っていただきありがとうございます。
作っていただいたソースを元に
既存のアイコンを設定したところ、
少し崩れてしまいましたが表示されました。
アイコンに問題があるという事でしょうか。。。
おそらくは。
少なくとも私にはそれ以外思い付きません。
もう一度アイコンを別のソフトで作り直しました。
少し、画像はよくないですが表示されるようになりました。
ありがとうございました。
ツイート | ![]() |