#Region - TimeStamp ; 2011-08-12 18:28:45 v 1.0 #EndRegion - TimeStamp ;=============================================================================== ; Function Name..: _GetHexMask($vDays [, $Delim=Default]) ; Description....: Codiert die übergebenen Tageszahlen (1-31) als Hex-String, wie er als Maske zum Markieren mit _GUICtrlMonthCal_SetDayState ; ...............: im MonthCal Anwendung findet ; Parameter(s)...: $vDays Trennzeichenbasierter String oder Array mit den zu markierenden Tagen ; ...............: $Delim das Trennzeichen, Standard ist 'Default' (Zeichen von 'GUIDataSeparatorChar') ; Return Value(s): Hexstring für $aMasks ; Author(s)......: BugFix (bugfix@autoit.de) ;=============================================================================== Func _GetHexMask($vDays, $sDelim=Default) If $sDelim = Default Then $sDelim = Opt('GUIDataSeparatorChar') If (( Not IsArray($vDays) ) And ($vDays = '') ) Or _ (( IsArray($vDays) ) And ($vDays[0] = '') ) Then Return '0x0' Else Local $aDays If (Not IsArray($vDays)) Then $aDays = StringSplit($vDays, $sDelim, 2) Else $aDays = $vDays EndIf Local $aHex[8] = [0,0,0,0,0,0,0,0], $pos, $mask = '' 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 $mask = Hex($aHex[$i], 1) & $mask Next Return '0x' & $mask EndIf EndFunc ;==>_GetHexMask ;=============================================================================== ; Function Name..: _DecodeHexMask($sHex [, $fArray=True[, $Delim=Default]]) ; Description....: Gibt die mit _GetHexMask() codierten Tageszahlen (1-31) als Array (Standard) oder Trennzeichenstring zurück ; Parameter(s)...: $sHex Der Hex-String mit dem/den codierten Zahlenwert/-en ; ...............: $fArray Rückgabe als Array (Standard), $a[0]=Anzahl oder String mit Trennzeichen ; ...............: $Delim Das Trennzeichen für Stringausgabe, Standard ist 'Default' (Zeichen von 'GUIDataSeparatorChar') ; Return Value(s): Array/String mit den im Hex-String codierten Tageszahlen ; Author(s)......: BugFix (bugfix@autoit.de) ;=============================================================================== Func _DecodeHexMask($sHex, $fArray=True, $sDelim=Default) If $sDelim = Default Then $sDelim = Opt('GUIDataSeparatorChar') Local $aHex = StringSplit(Hex($sHex, 8), '', 2), $iInt, $sOut = '' Local $aMask[8][4] = [[29,30,31],[25,26,27,28],[21,22,23,24],[17,18,19,20],[13,14,15,16],[9,10,11,12],[5,6,7,8],[1,2,3,4]] For $i = 7 To 0 Step -1 $iInt = Int('0x' & $aHex[$i]) If $iInt = 0 Then ContinueLoop For $j = 0 To 3 If BitAND($iInt, 2^$j) Then $sOut &= $aMask[$i][$j] & "," $iInt = BitXOR($iInt, 2^$j) EndIf Next Next If $fArray Then Return StringSplit(StringTrimRight($sOut, 1), ',') Return StringTrimRight($sOut, 1) EndFunc ;==>_DecodeHexMask