Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


54799 / 76732 ←次へ | 前へ→

【26719】Re:UserFormのアイコン変更について
回答  bykin  - 05/7/14(木) 21:58 -

引用なし
パスワード
   こんばんわ。

>最初の起動では上手く行くのですが、一度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以降では違ってるねんけどな・・・

提示したコードでうまいこといかんかったらかんにんな。
ほな。

0 hits

【26679】UserFormのアイコン変更について ぱくぱく 05/7/14(木) 0:12 質問
【26719】Re:UserFormのアイコン変更について bykin 05/7/14(木) 21:58 回答
【26767】Re:UserFormのアイコン変更について ぱくぱく 05/7/17(日) 2:16 お礼

54799 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free