2016-10-14 8 views
1
#include <GUIConstantsEx.au3> 
#include <GuiMonthCal.au3> 
#include <WindowsConstants.au3> 

Global $g_idMemo 

Example() 

Func Example() 
    Local $idMonthCal 
    ; Create GUI 
    GUICreate("Month Calendar Get First DOW String", 400, 300) 
    $idMonthCal = GUICtrlCreateMonthCal("", 4, 4, -1, -1, $WS_BORDER, 0x00000000) 
    ; Create memo control 
    $g_idMemo = GUICtrlCreateEdit("", 4, 168, 392, 128, 0) 
    GUICtrlSetFont($g_idMemo, 9, 400, 0, "Courier New") 
    GUISetState(@SW_SHOW) 
    ; Get/Set first DOW 
    _GUICtrlMonthCal_SetFirstDOW($idMonthCal, 0) 
    MemoWrite("First DOW : " & _GUICtrlMonthCal_GetFirstDOWStr($idMonthCal)) 
    Do 
    Until GUIGetMsg() = $GUI_EVENT_CLOSE 
    GUIDelete() 
EndFunc 

; Write message to memo 
Func MemoWrite($sMessage) 
    GUICtrlSetData($g_idMemo, $sMessage & @CRLF, 1) 
EndFunc 

이 줄은 "월요일"을 반환합니다. 난 AutoIT 반입과 경험이고 학습하고 도전하고는 "월요일 2016년 10월 10일"첫날의 요일을 어떻게 알 수 있습니까?

MemoWrite("First DOW" & _GUICtrlMonthCal_GetFirstDOWStr($idMonthCal)) 

을 반환합니다. 이 질문이 너무 초보자라면 나에게 용서해주십시오. 감사합니다

답변

1

당신은 기능을 찾고 있지 않습니다 _GUICtrlMonthCal_GetFirstDOW. 달력 구성 요소의 현재 설정된 "첫 번째 열 날짜"를 반환합니다. 먼저 "월요일"로 설정하면 항상 "일요일"이 반환됩니다. 이것은 단지 구성합니다. 어느 날이 당신의 첫 번째 칼럼에있을 것입니다. 왼쪽 상단이 일요일 또는 다른 날로 시작하는지 여부.

가장 자주 사용하려는 것은 _GUICtrlMonthCal_GetCurSelStr($idMonthCal, "%02d/%02d/%04d")이고 이후에는 월별 캘린더에서 선택한 요일을 월요일에 해결하기 위해 수학을 수행 할 수 있습니다.

_DateAdd('d', -(_DateToDayOfWeek(@YEAR, @MON, @MDAY) - 1), _NowCalcDate())을 사용하면 이번 주에 마지막 일요일의 날짜를 계산할 수 있습니다.

0

이렇게 할 수있는 방법이 몇 가지 있습니다. 나는 너에게 편도를 보여줄 것이다.

코드를 멋지게 유지하기 위해 모든 것을 별도의 함수에 넣고 필요할 때 호출합니다. 오늘, 우리는 하나를 구축하고 전화를 겁니다 : 뜻을 행하려이 기능은 지난 월요일, 다음 날짜를 얻을 수 있었다 얼마나 많은 일 전 계산 무엇

analyzeDate()

합니다. 미리 정의 된 두 개의 함수를 사용하면 YYYY/MM/DD 형식으로 날짜가 반환됩니다. 찾고자하는 결과를 얻으려면 날짜를 연, 월, 일 (Respectively)로 나누고, 달을 분석 한 다음 원하는 형식으로 날짜를 설정할 수 있습니다.

아래 예제 기능을 참조하십시오.

Func analyzeDate()                 
    $iLastMon = _DateToDayOfWeek(@YEAR, @MON, @MDAY) - 2        
    ;MsgBox(0,"","Last Monday was " & $iLastMon & " days ago." & @LF)    
    $sLastMon = _DateAdd("D", ($iLastMon * -1), @YEAR & "/" & @MON & "/" & @MDAY) 
    ;MsgBox(0,"","Last Monday was " & $sLastMon & @LF)        
    global $tDate = ""                

    $newDate = StringSplit($sLastMon, "/")           
    If $newDate[2] = 1 Then               
     $tDate = "January " & $newDate[3] & ", " & $newDate[1]      
    ElseIf $newDate[2] = 2 Then              
     $tDate = "Febuary " & $newDate[3] & ", " & $newDate[1]      
    ElseIf $newDate[2] = 3 Then              
     $tDate = "March " & $newDate[3] & ", " & $newDate[1]       
    ElseIf $newDate[2] = 4 Then              
     $tDate = "April " & $newDate[3] & ", " & $newDate[1]       
    ElseIf $newDate[2] = 5 Then              
     $tDate = "May " & $newDate[3] & ", " & $newDate[1]       
    ElseIf $newDate[2] = 6 Then              
     $tDate = "June " & $newDate[3] & ", " & $newDate[1]       
    ElseIf $newDate[2] = 7 Then              
     $tDate = "July " & $newDate[3] & ", " & $newDate[1]       
    ElseIf $newDate[2] = 8 Then              
     $tDate = "August " & $newDate[3] & ", " & $newDate[1]      
    ElseIf $newDate[2] = 9 Then              
     $tDate = "September " & $newDate[3] & ", " & $newDate[1]      
    ElseIf $newDate[2] = 10 Then              
     $tDate = "October " & $newDate[3] & ", " & $newDate[1] 
    ElseIf $newDate[2] = 11 Then 
     $tDate = "November " & $newDate[3] & ", " & $newDate[1] 
    ElseIf $newDate[2] = 12 Then 
     $tDate = "December " & $newDate[3] & ", " & $newDate[1] 
    Else 
     MsgBox(16,"ERROR", "There was an issue analyzing the date!") 
     $tDate = "ERROR" 
    EndIf 
