こんにちは、宜しくお願いします。
実行時にタスクトレイに入るように実行したく、
以下のようなソースを探して来たのですが、
実行すると.hIcon = Form1.Iconの所で「オブジェクトが必要です。」
のメッセージが出てしまいます。
Form1のIConプロパティにアイコンファイルを指定したのですが、
やはり同様の現象が起こります。
アイコンファイルを選択してもプロパティは(アイコン)のままなのが
気になります。
どなたか教えて下さいませんでしょうか。
Option Explicit
Private Sub Form_Load()
Picture1.Visible = False 'PictureBoxをForm1に不可視で張り付けておく。
Dim typNID As NOTIFYICONDATA
Dim rc As Long
With typNID
.cbSize = Len(typNID) '構造体のサイズ(BYTE)を設定
.hwnd = Picture1.hwnd 'メッセージを受け取るウィンドウ
.uID = 0
.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
.uCallbackMessage = WM_MOUSEMOVE '通知するメッセージ
.hIcon = Form1.Icon '表示アイコンの設定
.szTip = App.Title & vbNullChar '表示テキスト
End With
'API関数呼び出し
rc = Shell_NotifyIcon(NIM_ADD, typNID)
End Sub
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
'ScaleModeを3(pixcel)にしておくこと。
'コールバックされた値がXに来るので比較して処理する。
Select Case X
Case WM_LBUTTONDOWN
Text1.Text = "左が、クリックされました。"
Case WM_RBUTTONDOWN
Text1.Text = "右が、クリックされました。"
Case WM_LBUTTONDBLCLK
Text1.Text = "左が、ダブルクリックされました。"
Case WM_RBUTTONDBLCLK
Text1.Text = "右が、ダブルクリックされました。"
End Select
End Sub
Option Explicit
Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias _
"Shell_NotifyIconA" (ByVal dwMessage As Long, lpData _
As NOTIFYICONDATA) As Long
Public Const NIM_ADD = &H0 'タスクバーにアイコンを追加
Public Const NIM_MODIFY = &H1 '既存のアイコンを更新
Public Const NIM_DELETE = &H2 '既存のアイコンを削除
Public Const NIF_ICON = &H2 'hIconが有効
Public Const NIF_MESSAGE = &H1 'uCallbackMessageが有効
Public Const NIF_TIP = &H4 'szTipが有効
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 'チップヘルプテキスト
End Type
Public Const WM_MOUSEMOVE = &H200
Public Const WM_LBUTTONDOWN = 7695 '左が押された時
Public Const WM_LBUTTONDBLCLK = 7725 '左がダブルクリックされた時
Public Const WM_RBUTTONDOWN = 7740 '右が押された時
Public Const WM_RBUTTONDBLCLK = 7770 '右がダブルクリックされた時
みなさんこんにちは、
えっと、アイコンが表示されないのは解決しました。
でも右クリックでメニューが表示されません。
メニューエディタで「閉じる」項目を追加
したのですが、それだけではダメなの
でしょうか?
やりたいこととやってることが違う気がするのは私だけでしょうか
メニューエディタは「ファイル(F)」のような、キャプションバー下のメニューをつくるものでは?
こんにちはレスありがとうございます。
違ってましたか。
やりたい事は実行時にタスクトレイに入り、
右クリックでポップアップメニューを
表示して、メニュー内の閉じるを押されたら
終了するというものです。
お手数かけてすみません。
直接質問の回答とは関係ないですが、後始末はちゃんとしましょう。
[VB6.0]
Private Sub Form_Unload(Cancel As Integer)
Call Shell_NotifyIcon(NIM_DELETE, typNID) '← Dim じゃ無理ですが。
End Sub
提示されたコードでは Picture1 を使ってて変更するのが
面倒だったので Form1 のイベントで書きます。
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Select Case X \ Screen.TwipsPerPixelX
Case WM_RBUTTONDOWN
Call SetForegroundWindow(Me.hwnd)
DoEvents
Me.PopupMenu mnuMain 'メニューの表示
End Select
End Sub
これで表示されなければ typNID の設定か、
過去ログ検索『タスクトレイ』で引っ掛かるような情報のチェックが必要でしょう。
過去ログを検索しました。
そこで少し進んだのですが、
右クリックすると「ポップアップメニューには少なくとも一つ以上の
サブメニューが必要です。」のメッセージが出てしまいます。
メニューの作り方でしょうか
以下設定してある情報です。
キャプション 名前 インデックス ヘルプコンテキスト
ポップアップ mnuPopup 0 0
・・・閉じる mnuEnd 0 0
あってると思いますよ。
後はmnuPopupをPopupMenuメソッドに渡すだけだと思いますけど:)
メニューエディタで「有効」とか「表示」のチェックが入っているかどうか
は確認済みですか?
>メニューエディタで「有効」とか「表示」のチェックが入っているかどうか
>は確認済みですか?
はい、ポップアップ、閉じる、両方ともチェックが入っています。
なんなんでしょうか?
フォームで表示されているメニューには、
プルダウンが表示されているのですが。。。
みなさんありがとうございました。
インデックスを空欄にしたらできました。
ありがとうございました。
解決です。
ツイート | ![]() |