Excel VBA質問箱 IV

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

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


7448 / 13644 ツリー ←次へ | 前へ→

【39008】ControlTipText が下に隠れないようにしたい 西谷 さくら 06/6/15(木) 21:32 質問[未読]
【39065】Re:ControlTipText が下に隠れないようにし... bykin 06/6/16(金) 21:55 回答[未読]
【39073】Re:ControlTipText が下に隠れないようにし... bykin 06/6/17(土) 10:34 発言[未読]
【39078】Re:ControlTipText が下に隠れないようにし... 西谷 さくら 06/6/17(土) 15:57 お礼[未読]
【39087】Re:ControlTipText が下に隠れないようにし... bykin 06/6/17(土) 17:28 発言[未読]
【39105】Re:ControlTipText が下に隠れないようにし... 西谷 さくら 06/6/17(土) 22:33 お礼[未読]

【39008】ControlTipText が下に隠れないようにし...
質問  西谷 さくら  - 06/6/15(木) 21:32 -

引用なし
パスワード
   環境:XP、Excel2000、VBA使用
先日、2つ目のWindowが1つ目のWindowをさわるとその裏に隠れてしまう件、SetWindowPos を使えばよいことをこの質問箱で教えてもらってうまくいったのですが、その2つ目のWindowのコントロールのcontroltiptextがこの2つ目のWindow
の下に隠れてしまいます。2つ目のWindowの上に出したいのですが、SetWindowPosは使えないようで困っています。

【39065】Re:ControlTipText が下に隠れないように...
回答  bykin  - 06/6/16(金) 21:55 -

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

>controltiptextがこの2つ目のWindowの下に隠れてしまいます。

ほんまやねー。
コントロールチップは別のウィンドウってことなんやろね。
せやから最前列に固定してるユーザーフォーム(=ウィンドウ)の裏に隠れるわけ。

・・・で、こんなん考えてみました。

(標準モジュール)----------------------------------------------------------

Public Declare Function GetActiveWindow Lib "user32" () As Long

Public Declare Function SetWindowPos Lib "user32" _
            (ByVal hWnd As Long, _
            ByVal hWndInsertAfter As Long, _
            ByVal x As Long, _
            ByVal y As Long, _
            ByVal cx As Long, _
            ByVal cy As Long, _
            ByVal wFlags As Long) As Long

Public Declare Function FindWindow Lib "user32" _
            Alias "FindWindowA" _
            (ByVal lpszClassName As String, _
            ByVal lpszWindow As String) As Long

Public Const SWP_NOMOVE = &H2
Public Const SWP_NOSIZE = &H1
Public Const SWP_NOACTIVATE = &H10

Public Const HWND_TOPMOST = -1
Public Const HWND_NOTOPMOST = -2

Public Flg As Boolean

Public Sub test()
  Flg = False
  UserForm1.Show vbModeless
End Sub

Public Sub SetTopMost(Optional ByVal Dummy As Boolean)
  Dim hWnd As Long
  hWnd = FindWindow("ThunderDFrame", UserForm2.Caption)
  SetWindowPos hWnd, HWND_TOPMOST, 0, 0, 0, 0, _
         SWP_NOMOVE Or SWP_NOSIZE Or SWP_NOACTIVATE
End Sub

(UserForm1モジュール)-----------------------------------------------------

Private Sub CommandButton1_Click()
  Flg = True
  UserForm2.Show vbModeless
End Sub

Private Sub UserForm_Activate()
  Dim hWnd As Long
  
  If Flg Then
    Application.OnTime Now(), "SetTopMost"
  End If
End Sub

Private Sub UserForm_Terminate()
  Unload UserForm2
End Sub

(UserForm2モジュール)-----------------------------------------------------

Private Sub UserForm_Activate()
  Dim hWnd As Long
  hWnd = GetActiveWindow()
  SetWindowPos hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
End Sub

Private Sub UserForm_Terminate()
  Flg = False
End Sub


UserForm2をアクティブにしたときには最前面にはせず、UserForm1をクリックしたとき
(=UserForm1をアクティブにしたとき)にのみ、UserForm2を最前面にしてます。

試してみてな。
ほな。

【39073】Re:ControlTipText が下に隠れないように...
発言  bykin  - 06/6/17(土) 10:34 -

引用なし
パスワード
   ああっ!テスト中のごみが・・・(^^;;

>(UserForm1モジュール)-----------------------------------------------------
>Private Sub UserForm_Activate()
>  Dim hWnd As Long

↑UserForm1の、このプロシージャのhWndっていう変数は不要です。
すんまへーん。

【39078】Re:ControlTipText が下に隠れないように...
お礼  西谷 さくら  - 06/6/17(土) 15:57 -

引用なし
パスワード
   ▼bykin さん:
動きました!ありがとうございます。
でも、下のApplication.OnTime Now(), なしで単に
SetTopMost と書いても動いたんですが、App--- は
どういう働きがあるのでしょうか?
以下引用----
>Private Sub UserForm_Activate()
>  Dim hWnd As Long
>  
>  If Flg Then
>    Application.OnTime Now(), "SetTopMost"
>  End If
>End Sub

【39087】Re:ControlTipText が下に隠れないように...
発言  bykin  - 06/6/17(土) 17:28 -

引用なし
パスワード
   あれ?動いた?
わての環境では動かんかったんで、裏技使ったんやけど・・・
ま、使う可能性のあるPCで実験してみて動くんやったら
それでええんとちゃいまっか?

ほな。

【39105】Re:ControlTipText が下に隠れないように...
お礼  西谷 さくら  - 06/6/17(土) 22:33 -

引用なし
パスワード
   ▼bykin さん:
本当に動きました。Thanks!

>あれ?動いた?
>わての環境では動かんかったんで、裏技使ったんやけど・・・
>ま、使う可能性のあるPCで実験してみて動くんやったら
>それでええんとちゃいまっか?
>
>ほな。

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