EndFunc 

지금, 당신은 당신이 MemoWrite을 (호출 직전에이 기능을)를 호출하고, MemoWrite의 매개 변수의 끝에 $ 있는데, TDate 변수를 추가 할 수 있습니다().

예 :

Calendar.au3

#include <GUIConstantsEx.au3> 
#include <GuiMonthCal.au3> 
#include <WindowsConstants.au3> 
; NEW ===================== 
#include <Date.au3>  ; = 
; ========================= 

Global $g_idMemo 

Example() 

Func Example() 
    Local $idMonthCal 
    ; Create GUI 
    GUICreate("Month Calendar Get First DOW String", 400, 300) 
    $idMonthCal = GUICtrlCreateMonthCal("", 4, 4, -1, -1, $WS_BORDER, 0x00000000) 
    ; Create memo control 
    $g_idMemo = GUICtrlCreateEdit("", 4, 168, 392, 128, 0) 
    GUICtrlSetFont($g_idMemo, 9, 400, 0, "Courier New") 
    GUISetState(@SW_SHOW) 
    ; Get/Set first DOW 
    _GUICtrlMonthCal_SetFirstDOW($idMonthCal, 0) 
    ; NEW ============= 
    analyzeDate() ; = 
    ; ================= 
    MemoWrite("First DOW : " & _GUICtrlMonthCal_GetFirstDOWStr($idMonthCal) & " " & $tDate) ; ADDED: & " " & $tDate 
    Do 
    Until GUIGetMsg() = $GUI_EVENT_CLOSE 
    GUIDelete() 
EndFunc 

; Write message to memo 
Func MemoWrite($sMessage) 
    GUICtrlSetData($g_idMemo, $sMessage & @CRLF, 1) 
EndFunc 

; NEW ================================================================================= 
Func analyzeDate()                 ; = 
    $iLastMon = _DateToDayOfWeek(@YEAR, @MON, @MDAY) - 2       ; = 
    ;MsgBox(0,"","Last Monday was " & $iLastMon & " days ago." & @LF)    ; = 
    $sLastMon = _DateAdd("D", ($iLastMon * -1), @YEAR & "/" & @MON & "/" & @MDAY) ; = 
    ;MsgBox(0,"","Last Monday was " & $sLastMon & @LF)        ; = 
    global $tDate = ""                ; = 
                        ; = 
    $newDate = StringSplit($sLastMon, "/")           ; = 
    If $newDate[2] = 1 Then               ; = 
     $tDate = "January " & $newDate[3] & ", " & $newDate[1]      ; = 
    ElseIf $newDate[2] = 2 Then              ; = 
     $tDate = "Febuary " & $newDate[3] & ", " & $newDate[1]      ; = 
    ElseIf $newDate[2] = 3 Then              ; = 
     $tDate = "March " & $newDate[3] & ", " & $newDate[1]      ; = 
    ElseIf $newDate[2] = 4 Then              ; = 
     $tDate = "April " & $newDate[3] & ", " & $newDate[1]      ; = 
    ElseIf $newDate[2] = 5 Then              ; = 
     $tDate = "May " & $newDate[3] & ", " & $newDate[1]       ; = 
    ElseIf $newDate[2] = 6 Then              ; = 
     $tDate = "June " & $newDate[3] & ", " & $newDate[1]       ; = 
    ElseIf $newDate[2] = 7 Then              ; = 
     $tDate = "July " & $newDate[3] & ", " & $newDate[1]       ; = 
    ElseIf $newDate[2] = 8 Then              ; = 
     $tDate = "August " & $newDate[3] & ", " & $newDate[1]      ; = 
    ElseIf $newDate[2] = 9 Then              ; = 
     $tDate = "September " & $newDate[3] & ", " & $newDate[1]     ; = 
    ElseIf $newDate[2] = 10 Then             ; = 
     $tDate = "October " & $newDate[3] & ", " & $newDate[1]      ; = 
    ElseIf $newDate[2] = 11 Then             ; = 
     $tDate = "November " & $newDate[3] & ", " & $newDate[1]      ; = 
    ElseIf $newDate[2] = 12 Then             ; = 
     $tDate = "December " & $newDate[3] & ", " & $newDate[1]      ; = 
    Else                   ; = 
     MsgBox(16,"ERROR", "There was an issue analyzing the date!")    ; = 
     $tDate = "ERROR"               ; = 
    EndIf                   ; = 
EndFunc                    ; = 
; ===================================================================================== 

출력이 유사 할 것입니다 :

analyzeDate() 
MemoWrite("First DOW : " & _GUICtrlMonthCal_GetFirstDOWStr($idMonthCal) & " " & $tDate) 

지금, 당신의 전체 코드는 다음과 유사 보일 것이다 :

날짜가 금요일 10 월 21 일입니다

오늘, 프로그램을 실행하는 경우

2016 년, 당신은 얻을 것이다 :

First DOW : Monday October 17, 2016 

난이 도움이되기를 바랍니다!이 문제에 문제가있는 경우 아래에 의견을 보내 주시고 나에게 무슨 일이 일어나는지 알려 주시기 바랍니다. 우리는 그것이 당신이 그것을 필요로하는 방식으로 작동하게하는 방법을 알아낼 수 있습니다.

감사합니다,