解決済みですが、せっかく書いたので参考にしてみて下さい(^^;
検索ボックスの様に、フォーカスを当てると消えるタイプです。
手法としては、
入力ボックスの上にダミーの文字列としてスタティックテキストを配置。
フォーカスを得たら、スタティックテキストが非表示になるようにしてます。
また、スタティックテキストが描画されようとしているときに割り込んで、
文字数を見て何も入ってなければ表示するようにしてます。
API、API、oncmdの乱舞で申し訳ないですけど。。。
#include "user32.as"
#include "gdi32.as"
// inputボックス
box=""
pos 150, 30
input box,150,22
id_input = stat
hw_input = objinfo_hwnd(stat)
// input内のダミーテキスト
; inputボックスのサイズを取得
dim rect,4
GetWindowRect hw_input, varptr.rect
ScreenToClient hwnd, varptr.rect(0)
ScreenToClient hwnd, varptr.rect(2)
;サイズを一回り小さくする
rect = rect(0)+6, rect(1)+2, rect(2)-2, rect(3)-2
;ダミーのスタティックテキスト作成
pos rect(0), rect(1)
winobj "static", "", , $50000000/*WS_CHILD|WS_VISIBLE*/ | $200/*SS_CENTERIMAGE*/, rect(2)-rect(0), rect(3)-rect(1)
hw_input_dummy = objinfo_hwnd(stat)
// デフォルトGUIフォント
GetStockObject 17
sendmsg hw_input_dummy, $30/*WM_SETFONT*/, stat
// ダミーテキストの設定
sendmsg hw_input_dummy, $C/*WM_SETTEXT*/, 0, "Google(日本語)"
// フォーカスを逃がすためのテキトーなオブジェクト
pos 10,30
input nn
sysfont 17
mes "↑フォーカス逃がし用"
objsel stat
;スタティックテキストの色を変更するため割り込み
oncmd gosub *ctlcolorstatic, $138/*WM_CTLCOLORSTATIC*/
;テキストボックスが描画されようとしているときに割り込み
oncmd gosub *CTLCOLOREDIT, $133/*WM_CTLCOLOREDIT*/
;フォーカス変化を監視する
oncmd gosub *command, $111/*WM_COMMAND*/
stop
// スタティックテキストの色を変更
*ctlcolorstatic
if lparam = hw_input_dummy {
// ダミーテキストの文字色、背景色の変更
GetSysColor 17 /*COLOR_GRAYTEXT ; 淡色状態 (無効状態) のテキストの色 */
SetTextColor wparam, stat
SetBkMode wparam, 1 /*TRANSPARENT ; バックグラウンドカラーをつけない*/
GetSysColorBrush 5 /*COLOR_WINDOW ; ウィンドウの背景色*/
return stat
}
return
// テキストボックスが描画されようとしている
*CTLCOLOREDIT
if lparam = hw_input {
;inputの文字数を取得
sendmsg hw_input, $E/*WM_GETTEXTLENGTH*/, 0,0
if stat=0 {
;文字数が0ならダミーテキストを再描画
InvalidateRgn hw_input_dummy,0,1
return
}
}
return
// フォーカス変化を監視
*command
if lparam = hw_input {
wp_HIWORD = wparam>>16 & $FFFF
switch wp_HIWORD
case $100 : ;(EN_SETFOCUS)
// フォーカスを得た。 ダミーテキストを消す
GetWindowLong hw_input_dummy,-16
SetWindowLong hw_input_dummy,-16,stat|$10000000^$10000000 ;WS_VISIBLE = $10000000
swbreak
case $200 : ;(EN_KILLFOCUS)
// フォーカスを失った。 inputに入力がなければダミーテキストを表示
sendmsg hw_input, $E/*WM_GETTEXTLENGTH*/, 0,0
if stat=0 {
GetWindowLong hw_input_dummy,-16
SetWindowLong hw_input_dummy,-16,stat|$10000000 ;WS_VISIBLE = $10000000
}
swbreak
swend
}
return