ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年3月29日(金) 03:00

全ての表示時間は UTC+09:00 です




新しいトピックを投稿する  トピックへ返信する  [ 4 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2008年10月28日(火) 20:54 
オフライン

登録日時: 2008年7月30日(水) 23:50
記事: 23
こんにちは。初心者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のサイトのどこにそれがあるかもわかりませんでした。;;
どなたか教えてください。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2008年10月29日(水) 00:14 
オフライン

登録日時: 2005年7月25日(月) 13:27
記事: 893
お住まい: 埼玉県東松山市
数値をゲットって言うと・・・
コード:
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
こんな具合ですか?

_________________
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。


通報する
ページトップ
 記事の件名: Re:
投稿記事Posted: 2008年10月29日(水) 01:41 
こんばんは、目的の内容かどうかはわかりませんが...

コントロールがメインウィンドウにあるというのを前提に説明します。
ざっとかいてみましたが参考にしてください。(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 NMDATETIMECHANGE

2.「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構造体関連の情報で確認してください。


通報する
ページトップ
   
投稿記事Posted: 2008年10月29日(水) 20:38 
オフライン

登録日時: 2008年7月30日(水) 23:50
記事: 23
お二方にお教えくださった方法、両方とも数値をGetできました。
ご親切にありがとうございました。^^


通報する
ページトップ
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 4 件の記事 ] 

全ての表示時間は UTC+09:00 です


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[14人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean