フォームを最前面に(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