UWSCの標準ダイアログをカスタマイズする
公式掲示板に「ボックスをフォームの中央に表示させたい」というのがあったので、考えてみた。
やはり、、、一旦画面外に表示して、スレッドで操作でしょう。
まずは回答スクリプト
Dlg.uws
OPTION EXPLICIT IFB REPLACE(REPLACE(GET_UWSC_NAME, ".EXE", ""), ".UWS", "") = "Dlg" THEN DIM msg = "マウスポインターのあるウインドウの中央に表示。<#CR>または相対位置" DIM id, mode = -1 WHILE msg <> EMPTY IF mode = -1 THEN id = GETID(GET_FROMPOINT_WIN) Dlg.MessageBox(msg, id) IF mode = -1 THEN id = GETID(GET_FROMPOINT_WIN) msg = Dlg.InputBox("表示させるメッセージをどうぞ", id) IFB msg = EMPTY THEN IF mode = -1 THEN id = GETID(GET_FROMPOINT_WIN) SELECT Dlg.SelectBox(SLCT_BTN, 0, "現在ポインターが指すWindowに固定する?", "はい,いいえ,終了", id) CASE SLCT_1 mode = GETID(GET_FROMPOINT_WIN) msg = "固定モード" CASE SLCT_2 mode = -1 msg = "マウスポインターに従う" SELEND ENDIF WEND ENDIF MODULE Dlg PROCEDURE _moveThread(x, y, baseId, title, class) IF baseId < 0 THEN baseId = GETID(GET_ACTIVE_WIN) SLEEP(0.1) DIM wid = GETID(title, class) IFB wid > -1 THEN DIM bx = STATUS(baseId, ST_X), by = STATUS(baseId, ST_Y) DIM bw = STATUS(baseId, ST_WIDTH), bh = STATUS(baseId, ST_HEIGHT) DIM mw = STATUS(wid, ST_WIDTH), mh = STATUS(wid, ST_HEIGHT) IFB x = ERR_VALUE THEN x = bx + (bw - mw) / 2 ELSE x = x + bx ENDIF IFB y = ERR_VALUE THEN y = by + (bh - mh) / 2 ELSE y = y + by ENDIF ACW(wid, x, y) ENDIF FEND FUNCTION MessageBox(msg, baseId=ERR_VALUE, btn=BTN_OK, x=ERR_VALUE, y=ERR_VALUE, fcs=BTN_OK) THREAD _moveThread(x, y, baseId, REPLACE(GET_UWSC_NAME, ".EXE", ""), "TFmsgDlg.UnicodeClass") RESULT = MSGBOX(msg, btn, -ERR_VALUE, -ERR_VALUE, fcs) FEND FUNCTION InputBox(msg, baseId=ERR_VALUE, def="", pass=FALSE, x=ERR_VALUE, y=ERR_VALUE) THREAD _moveThread(x, y, baseId, REPLACE(GET_UWSC_NAME, ".EXE", ""), "TFInpBox.UnicodeClass") RESULT = INPUT(msg, def, pass, -ERR_VALUE, -ERR_VALUE) FEND FUNCTION SelectBox(type, time, msg, sels, baseId=ERR_VALUE, x=ERR_VALUE, y=ERR_VALUE) THREAD _moveThread(x, y, baseId, REPLACE(GET_UWSC_NAME, ".EXE", ""), "TFSectBox.UnicodeClass") RESULT = SLCTBOX(type, time, -ERR_VALUE, -ERR_VALUE, msg, SPLIT(sels, ",")) FEND ENDMODULE
なるべく標準関数と同じ引数にして、baseIdを追加。
スレッドを起動しておき、標準関数による表示の後、スレッドが座標計算して表示。
ま、いろいろカスタマイズする必要はあるかもしれません。
あとは、以下を参考にすると、半透明とか右寄せとかもできたりします。
UWSCでウインドウスタイルを変更する - じゅんじゅんのきまぐれ