ab.com コミュニティ https://www.activebasic.com/forum/ |
|
Date and Time Picker の使い方 https://www.activebasic.com/forum/viewtopic.php?t=2490 |
ページ 1 / 1 |
作成者: | rikaeigo2 [ 2008年10月28日(火) 20:54 ] |
記事の件名: | Date and Time Picker の使い方 |
こんにちは。初心者rikaeigo2です。 とあるサイトのSampleを見てDate and Time Pickerで日付と時刻を入力するウインドウを作成しました。丸写しです。 Function CreateDTP(hWnd As DWord, lpStyle As DWord,px As Long, py As Long, width As Long, hight As Long) As Long CreateDTP = CreateWindowEx(0, "SysDateTimePick32", NULL, _ WS_VISIBLE or WS_BORDER or WS_CHILD or WS_TABSTOP or _ WS_CLIPCHILDREN or WS_CLIPSIBLINGS or lpStyle, _ px, py, width, hight, hWnd, 0, GetModuleHandle(NULL), 0) End Function ーーー中略ーーー '日付用(DTS_LONGDATEFORMAT) hDate1 = CreateDTP(hMainWnd, DTS_LONGDATEFORMAT, 25, 25, 200, 25) hDate2 = CreateDTP(hMainWnd, DTS_LONGDATEFORMAT, 25, 75, 200, 25) '時間用(DTS_TIMEFORMAT) hTime1 = CreateDTP(hMainWnd, DTS_TIMEFORMAT, 25, 125, 200, 25) と、ここまでは良いのですが、時刻の数値をゲットする方法は書いてありませんでした。「詳細はMSDNのリファレンスを参照」と書いてありましたが、MSDNのサイトのどこにそれがあるかもわかりませんでした。;; どなたか教えてください。 |
作成者: | konisi [ 2008年10月29日(水) 00:14 ] |
記事の件名: | |
数値をゲットって言うと・・・ コード: Declare Function strtok CDECL Lib "crtdll" (s1 As *Byte,s2 As *Byte) As *Byte Sub MainWnd_CommandButton1_Click() Dim buf[255] As Byte,k As *Byte k=buf GetWindowText(hTime1,k,255) strtok(k,":"):SetWindowText(GetDlgItem(hMainWnd,Static1),k):k=k+lstrlen(k)+1 strtok(k,":"):SetWindowText(GetDlgItem(hMainWnd,Static2),k):k=k+lstrlen(k)+1 SetWindowText(GetDlgItem(hMainWnd,Static3),k) End Subこんな具合ですか? |
作成者: | MK [ 2008年10月29日(水) 01:41 ] |
記事の件名: | Re: |
こんばんは、目的の内容かどうかはわかりませんが... コントロールがメインウィンドウにあるというのを前提に説明します。 ざっとかいてみましたが参考にしてください。(AB4.24で実施) ※そちらの「hDate1」に対するコードのみを提示いたしました。 日付を選択したとたんにEditBoxへ結果を表示します。 1.EditBox(EditBox1)をメインウィンドウに1個配置してください。(テスト用) 2.グローバル領域に以下の構造体などを定義します。 コード: ' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。 Type NMDATETIMECHANGE nmhdr As NMHDR dwFlags As DWORD st As SYSTEMTIME End Type Const DTN_FIRST = (-760) Const DTN_DATETIMECHANGE = (DTN_FIRST + 1) Dim DTPInfo As NMDATETIMECHANGE2.「MainWndProc」に以下のコードを書き込みます。 コード: Function MainWndProc(hWnd As HWND, dwMsg As DWord, wParam As WPARAM, lParam As LPARAM) As DWord ' TODO: この位置にウィンドウメッセージを処理するためのコードを記述します。 Select Case dwMsg Case WM_NOTIFY '送られてきたlParamの内容を「DTPInfo」へコピーする memcpy(VarPtr(DTPInfo),lParam,Len(DTPInfo)) '日付時刻の変更通知ならば... If DTPInfo.nmhdr.code = DTN_DATETIMECHANGE Then '送信元が「hDate1」ならば... If DTPInfo.nmhdr.hwndFrom = hDate1 Then Dim temp[100] As Byte wsprintf(temp, "選択された日付:%04d/%02d/%02d" ,DTPInfo.st.wYear, DTPInfo.st.wMonth , DTPInfo.st.wDay) 'メインウィンドウのEditBox1へ結果を表示する SetDlgItemText(hMainWnd,EditBox1,temp) End If End If Exit Function End Select ' イベントプロシージャの呼び出しを行います。 MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam) End Function日付・時刻の数値データ(年・日・分・秒など)は「DTPInfo.st」の中にさらに格納されてます。これはSYSTEMTIME構造体なので、SYSTEMTIME構造体関連の情報で確認してください。 |
作成者: | rikaeigo2 [ 2008年10月29日(水) 20:38 ] |
記事の件名: | ありがとうございました。 |
お二方にお教えくださった方法、両方とも数値をGetできました。 ご親切にありがとうございました。^^ |
ページ 1 / 1 | 全ての表示時間は UTC+09:00 です |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |