Last Update : 2008/03/xx
HSPの標準命令には用意されていないオブジェクト(コントロール)を表示するサンプルコードを掲載しています。細かい解説は、ほとんど用意していませんです。その他のオブジェクトは、別ページになります。
⇒ タブコントロール、ツールチップ、リストビュー+カスタムドロー
⇒ トラックバー、アップダウンコントロール
⇒ アニメーションコントロール、プログレスバー
Windowsのシステムが用意している月間カレンダーコントロール(月間予定表コントロール)です。日付データはSYSTEMTIME構造体というのが使われます。
// 月間カレンダーコントロール サンプルソース1 (by Kpan) ; 月間カレンダーコントロールの設置 ; 追加のウィンドウスタイル ; $8=今日の日付を赤で囲わない ; $10=下部分の「今日」を非表示 winobj "sysmonthcal32", "", , $50000000 | $10, 300, 200 hMonthcal = objinfo(stat, 2) ; SYSTEMTIME構造体の領域確保 ; 年/月/曜日/日/時/分/秒/ミリ秒 が2バイトづつ dim SYSTEMTIME, 4 pos , 200 button "取得", *get button "設定", *set stop *get ; 明示的な指定日の取得 (MCM_GETCURSEL) sendmsg hMonthcal, $1001, , varptr(SYSTEMTIME) mes ""+wpeek(SYSTEMTIME, 0)+"年"+wpeek(SYSTEMTIME, 2)+"月"+wpeek(SYSTEMTIME, 6)+"日 stop *set ; SYSTEMTIME構造体に書き込み wpoke SYSTEMTIME, 0, 2010 //2010年Xmas wpoke SYSTEMTIME, 2, 12 wpoke SYSTEMTIME, 6, 25 ; 明示的な指定日の設定 (MCM_SETCURSEL) sendmsg hMonthcal, $1002, , varptr(SYSTEMTIME)
// 月間カレンダーコントロール サンプルソース2 (by Kpan)
// コントロールの状態変化をリアルタイムで監視
; WM_NOTIFYメッセージの指定
oncmd gosub *notify, $4E
winobj "sysmonthcal32", "", , $50000000, 150, 150
hMonthcal = objinfo(stat, 2)
stop
; WM_NOTIFYメッセージ
*notify
; NMHDR構造体 (NMHDR.0には月間カレンダーコントロールのウィンドウハンドル)
dupptr NMHDR, lparam, 12
; 選択状態の変化を示す通知コード (MCN_SELCHANGE)
if NMHDR.2 = -749 {
; NMSELCHANGE構造体 (中身はNMHDR構造体+SYSTEMTIME構造体)
dupptr NMSELCHANGE, lparam, 20
mes ""+wpeek(NMSELCHANGE, 12 + 0)
mes ""+wpeek(NMSELCHANGE, 12 + 2)+"/"+wpeek(NMSELCHANGE, 12 + 6)
return
}
return
Windowsのシステムが用意している日時指定コントロール(DTPコントロール)です。DTPは「Date and Time Picker」のこと。時を刻む機能はなく日付or時間をユーザーに指定させるコントロールです。
// 日時指定コントロール サンプルソース1 (by Kpan)
; SYSTEMTIME構造体の領域確保
; 年/月/曜日/日/時/分/秒/ミリ秒 が2バイトづつ
dim SYSTEMTIME, 4
; 短い日付 (カレンダー)
winobj "sysdatetimepick32", "", , $50000000, 200
hDtp.0 = objinfo(stat, 2)
; 長い日付 (カレンダー)
winobj "sysdatetimepick32", "", , $50000000 | $4, 200
hDtp.1 = objinfo(stat, 2)
; 時間 (アップダウン)
winobj "sysdatetimepick32", "", , $50000000 | $9, 200
hDtp.2 = objinfo(stat, 2)
button "げっと", *get
stop
*get
repeat 3
; 日時の取得 (DTM_GETSYSTEMTIME)
sendmsg hDtp.cnt, $1001, , varptr(SYSTEMTIME)
mes ""+wpeek(SYSTEMTIME, 2)+"月"+wpeek(SYSTEMTIME, 6)+"日
mes "("+wpeek(SYSTEMTIME, 8)+":"+wpeek(SYSTEMTIME, 10)+")
loop
日時表記の自前のものに変更してみます。下の表は置き換え文字の書式一覧。
// 日時指定コントロール サンプルソース2 (by Kpan) winobj "sysdatetimepick32", "", , $50000000, 250 hDtp = objinfo(stat, 2) ; 表示書式設定 (DTM_SETFORMAT) sendmsg hDtp, $1005, , "MMMがつddにち (dddよーび) tthじmふん"
| yy | 2桁の年 |
| yyy | 4桁の年 |
| M | 1桁or2桁の月 (1桁の場合は空白埋め) |
| MM | 2桁の月 (1桁の場合は0埋め) |
| MMM | 1桁or2桁の月 (中央表示) |
| MMMM | 「1月〜12月」 |
| d | 1桁or2桁の日 |
| dd | 2桁の日 (1桁の場合は0埋め) |
| ddd | 「日曜日〜土曜日」 |
| dddd | 「日〜土」 |
| tt | 「午前・午後」 |
| h | 12時間表記で、1桁or2桁の時 |
| hh | 12時間表記で、2桁の時 (1桁の場合は0埋め) |
| H | 24時間表記で、1桁or2桁の時 |
| HH | 24時間表記で、2桁の時 (1桁の場合は0埋め) |
| m | 1桁or2桁の分 |
| mm | 2桁の分 (1桁の場合は0埋め) |
<< オブジェクト 8 | HSP3 オブジェクト | オブジェクト 1 >>
Copyright © 2005-2012 Kpan. All rights reserved.