找回密码
 加入
搜索
查看: 2553|回复: 4

[系统综合] 求思路,月历控件 MonthCal 按日期做标记

[复制链接]
发表于 2017-4-13 00:58:41 | 显示全部楼层 |阅读模式
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[8] = [0,0,0,0,0,0,0,0], $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
 楼主| 发表于 2017-4-13 11:25:26 | 显示全部楼层
回复 2# 虫子樱桃


    _GUICtrlMonthCal_SetDayState

这个实现的是日期加粗效果么?能否实现别的效果(诸如加颜色之类的)。加粗和不加粗的日期,肉眼分辨有点吃力,要很仔细看才能看清楚
发表于 2017-4-13 11:42:55 | 显示全部楼层
试了一下_GetHexMask

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

应该是$day = 0x00008081
与实际不符
 楼主| 发表于 2017-4-16 00:45:09 | 显示全部楼层
还是无解状态
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-21 23:24 , Processed in 0.085197 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表