フォームを最前面に(U) <TOP>
SetWindowPos APIを使ってフォームを最前面に表示

'================================================================
'= フォームを最前面に(U・V)
'================================================================
#include "Windows.bi"
' 指定のウインドウのサイズ・位置・Zオーダーを設定する
Declare Function API_SETWINDOWPOS& Lib "user32" Alias "SetWindowPos" (ByVal HWND&, ByVal HWNDINSERTAFTER&, ByVal X&, ByVal Y&, ByVal CX&, ByVal CY&, ByVal WFLAGS&)
#define HWND_TOPMOST -1 'ウインドウをウインドウリストの一番上に配置
#define SWP_NOSIZE &H1 'ウインドウの現在のサイズを保持
#define SWP_NOMOVE &H2 'ウインドウの現在位置を保持
'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
Var RES As Long
' 現在の位置とサイズでウインドウリストの一番上に配置
RES = API_SETWINDOWPOS(MAINFORM.GETHWND, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)
End Sub
'================================================================
'=
'================================================================
While 1
WaitEvent
Wend
Stop
End
フォームを最前面に(V) <TOP>
APIを使ってフォームを最前面に表示 SetWindowPos
Aと同じですが、実行ボタンをクリックするとフォームが左上から中央に向かって移動します。
移動中に、他のウィンドウを被せた場合フォームが最前面になるかどうかの確認をしています。それだけ・・(--;)

'================================================================
'= フォームを最前面に(V)
'================================================================
#include "Windows.bi"
'指定のウインドウのサイズ・位置・Zオーダーを設定する
Declare Function Api_SetWindowPos& Lib "user32" Alias "SetWindowPos" (ByVal hWnd&, ByVal hWndInsertAfter&, ByVal X&, ByVal Y&, ByVal CX&, ByVal CY&, ByVal uFlags&)
#define HWND_TOP 0 'Zオーダーのトップ
#define HWND_TOPMOST -1 'ウインドウをウインドウリストの一番上に配置
#define SWP_NOSIZE &H1 'ウインドウの現在のサイズを保持
#define SWP_NOMOVE &H2 'ウインドウの現在位置を保持
Var Shared Timer1 As Object
Timer1.Attach GetDlgItem("Timer1")
Var Shared cnt As Long
'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
Timer1.SetInterval 10
Timer1.Enable 0
End Sub
'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
Timer1.Enable -1
End Sub
'================================================================
'=
'================================================================
Declare Sub Timer1_Timer edecl ()
Sub Timer1_Timer()
Var Ret As Long
cnt = cnt + 1
If cnt < 30 Then
Ret = Api_SetWindowPos(GethWnd, HWND_TOPMOST, cnt * 10, cnt * 10, 0, 0, SWP_SHOWWINDOW Or SWP_NOSIZE)
Else
Ret = Api_SetWindowPos(GethWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW Or SWP_NOSIZE)
Timer1.Enable 0
cnt = 0
End If
End Sub
'================================================================
'=
'================================================================
While 1
WaitEvent
Wend
Stop
End