fenhanxue 发表于 2017-4-13 00:58:41

求思路,月历控件 MonthCal 按日期做标记

GUICtrlCreateMonthCal("2017/04/13", 264, 256, 225, 233)



假设我有一个数据库,有些日期有记录,有些日期没有记录,那么我想在这个月历控件针对日期进行标记:
1)如果这个日期,在数据库里有记录,则对这个日期做相应的标记
2)如果这个日期,在数据库里没有记录,则不对这日期做标记。

标记的方式都可以,只要能够一目了然就行。例如给日期加上特定的颜色,例如日期上画个圆圈,例如日期字体加粗,等等等等。

翻阅了GuiMonthCal.au3似乎没有找到合适的函数
求思路,用什么方法(函数)可以对日期做标记?

举个例子:



即如何实现上面所说的画个圈或者加个横线或者改变颜色,等等等等

虫子樱桃 发表于 2017-4-13 08:33:49

本帖最后由 虫子樱桃 于 2017-4-13 08:50 编辑


;===============================================================================
; Function Name:   _GetHexMask($sDays [, $Delim=Default])
; Description:   creates mask to mark days with _GUICtrlMonthCal_SetDayState in MonthCal
; Parameter(s):    $sDays    string with days to mark
;                  $Delim    delimiter in string, 'Default' (char from 'GUIDataSeparatorChar')
; Return Value(s): Hexstring for $aMasks
; Author(s):       BugFix (bugfix@autoit.de)
;===============================================================================
Func _GetHexMask($sDays, $Delim=Default)
    If $Delim = Default Then $Delim = Opt('GUIDataSeparatorChar')
    $aDays = StringSplit($sDays, $Delim, 2)
    Local $aHex = , $pos, $out = ''
    For $i = 0 To UBound($aDays) -1
      Select
            Case $aDays[$i] < 5
                $pos = 0
            Case $aDays[$i] < 9
                $pos = 1
            Case $aDays[$i] < 13
                $pos = 2
            Case $aDays[$i] < 17
                $pos = 3
            Case $aDays[$i] < 21
                $pos = 4
            Case $aDays[$i] < 25
                $pos = 5
            Case $aDays[$i] < 29
                $pos = 6
            Case Else
                $pos = 7
      EndSelect
      $aDays[$i] -= $pos * 4
      $aHex[$pos] += 2 ^ ($aDays[$i]-1)
    Next
    For $i = 0 To UBound($aHex) -1
      $out = Hex($aHex[$i], 1) & $out
    Next
    Return '0x' & $out
EndFunc;==>_GetHexMask



#include <GuiConstantsEx.au3>
#include <GuiMonthCal.au3>
#include <WindowsConstants.au3>
#include <Constants.au3>

Opt('MustDeclareVars', 1)

Global $Debug_MC = False; Check ClassName being passed to MonthCal functions, set to True and use a handle to another control to see it work

_ThemeLevel(1)

Global $iMemo

_Main()

Func _Main()
    Local $hMonthCal

   ; Create GUI
    GUICreate("Month Calendar Set Color", 400, 300)
    $hMonthCal = GUICtrlCreateMonthCal("", 4, 4, -1, -1, $WS_BORDER, 0x00000000)

   ; Create memo control
    $iMemo = GUICtrlCreateEdit("", 4, 168, 392, 128, 0)
    GUICtrlSetFont($iMemo, 9, 400, 0, "Courier New")
    GUISetState()

   ; Get/Set calendar color
    MemoWrite("Background: 0x" & Hex(_GUICtrlMonthCal_GetColor($hMonthCal, $MCSC_MONTHBK), 6))
    _GUICtrlMonthCal_SetColor($hMonthCal, $MCSC_MONTHBK, $CLR_MONEYGREEN)
    MemoWrite("Background: 0x" & Hex(_GUICtrlMonthCal_GetColor($hMonthCal, $MCSC_MONTHBK), 6))

   ; Loop until user exits
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUIDelete()
EndFunc;==>_Main

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

; Functionality :
; just info about possibility to turn off theme-using in scripts/compiled-exe with using GUI stuff
; This info was produced by Holger
Func _ThemeLevel($nFlag = 0)
    ; $nFlag = 0; Visual styles are completely disabled in the running script
    ; $nFlag = 1; Nonclient areas of the GUI can use visual styles
    ; $nFlag = 2; Controls can use visual styles (like Buttons, Progressbar, Group-ctrl's, etc.)
    ; $nFlag = 4; Web content displayed ??? (info from MSDN) can use visual styles
    ;
    ; These flags can be combined with BitOr(...)

    DllCall("uxtheme.dll", "none", "SetThemeAppProperties", "int", $nFlag)
EndFunc   ;==>_ThemeLevel

fenhanxue 发表于 2017-4-13 11:25:26

回复 2# 虫子樱桃


    _GUICtrlMonthCal_SetDayState

这个实现的是日期加粗效果么?能否实现别的效果(诸如加颜色之类的)。加粗和不加粗的日期,肉眼分辨有点吃力,要很仔细看才能看清楚

tubaba 发表于 2017-4-13 11:42:55

试了一下_GetHexMask

        Local $day ='1|8|16'
        $day = _GetHexMask($day)
结果是$day = 0x00008080

应该是$day = 0x00008081
与实际不符

fenhanxue 发表于 2017-4-16 00:45:09

还是无解状态
页: [1]
查看完整版本: 求思路,月历控件 MonthCal 按日期做标记