File "set-dlg-loc.bas"

Path: /dlg-utils/set-dlg-loc.bas
File size: 2.92 KB
MIME-type:
Charset: utf-8

#COMPILE EXE
#DIM ALL
#INCLUDE ONCE "DosPrint.inc"
#INCLUDE ONCE "FindDialog.inc"

$CLI  = "set-dlg-loc"
$ARG1 = "(x,y) ""dialog caption, all or part"""
$ARG2 = "(x,y) #12345 (hash followed by dialog handle)"
$NFO  = "Use x or y = -1 to center and -2 to right/bottom align"

FUNCTION PBMAIN () AS LONG
    LOCAL dlgList() AS STRING
    LOCAL nbDlg AS LONG
    LOCAL x, y AS LONG
    LOCAL dw, dh, w, h AS LONG
    LOCAL inTxt AS STRING
    LOCAL hD AS DWORD
    LOCAL caption AS STRING

    IF COMMAND$ = "" THEN
        CALL FreeConsole() ' Win32 mode -> hide console
        ?"This utility must be called via the command-line."+$CR+$CR _
        +"Usage:" + $CR + $CLI + $SPC + $ARG1 + $CR _
        +"or " + $CR + $CLI + $SPC + $ARG2 + $CR+$CR _
        +$NFO, %MB_ICONINFORMATION, $CLI
        EXIT FUNCTION
    END IF

    IF COMMAND$ = "/?" THEN
        DosPrint "Usage: " + $CLI + $SPC + $ARG1
        DosPrint "    or " + $CLI + $SPC + $ARG2
        DosPrint $NFO
        EXIT FUNCTION
    END IF

    ' Parse first parameter (x,y)
    inTxt = TRIM$(COMMAND$(1))
    IF LEFT$(inTxt,1) <> "(" THEN GOTO BadArg
    inTxt = MID$(inTxt,2)
    IF RIGHT$(inTxt,1) <> ")" THEN GOTO BadArg
    inTxt = LEFT$(inTxt,-1)
    IF INSTR(inTxt,",") = 0 THEN GOTO BadArg
    x = VAL(LEFT$(inTxt, INSTR(inTxt,",")-1))
    y = VAL(MID$(inTxt, INSTR(inTxt,",")+1))

    ' Parse second parameter dialog identifier
    inTxt = TRIM$(COMMAND$(2), ANY $SPC+$TAB+$DQ)

    ' Find all dialogs based on inTxt
    REDIM dlgList(0)
    IF LEFT$(inTxt, 1) = "#" THEN
        nbDlg = FindDialog("HND:" + MID$(inTxt,2), BYREF dlgList())
    ELSE
        nbDlg = FindDialog("CAP:" + inTxt, BYREF dlgList())
    END IF

    ' No dialog found
    IF nbDlg = 0 THEN
        DosPrint "No dialog found."
        EXIT FUNCTION
    END IF

    ' More than 1 dialog found
    IF nbDlg > 1 THEN
        DosPrint "Several dialogs found, please specify which one to take:"
        FOR x = 1 TO nbDlg
            DosPrint "  " + dlgList(x-1)
        NEXT
        EXIT FUNCTION
    END IF

    ' Just 1 dialog found > get its information
    hD = VAL(MID$(dlgList(0),2))
    caption = MID$(dlgList(0), INSTR(dlgList(0),":")+1)

    ' Special case of (x,y)
    DESKTOP GET CLIENT TO dw, dh    ' desktop width & height
    DIALOG GET SIZE hD TO w, h      ' dialog width & height
    IF x = -1 THEN x = (dw - w) \ 2 ' centered horizontally
    IF y = -1 THEN y = (dh - h) \ 2 ' centered vertically
    IF x = -2 THEN x = dw - w       ' right-aligned
    IF y = -2 THEN y = dh - h       ' bottom-aligned

    ' Set loc!
    DIALOG SET LOC hD, x, y
    DosPrint "Dialog found: #"+FORMAT$(hD)+$SPC+$DQ+caption+$DQ
    DosPrint "Location set to ("+FORMAT$(x)+","+FORMAT$(y)+")"
    EXIT FUNCTION

BadArg:
    DosPrint "Syntax Error."
    DosPrint "Usage: " + $CLI + $SPC + $ARG1
    DosPrint "    or " + $CLI + $SPC + $ARG2

END FUNCTION