sysdatetimepick32について色々調べたり試したりしてみましたが、
私の調べた限り、右寄せで表示する方法は見当たりませんでした。
(ウィンドウスタイルにES_RIGHTを追加してもダメ。
DTM_GETDATETIMEPICKERINFOを使えばテキストボックスのハンドルを
取得できると聞いたので試してみても、結局ハンドルは取得できず)
「時間の表示」と仰っていますが、sysdatetimepick32を使う理由は
それだけでしょうか?
sysdatetimepick32はユーザーに日付や時刻を入力させるためのものなので、
表示だけを行うのであれば、へびさんの言うとおり関数で日時を取得し、
mes等で表示するのが良いと思います。
役に立つかどうかわかりませんが、
posで指定したカレントポジションに文字列の右側を合わせて表示するモジュールを
作ってみました。
これをソースコードの冒頭に置けばmes_exという命令が使えるようになります。
#include "user32.as"
//mes_ex p1,p2,p3,p4
//文字列p1の内容を表示する。
//p2(省略時は-1):負の値の時はカレントポジションに文字列の左側を合わせる。
// 0の時は中央寄せ、正の値の時は右寄せ。
//p3(省略時は-1):負の値の時はカレントポジションに文字列の上側を合わせる。
// 0の時は中央寄せ、正の値の時は下寄せ。
//p4(省略時は0):0以外を指定した場合は文字列を描画したあとカレントポジションを右に移動させる。
// 0を指定するか省略時はカレントポジションを下に移動させる。
#module
#const DT_CENTER 0x1
#const DT_RIGHT 0x2
#const DT_VCENTER 0x4
#const DT_BOTTOM 0x8
#const DT_CALCRECT 0x400
#define global mes_ex(%1="",%2=-1,%3=-1,%4=0) _mes_ex %1,%2,%3
#deffunc _mes_ex str text,int lr,int tb,int notcr
dim rect,4 : opt=0
if lr=0 : opt|=DT_CENTER : else : if lr>0 : opt|=DT_RIGHT
if tb=0 : opt|=DT_VCENTER : else : if tb>0 : opt|=DT_BOTTOM
DrawText hdc,text,-1,varptr(rect),opt|DT_CALCRECT
w=rect(2)-rect(0) : h=rect(3)-rect(1)
if lr<0 {
rect(0)=ginfo_cx : rect(2)=ginfo_cx+w
} else {
if lr>0 {
rect(2)=ginfo_cx : rect(0)=ginfo_cx-w
} else {
rect(0)=ginfo_cx-w/2 : rect(2)=ginfo_cx+w-w/2
}
}
if tb<0 {
rect(1)=ginfo_cy : rect(3)=ginfo_cy+h
} else {
if tb>0 {
rect(3)=ginfo_cy : rect(1)=ginfo_cy-h
} else {
rect(1)=ginfo_cy-h/2 : rect(3)=ginfo_cy+h-h/2
}
}
DrawText hdc,text,-1,varptr(rect),opt
mref bmscr,67 //DrawTextでの描画はredrawを使わないと反映されないので、redrawの必要があるかどうかを調べる。
if (bmscr(19)>>16)&0xFFFF {
redraw 1,rect(0),rect(1),w,h
}
if notcr {
pos ginfo_cx+w,ginfo_cy
} else {
pos ginfo_cx,ginfo_cy+h
}
return
#global