ポップアップフォームを置く             <TOP>


ClientToScreen 指定されたウィンドウ上の点の座標を、クライアント領域の座標からスクリーン座標に変換

ShowWindow 指定されたウィンドウの表示状態を設定

SetWindowPos フォームを常に表示

 

 

'================================================================
'= EditBoxの下にポップアップフォームを置く
'=    (ShowWindow.bas)
'================================================================
#include "Windows.bi"

Type POINTAPI
    X As Long
    Y As Long
End Type

' 指定されたウィンドウ上の点の座標を、クライアント領域の座標からスクリーン座標に変換
Declare Function Api_ClientToScreen& Lib "user32" Alias "ClientToScreen" (ByVal hWnd&, lpPoint As POINTAPI)

' 指定されたウィンドウの表示状態を設定
Declare Function Api_ShowWindow& Lib "user32" Alias "ShowWindow" (ByVal hWnd&, ByVal nCmdShow&)

' フォームを常に表示
Declare Function Api_SetWindowPos& Lib "user32" Alias "SetWindowPos" (ByVal hWnd&, ByVal hWndInsertAfter&, ByVal X&, ByVal Y&, ByVal cx&, ByVal cy&, ByVal wFlags&)

#define SW_SHOWNOACTIVATE 4        '直前の位置とサイズで表示。アクティブなウィンドウはアクティブな状態を維持。
#define HWND_TOPMOST -1            'ウインドウをウインドウリストの一番上に配置
#define SWP_NOSIZE &H1             'ウインドウの現在のサイズを保持
#define SWP_NOMOVE &H2             'ウインドウの現在位置を保持

Var Shared Form2 As Object
Var Shared Edit1 As Object
Var Shared Button1 As Object

Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 14
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    Var Ret As Long

    Form2.CreateWindow "Form2", 0
    Form2.SetFontSize 14
    Ret = Api_SetWindowPos(Form2.GethWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)
End Sub

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var pt As POINTAPI
    Var Ret As Long

    pt.X = 0
    pt.Y = Edit1.GetHeight
    Ret = Api_ClientToScreen(Edit1.GethWnd, pt)

    Form2.MoveWindow pt.X, pt.Y
    Form2.SetWindowSize Edit1.GetWidth, Edit1.GetHeight * 2
    Form2.Symbol(3, 2), "Form2", 1, 1
    Ret = Api_ShowWindow(Form2.GethWnd, SW_SHOWNOACTIVATE)
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End