タスクトレイに入れたアイコンの色を出すには?

解決


minigirl  2003-07-25 18:36:55  No: 107872

自作のアイコンをPictureBoxにロードし、そのハンドルを
Shell_NotifyIconのアイコンハンドルに渡しました。

実行するとタスクトレイに表示されたアイコンがグレー1色に
なってしまいます。

色を出すにはどうしたらよいのでしょうか?

アイコンは32×32の256色と16×16の16色のをやってみましたが、
両方ともグレー1色になってしまいます。


nanashi  2003-07-25 20:31:19  No: 107873

試しにやってみましたが問題無く表示出来ています。
しいて言えば若干色がおかしいかなー……。

アイコンはちゃんとアイコン形式のものを使っていますか?
環境は?

あと、実際にPictureBoxにロードしている部分と
Shell_NotifyIconのアイコンハンドルに渡している部分のソースを掲示して頂けないでしょうか?


minigirl  2003-07-25 23:07:27  No: 107874

アイコンはアイコンエディタで作成しました。
アイコン形式になっています。

環境は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)

ソースはこんな感じでいいでしょうか??


nanashi  2003-07-25 23:42:24  No: 107875

>         .hIcon = Picture.Picture.Handle

ここがPicture1になってません。

う〜ん、それ以外に問題になっている部分は無いように見えますが……。
構造体や定数、APIの宣言も間違っていないですよね??


minigirl  2003-07-26 00:31:46  No: 107876

Picture1に直してみましたが、だめでした。

構造体や定数、APIの宣言もサンプルプログラムを参照し、
MSDNでも確認しましたので、あっていると思います。


nanashi  2003-07-26 01:35:10  No: 107877

新しいプロジェクトを作ってやってみましたが、普通に動きました。
例えば、\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


minigirl  2003-07-26 01:52:27  No: 107878

プロジェクトまで作っていただきありがとうございます。

作っていただいたソースを元に
既存のアイコンを設定したところ、
少し崩れてしまいましたが表示されました。

アイコンに問題があるという事でしょうか。。。


nanashi  2003-07-26 03:19:11  No: 107879

おそらくは。
少なくとも私にはそれ以外思い付きません。


minigirl  2003-07-28 18:36:46  No: 107880

もう一度アイコンを別のソフトで作り直しました。

少し、画像はよくないですが表示されるようになりました。

ありがとうございました。


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

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






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