|
こんばんわ。
>最初の起動では上手く行くのですが、一度Unloadして、もう一度呼び出すと
>アイコンの変更がなされません。
なんかようわからんねんけど、グローバル変数の値をチェックしてみたんかな?
>If g_lngFormIcon <> 0 Then
が怪しいような気ぃすんねんけど。
ユーザーフォームを出すたびに同じアイコンを表示させるんやったら、
グローバル変数なんか使う必要ないんとちゃいまっか?
それに全部をひとつのプロシージャにまとめても問題ないと思うねんけどな。
とりあえず、標準モジュールを1個に合体して、コードもまとめたら・・・
(フォームモジュールはそのまま)
Private Declare Function FindWindow Lib "user32" _
Alias "FindWindowA" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLong Lib "user32" _
Alias "GetWindowLongA" _
(ByVal hWnd As Long, _
ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" _
Alias "SetWindowLongA" _
(ByVal hWnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
Private Declare Function DrawMenuBar Lib "user32" _
(ByVal hWnd As Long) As Long
Private Declare Function SendMessage Lib "user32" _
Alias "SendMessageA" _
(ByVal hWnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
lParam As Any) As Long
Private Declare Function ExtractIcon Lib "shell32.dll" _
Alias "ExtractIconA" _
(ByVal hInst As Long, _
ByVal lpszExeFileName As String, _
ByVal nIconIndex As Long) As Long
Const WS_MAXIMIZEBOX = &H10000 '最大化ボタン
Const WS_MINIMIZEBOX = &H20000 '最小化ボタン
Const WS_THICKFRAME = &H40000 'サイズ変更
Const GWL_STYLE = (-16)
Const WM_SETICON = &H80
Const ICON_SMALL = 0&
Const ICON_BIG = 1&
Public Sub InitializeUserForm(uf As UserForm)
Dim hWnd As Long
Dim Ret As Long
Dim MySetWin As Long
Dim g_lngFormIcon As Long
' hWnd = FindWindow("ThunderRT6DFrame", uf.Caption) 'DLL用
hWnd = FindWindow("ThunderDFrame", uf.Caption) 'デバックモード用
MySetWin = GetWindowLong(hWnd, GWL_STYLE)
Ret = SetWindowLong(hWnd, GWL_STYLE, MySetWin And (Not WS_MAXIMIZEBOX) _
And (Not WS_MINIMIZEBOX) _
And (Not WS_THICKFRAME))
g_lngFormIcon = ExtractIcon(0, "C:\Program Files\Microsoft Office\OFFICE11\MSN.ICO", 0)
If g_lngFormIcon <> 0 Then
Call SendMessage(hWnd, WM_SETICON, False, ByVal g_lngFormIcon)
End If
Ret = DrawMenuBar(hWnd)
End Sub
ところで・・・(以下は私見なんで無視してもろて結構です)
わては、アドインにはアイコンは不要と思ってます。
●アドインは元アプリ(エクセル)の内部で動くものであり、それだけで独立していない。
だから別アプリのように見せる必要はない。
●アイコンを表示させると、×ボタンも表示されてしまうが、フォームを閉じる方法の
選択肢が増えるのは好ましくない。
・・・と考えてるからです。
ま、×ボタンを非表示にしたらアイコンが表示できんってことやねんけど(^^;;
それと、ばくばくはんのコードではExcel97に配慮してるようやけど、COMアドインは
2000以降限定にしたほうがええと思うよ。
っていうか、97でも動くんかな?
VBAのバージョンが97と2000以降では違ってるねんけどな・・・
提示したコードでうまいこといかんかったらかんにんな。
ほな。
|
|