タスクバーを考慮してフォームを画面中央に(T)             <TOP>


タスクバーの高さを考慮してフォームを画面中央に表示します。

FORMは、プロパティで可視なしに設定しておき起動時表示位置を確定後表示させます。

SystemParametersInfo システムパラメータ情報の取得

 



 

'================================================================
'= タスクバーを考慮してフォームを画面中央に
'= MAINFORMは、可視なしに設定しておく
'================================================================
#include "Windows.bi"

'------------------------------
'WorkArea
'------------------------------
Type RECT
    LEFT   As Long
    TOP    As Long
    RIGHT  As Long
    BOTTOM As Long
End Type

' システムパラメータ情報の取得API
Declare Function API_SYSTEMPARAMETERSINFO& Lib "user32" Alias "SystemParametersInfoA" (ByVal UACTION&, ByVal UPARAM&, ByRef LPVPARAM As Any, ByVal FUWININI&)

#define SPI_GETWORKAREA 48              '主モニターの有効なスクリーンのサイズを取得

Var Shared MAINFORM As Object
Var Shared TEXT1 As Object
MAINFORM.ATTACH GETHWND
TEXT1.ATTACH GETDLGITEM("TEXT1")
TEXT1.SETFONTNAME "MS ゴシック"
TEXT1.SETFONTSIZE 14

'================================================================
'=
'================================================================
Declare Sub MAINFORM_START edecl ()
Sub MAINFORM_START()
    Var CRLF$ As String
    Var RES As Long
    Var WORKAREA As RECT

    CRLF$ = Chr$(13,10)

    ' ワークエリア取得
    RES = API_SYSTEMPARAMETERSINFO(SPI_GETWORKAREA, 0, WORKAREA, 0)

    SCRN_LEFT = (((WORKAREA.RIGHT - WORKAREA.LEFT) - MAINFORM.GETWIDTH) / 2) + WORKAREA.LEFT
    SCRN_TOP = (((WORKAREA.BOTTOM - WORKAREA.TOP) - MAINFORM.GETHEIGHT) / 2) + WORKAREA.TOP
    MAINFORM.MOVEWINDOW SCRN_LEFT, SCRN_TOP

    ' 位置決定後表示させる
    MAINFORM.SHOWWINDOW -1

    TXT$ =        "WorkArea.left   = " & Format$(WORKAREA.LEFT     ,"##,###") & CRLF$
    TXT$ = TXT$ & "WorkArea.right  = " & Format$(WORKAREA.RIGHT    ,"##,###") & CRLF$
    TXT$ = TXT$ & "WorkArea.top    = " & Format$(WORKAREA.TOP      ,"##,###") & CRLF$
    TXT$ = TXT$ & "WorkArea.bottom = " & Format$(WORKAREA.BOTTOM   ,"##,###") & CRLF$
    TXT$ = TXT$ & "FormWidth       = " & Format$(MAINFORM.GETWIDTH ,"##,###") & CRLF$
    TXT$ = TXT$ & "FormHeight      = " & Format$(MAINFORM.GETHEIGHT,"##,###") & CRLF$
    TXT$ = TXT$ & "Scrn_left       = " & Format$(SCRN_LEFT         ,"##,###") & CRLF$
    TXT$ = TXT$ & "Scrn_top        = " & Format$(SCRN_TOP          ,"##,###") & CRLF$
    TEXT1.SETWINDOWTEXT TXT$
End Sub

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