[リストへもどる]
一括表示

投稿時間:2003/05/19(Mon) 13:35
投稿者名:
URL :http://moonless.infoseek.livedoor.com/
タイトル:
アイコンの表示
タスクトレイにアイコンを表示し、
そのアイコンをアニメーションしたいのですが、
どうにもアイコンが歪んでしまいます。
これはVBの仕様なのでしょうか。

一般的に自らのアイコンを歪ませずに表示する場合、

AppName = IIf(Right$(App.Path, 1) = "\", App.Path, App.Path & "\") & App.EXEName & ".exe"
lngRtn = ExtractIconEx(AppName, clngMeIconNo, LIcon, SIcon, 1)
    With nIcon
        .cbSize = Len(nIcon)
        .hWnd = hWnd
        .uID = 0
        .uFlags = Flags
        .uCallbackMessage = WM_MOUSEMOVE
        .hIcon = SIcon
        
        Tip = StrConv(Msg & vbNullChar, vbFromUnicode)
        For i = 0 To UBound(Tip)
            .szTip(i) = Tip(i)
        Next i
    End With

    lngRtn = Shell_NotifyIcon(Mode, nIcon)

というふうに、
exeファイルからスモールアイコンウィンドウハンドル(SIcon)を取得し、
NOTIFYICONDATA構造体(nIcon)のhIconにSIconをセットし、
タスクトレイに表示しますよね?

私が行っているやり方では、PictureBoxを使用して、

Dim objPic as StdPicture
Picture1.Picture = LoadPicture(strAniIcoPath , vbLPSmall)
Set StdPicture = Picture1.Picture

のようにobjPicにアイコンデータをセットし、
objPic.Handle
を上記のSIconと同じように使用してアイコンを表示させているのですが、
スモールアイコンを取得したはずなのに、
ラージアイコンを表示させたときのようにアイコンが歪んでしまいます。

これを歪まないように表示させる方法はあるのでしょうか?
それとも私のやり方がおかしいでしょうか?

投稿時間:2003/05/19(Mon) 23:55
投稿者名:Starfish
Eメール:
URL :
タイトル:
Re: アイコンの表示
 以下で、特に見た目はきたなくないですけど。

    Dim nIcon As NOTIFYICONDATA
    Dim lngRtn As Long
    
    Picture1.Picture = LoadPicture("C:\EXPLORER.ICO", vbLPSmall)
    
    With nIcon
        .cbSize = Len(nIcon)
        .hwnd = hwnd
        .uID = 0
        .uFlags = NIF_MESSAGE Or NIF_ICON Or NIF_TIP
        .uCallbackMessage = WM_MOUSEMOVE
        .hIcon = Picture1.Picture
        .szTip = "Test" & vbCrLf & "TEST" & Chr(0)
    End With
    
    lngRtn = Shell_NotifyIcon(NIM_ADD, nIcon)


>         Tip = StrConv(Msg & vbNullChar, vbFromUnicode)
>         For i = 0 To UBound(Tip)
>             .szTip(i) = Tip(i)
>         Next i

 VB4.0 をお使いですか? VB5.0 以降であれば、こんな面倒なことをしなくてもいいですよ。

投稿時間:2003/05/20(Tue) 09:16
投稿者名:
URL :http://moonless.infoseek.livedoor.com/
タイトル:
Re^2: アイコンの表示
>  VB4.0 をお使いですか? VB5.0 以降であれば、こんな面倒なことをしなくてもいいですよ。

それは知りませんでした。
勉強になります。
使用VersionはVB6.0です。

しかし、
タスクトレイ上のアイコンはかすかに歪んでしまっています。
※ 影などを付けて凹凸感を出しているのにフラット状態になっている
※ 1×32のラインが透明化されている など

この歪みを直す方法はありますか?

32×32のアイコンを、
最初から16×16で自作しておく、とか(笑>冗談です。

投稿時間:2003/05/21(Wed) 00:02
投稿者名:Starfish
Eメール:
URL :
タイトル:
Re^3: アイコンの表示
> 32×32のアイコンを、
> 最初から16×16で自作しておく、とか(笑>冗談です。

 小さいアイコンは、16×16ドットですが、、、

投稿時間:2003/06/18(Wed) 09:54
投稿者名:
URL :http://moonless.infoseek.livedoor.com/
タイトル:
返事が遅れてすいません
> > 32×32のアイコンを、
> > 最初から16×16で自作しておく、とか(笑>冗談です。
>
>  小さいアイコンは、16×16ドットですが、、、

そうです。
Applicationで使用しているアイコンは32×32、
タスクトレイに表示するアイコンは16×16。

話が理解してもらえていないので注釈します。
通常、Applicationのアイコンをタスクトレイに表示する際、
32×32のアイコンを16×16に変換して使いますが、
最初から16×16のアイコンを作成しておき、
それをタスクトレイに表示させる、という方法を用いるか・・・という話です。

変換のAPI関数(ExtractIconEx)内部の処理を、
VCを用いて解析し、
それをさらに自作することで対応できました。

話が途中で止まっていたので、
とりあえず、対応報告を致しました。

ご回答ありがとうございます。