VB开发安卓程序_例程10自定义日历类


运行截图

本例程需要库 AHLocale library

Main窗体代码如下:



#Region Module Attributes
	#FullScreen: False
	#IncludeTitle: True
	#ApplicationLabel: Custom Calendar Exemple
	#VersionCode: 1
	#VersionName: 
	#SupportedOrientations: unspecified
	#CanInstallToExternalStorage: False
#End Region

'Activity module
Sub Process_Globals
	
	
	'AHLocale对象提供了许多信息设备场所设置像货币符号等。
	
	'AHLocale library 类来源于	
'	https://www.b4x.com/android/forum/threads/ahlocale-library.7561/


	
End Sub

Sub Globals
	Dim CsCal As CustomCalendar

End Sub

Sub Activity_Create(FirstTime As Boolean)

	
	CsCal.Initialize(Me,"CsCal",100%x,100%y,DateTime.Now,1949,2100)
	Activity.AddView(CsCal.AsView,0,0,100%x,100%y)	
	
	CsCal.ShowCalendar(True)	
End Sub

Sub CsCal_ItemLongClick(dt As Long)	
	
	CsCal.ShowCalendar(False)

	Dim aa,dd,mm As Int
	aa=DateTime.GetYear(dt)
	dd=DateTime.GetDayOfMonth(dt)
	mm=DateTime.GetMonth(dt)
	
	Msgbox( CsCal.NmFullMonth(mm-1) &"  "&dd& "  " & aa," Date Selected")
    CsCal.ShowCalendar(True)	
	
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub








 

新建一个标准类CustomCalendar

'CustomCal3

'Class module
Sub Class_Globals
	
	Dim Local As AHLocale

	'lblDays 日历单元格,共6行,7列
	Private lblDays(42) As Label
	
	'btTitre 定义一栏用来显示周一周二等文字的标题栏
	Private btTitre(8) As Button   
	
	'lbtitle 用于显示标题
	Private lbtitle As Label  
	
	
	' lbToday 按钮一点可跳到今天
	Private lbToday As Label
	
	
	' lbCopy 按钮用来把当前指向的日期复制到剪切板
	Private lbCopy As Label
	
	
	
	'btNextMonth 下一月按钮
	Private btNextMonth As Label 
	
	'btPrevMonth 上一月按钮
	Private btPrevMonth As Label
	
	'spLabel 显示年份区域
	Private spLabel As Label 
	
	'SpYearsChoice 年份选择列表
	Private SpYearsChoice As Spinner
	
	'面板 pnl 是这个日历控件最底层的那个区域
	'面板 pnlbackGround 被放置在 面板 pnl  上,是日历控件显示的最核心区域
	Private pnl,pnlbackGround As Panel 
	
	'日历控件事件名称
	Private EventName As String
	
	'当前的日历控件将在哪个窗体中显示
	Private CallBack As Object	
	
	'Local.WeekDays 返回字符串的数组,其中包含的缩写名称的日子。
	Public NmFullday(7) As String 
	
	'Local.ShortMonths 返回字符串的数组包含几个月的缩写名称。
	Public NmMonth(12) As String 
	
	Public NmFullMonth(12) As String 
	
	Private CalDay, CalMonth, CalYear As Int
	Private RelativTextSize As Int
	
	
	
	'开始:日历控件颜色相关属性的默认值设定 -----------------------------------------
	
	'ColTable 为日历控件格了的边框线颜色
	Private ColTable As Int : ColTable = Colors.ARGB(200,182,189,209 )
	
	'ColInactive 日历表格中需要隐藏的日期文字颜色
	'inactive adj. 不活跃的;不活动的
	'active	  adj. 积极的;活跃的;主动的;
	Private ColInactive As Int : ColInactive = Colors.White
	
	'ColFunction 当前选中的日期格子的颜色
	Private ColFunction As Int : ColFunction = Colors.RGB(222,233,175)
	'Private ColFunction As Int : ColFunction = Colors.RGB(236,233,216)
		
	'ColActive  每个日历格子的背景色
	Private ColActive As Int : ColActive = Colors.White
	
	'ColBackGround 为整个日历控件最底层的背景色
	Private ColBackGround As Int : ColBackGround = Colors.White

	'结束:日历控件颜色相关属性的默认值设定 -----------------------------------------

	
	'SD	年份最早可以查哪一年 (沉默蜂加上去的功能)
	'ED	年份最晚可以查哪一年 (沉默蜂加上去的功能)	
	'日历控件查询的年份段由Initialize方法的两个参数决定,具体参考 Initialize
	Private SD, ED As Int 
	
	Private SomeTime As Long
	
End Sub


Public Sub Initialize(vCallback As Object, vEventName As String, Ww,Hh As Int, vBeginDate As Long,vSD,vED As Int)'初始化日历控件
	'初始化日历控件对象,如果需要,您可以添加这个方法的参数。

	Local.Initialize()

	'Local.WeekDays 返回字符串的数组,其中包含的缩写名称的日子。
	NmFullday = Local.WeekDays    ' Array As String("Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi")
	
	
	'Local.ShortMonths 返回字符串的数组包含几个月的缩写名称。
	NmMonth = Local.ShortMonths    'Array As String("jan","fev","mar","avr","mai","jun","jul","aug","sep","oct","nov","dec")
	
	
	NmFullMonth = Local.Months 'Array As String("janver","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre")
	







	'开始:参数介绍 -----------------------------------------------------------------
	
	'参数 vCallback 用于设定当前这个日历控件将在哪个窗体中显示
	'参数 vEventName 用于定义日历事件名称
	'参数 Ww,Hh 用于定义日历控件的宽度和高度
	'参数 vBeginDate 用来指定日历控件将显示哪个时间
	'参数 vSD	年份最早可以查哪一年 (沉默蜂加上去的功能)
	'参数 vED	年份最晚可以查哪一年 (沉默蜂加上去的功能)
	
	'结束:参数介绍 -----------------------------------------------------------------
	
	
	CallBack = vCallback
	
	
	EventName = vEventName
	
	
	'面板 pnl 是这个日历控件最底层的那个区域
	pnl.Initialize("pnl")	'初始化面板控件
	pnl.Color=ColBackGround '定义背景色
	
	
	Dim mx,my,tx,ty As Int
	Dim i,j,z As Int		
	
	'relatively 相对的
	'定义文字尺寸
	RelativTextSize = 17 
	
	
	'开始:日历单元格宽高值计算 -----------------------------------------------------
	
	'日历控件其实就是一个表格控件的变体类型
	
	'计算每个单元的宽度
	'mx中的x可以理解成水平的意思
	mx=(Ww/7)'-8 
	
	'计算每个单元的高度
	'my中的y可以理解成垂直的意思
	my=(Hh/9)'-10
	
	
	If my>mx Then 
		'如果高度值比宽度值大,在这里将强制将 高度值 = 宽度值
		my=mx
	End If
	
	If ((my*10)+10dip)>Hh Then
		my=((Hh-10dip)/10)
	End If
	
	tx=(Ww-((mx*7)+8dip)) / 2
	ty=(Hh-((my*10)+8dip)) / 2
	
	'结束:日历单元格宽高值计算 -----------------------------------------------------
	
	
	
	
	'开始:日历控件区域设置 ---------------------------------------------------------
	
	pnlbackGround.Initialize("")
	
	'ColTable 为日历控件格了的边框线颜色
	pnlbackGround.Color=ColTable
	
	'pnlbackGround 这个面板控件将被加载到 pnl 面板中 
	pnl.addview(pnlbackGround,tx,ty,(mx*7)+8dip, (my*10)+5dip)
	
	'隐藏这个面板控件
	pnl.Visible=False
	
	'结束:日历控件区域设置 ---------------------------------------------------------
	
	
	
	
	
	'开始:日历控件标题栏 -----------------------------------------------------------
	
	'用于显示标题的标签控件初始化
	lbtitle.Initialize("")
	
	pnlbackGround.addView(lbtitle,1dip,0dip,pnlbackGround.Width-2dip, my-5dip)
	'pnlbackGround.addView(lbtitle,1dip,1dip,pnlbackGround.Width-2dip, my-6dip)
	
	'标题文本的水平和垂直方向的对方方式定义
'	lbtitle.Gravity=Bit.OR(Gravity.LEFT, Gravity.CENTER_VERTICAL)	
	lbtitle.Gravity=Bit.Or(Gravity.CENTER_VERTICAL, Gravity.CENTER_HORIZONTAL)	
	
	'文字字体
	lbtitle.Typeface=Typeface.DEFAULT_BOLD	
	
	'背景色
	lbtitle.Color=Colors.ARGB(255,0,0,0) + ColBackGround
	
	'当前日历上指定时间显示栏的文字颜色
	lbtitle.TextColor=Colors.Red
		
	'结束:日历控件标题栏 -----------------------------------------------------------
	
	
		
	'开始:绘制星期标题栏 -----------------------------------------------------------
	
	'btTitre 定义一栏用来显示周一周二等等文字的标题栏
	
	For i=0 To 6 'Days name buttons
		'Titre n. [分化] 滴定度;最小滴定量

		btTitre(i).Initialize ("")
		btTitre(i).Color=ColInactive
'		btTitre(i).TextSize =60dip
		btTitre(i).Typeface = Typeface.DEFAULT_BOLD
		pnlbackGround.AddView(btTitre(i),  (i*mx)+((i+1)*1dip), (2*my)+1dip, mx, my)
		'pnlbackGround.AddView(btTitre(i),  (i*mx)+((i+1)*1dip), (2*my)+1dip, mx+2dip, my)
		
	Next
	
	'结束:绘制星期标题栏 -----------------------------------------------------------
	
	
	
	'开始:绘制日历单元格 -----------------------------------------------------------
	'下面是按一行单元格绘制完再绘制下一行,如此反复绘制
	For j=0 To 5 'Days buttons	
	
		For i=0 To 6	
		
			z = (j*7)+i
			lblDays(z).Initialize("BtJour")	
			lblDays(z).tag = 0	
			lblDays(z).Gravity = Bit.Or(Gravity.CENTER_VERTICAL, Gravity.CENTER_HORIZONTAL)
			'lblDays(z).Gravity = Bit.OR(Gravity.Top, Gravity.CENTER_HORIZONTAL)
			pnlbackGround.AddView(lblDays(z), (i*mx)+((i+1)*1dip), ((j+2)*(my+1dip))+my,  mx,  my) 
			
 		Next
		
	Next
	
	'结束:绘制日历单元格 -----------------------------------------------------------
	
	
	'开始:增加今天和复制按钮 -------------------------------------------------------
		
		' lbToday 按钮一点可跳到今天
		lbToday.Initialize ("lbToday")
		lbToday.Color =   ColFunction
		lbToday.TextColor=Colors.Black
		lbToday.TextSize=(RelativTextSize*0.8) 
		lbToday.Gravity = Bit.Or(Gravity.CENTER_VERTICAL, Gravity.CENTER_HORIZONTAL)
		
		lbToday.Text ="今 天"
		
		pnlbackGround.addview(lbToday, lblDays(0).Left, lblDays(41).Top+lblDays(41).Height+1dip, pnlbackGround.Width/2-1dip, my-2dip)
'		pnlbackGround.addview(lbToday, lblDays(0).Left, lblDays(41).Top+lblDays(41).Height+2dip, pnlbackGround.Width/2-1dip, my)
		
		
		 'lbCopy 按钮用来把当前指向的日期复制到剪切板
		 lbCopy.Initialize ("lbCopy")
		 lbCopy.Color =   ColFunction
		 lbCopy.TextColor=Colors.Black
		 lbCopy.TextSize=(RelativTextSize*0.8) 
		 lbCopy.Gravity = Bit.Or(Gravity.CENTER_VERTICAL, Gravity.CENTER_HORIZONTAL)
		 
		 lbCopy.Text="复 制"
		 
		 pnlbackGround.addview( lbCopy, lbToday.Left+lbToday.Width+1dip, lbToday.Top ,lbToday.Width, my-2dip)
	
	'	 	pnl.addview(pnlbackGround,tx,ty,(mx*7)+8dip, (my*9)+5dip)
		 
	 '结束:增加今天和复制按钮 -------------------------------------------------------
	
	

	
	#Region 年月日按钮的初始化
	
	'开始:上一月按钮 ---------------------------------------------------------------
	
	btPrevMonth.Initialize("btPrevMonth")
	btPrevMonth.Color=ColFunction	
	btPrevMonth.Typeface=Typeface.DEFAULT_BOLD
	btPrevMonth.TextColor = Colors.Black
	btPrevMonth.Gravity = Bit.Or(Gravity.CENTER_VERTICAL, Gravity.CENTER_HORIZONTAL)
	
	pnlbackGround.AddView(btPrevMonth,btTitre(0).Left,my-4dip,(mx*1.5),my+4dip)
	
	'结束:上一月按钮 ---------------------------------------------------------------
	
	
	'开始:下一月按钮 ---------------------------------------------------------------
	btNextMonth.Initialize("btNextMonth")
	btNextMonth.Color= ColFunction
	btNextMonth.TextColor = Colors.Black
	btNextMonth.Gravity = Bit.Or(Gravity.CENTER_VERTICAL, Gravity.CENTER_HORIZONTAL)
	btNextMonth.Typeface=Typeface.DEFAULT_BOLD
	
	pnlbackGround.AddView(btNextMonth,(mx*5.5)+7dip,my-4dip,(mx*1.5),my+4dip)
	
	'结束:下一月按钮 ---------------------------------------------------------------
	
	
	'开始:年份选择列表框 -----------------------------------------------------------
	
	SpYearsChoice.Initialize("SpYearsChoice")
	SpYearsChoice.Color=ColFunction
	pnlbackGround.AddView(SpYearsChoice,btPrevMonth.Width+2dip, my-4dip, (mx*4)+4dip,my+4dip)
    SpYearsChoice.Visible = False
	
	'结束:年份选择列表框 -----------------------------------------------------------
		
		
		
	'开始:显示年份区域 -------------------------------------------------------------
	
	'********** Hide the spinner (visible = false) and setup the label to do the work **************	
	
	spLabel.Initialize("SpLabel") ' SpLabel click event actually calls the spinner event - see next sub below  
	spLabel.Color=ColFunction
	
	spLabel.TextColor = Colors.Black
	pnlbackGround.AddView(spLabel,btPrevMonth.Width+2dip, my-4dip, (mx*4)+4dip,my+4dip)
	
	' ********** Label takes the same space as spinner ******************
	
	'结束:显示年份区域 -------------------------------------------------------------
	
	
	
	'开始:绘制日期 -----------------------------------------------------------------
	
	For i=0 To 6	
		'Public Sub Nmday(n As Int) As String
		'Replace ( Target As String, Replacement As String ) As String 
		'由于这个日历控件会显示星期一这种格式,会造成断行,于是需要进行改动
		btTitre(i).Text=Nmday(i).Replace("星期","")
'		btTitre(i).Text=Nmday(i)
	Next
	
	'结束:绘制日期 -----------------------------------------------------------------
	
	
	'开始:填充年份列表 -------------------------------------------------------------
	'年选择列表中填充数据
	
	SD = vSD
	ED = vED
	
	For i = SD To ED 'years in Spinner
		SpYearsChoice.add(i)		
	Next
	
	'结束:填充年份列表 -------------------------------------------------------------
	
	#End Region
	
		

	 
	
	
	
	
	'Private Sub PrintDate(dts As Long)
	'日历控件显示指定日期
	'参数 vBeginDate 用来指定日历控件将显示哪个时间
	PrintDate(vBeginDate)	
	
End Sub


Private Sub lbToday_Click '点击今天按钮
	PrintDate(DateTime.Now)
End Sub

Private Sub lbCopy_Click'点击复制按钮

End Sub



' **** Label click calls spinner click - Thanks to Erel the genius
Private Sub SpLabel_click

	Dim r As Reflector
	r.Target = SpYearsChoice
	r.RunMethod("performClick")

End Sub




Public Sub ShowCalendar(b As Boolean)
	pnl.Visible=b	
End Sub

Public Sub Nmday(n As Int) As String
	Dim S As String
	S=NmFullday(n+1)
	Return S.SubString2(0,3)
End Sub



Private Sub PrintDate(dts As Long)'日历控件显示指定日期

	Dim nbj,nday As Int
	Dim mn1,mn2 As Int
	Dim cdd, cmm, caa As Int
	
'	Log(DateTime.Now)
	
	
	'DateTime .GetDayOfMonth ( Ticks As Long ) As Int 
	'GetDayOfMonth 返回一个月中的一天, 值在 1~31 之间
	
	'DateTime.Now 获取当前时间
	'DateTime .GetDayOfMonth 获取当前是几号
	cdd=DateTime .GetDayOfMonth(DateTime.Now)
	
	'DateTime.GetMonth 获得月份
	cmm=DateTime.GetMonth(DateTime.Now)
	
	'DateTime.GetYear 获取当前是哪一年
	caa=DateTime.GetYear(DateTime.Now)
	
	
	CalDay   = DateTime.GetDayOfMonth(dts)	
	CalYear  = DateTime.GetYear(dts)	
	CalMonth = DateTime.GetMonth(dts)
	
	'年份选择列表的文字大小
	SpYearsChoice.TextSize=(RelativTextSize*0.87) '14
	
	'指定年份选择列表当前选中项
	SpYearsChoice.SelectedIndex=(CalYear-SD)	




	'开始:年份显示区域初始化 ------------------------------------------------

	'Here we set the Label To Spinner's selected value
	'在这里我们设置标签微调控制项的选择值
	'spLabel 显示年份区域
	spLabel.TextSize=(RelativTextSize*0.87) '14 文字大小
	spLabel.Gravity = Bit.Or(Gravity.CENTER_VERTICAL, Gravity.CENTER_HORIZONTAL)'对齐
	spLabel.Typeface = Typeface.DEFAULT_BOLD 
	
	spLabel.Text    = SpYearsChoice.SelectedItem & " 年 " & CalMonth & " 月" 
	
	'结束:年份显示区域初始化 ------------------------------------------------
	
	
	'lbtitle 用于显示标题
	lbtitle.TextSize=RelativTextSize
		
	lbtitle.Text="公历:"& CalYear & " 年 " & CalMonth  & " 月 " & CalDay & " 日"
	
	
	'btTitre 定义一栏用来显示周一周二等文字的标题栏
	For mn1=0 To 6
		btTitre(mn1).TextSize=(RelativTextSize*0.8) '12		
	Next
	
	'btPrevMonth 上一月按钮	
	mn1=CalMonth-1 'prev month
	If mn1<1 Then mn1=12
	btPrevMonth.TextSize=(RelativTextSize*0.87) '14
	
	btPrevMonth.Text= "<"
'	btPrevMonth.Text=NmMonth(mn1-1)
	
	
	'btNextMonth 下一月按钮
	mn2=CalMonth+1 'next month
	If mn2>12 Then mn2=1
	btNextMonth.TextSize=(RelativTextSize*0.87) '14
	
	btNextMonth.Text= ">"
'	btNextMonth.Text=NmMonth(mn2-1)
	
	'Public Sub LengthMonth(An,Mois As Int) As Int '计算指定月份共有多少天
	nbj= LengthMonth(CalYear,CalMonth)
	

	#Region B4A 中如今指定一个具体时间
	
	'库 Core > 类 DateTime提供了两种风格的方法用于编程员指定一个具体的时间
	'DateTime.DateParse 用于指定一个包括年月日的时间
	'DateTime.DateTimeParse  用于指定一个包括年月日时分种的时间
	'下面将对这两个方法进行讲解
	'
	'───────────────────────────────────
	'
	'Dim SomeTime As Long 
	'SomeTime = DateTime.DateParse("02/23/2007")
	'
	'───────────────────────────────────
	'
	''指定的时间为1999-03-26 01:24:16
	'Dim DateString = "1999-03-26 01:24:16"AsString
	'
	'Dim DateTimeTicks AsLong
	'Dim Date_Time() AsString
	''根据空格,把这个具体时间分成两部分,并存放到下个数组中
	'Date_Time = Regex.Split("", DateString)
	'
	'DateTime.DateFormat = "yyyy-MM-dd"
	'DateTime.TimeFormat = "HH:mm:ss"
	''通过DateTime.DateTimeParse 把指定的具体日期(包括年月日时分种)给时间变量DateTimeTicks
	'DateTimeTicks = DateTime.DateTimeParse(Date_Time(0), Date_Time(1))
	'
	'───────────────────────────────────	
	
	#End Region
	
		'some 大约的意思;SomeTime 意思为大概时间
	
	SomeTime = DateTime.DateParse(CalMonth & "/01/" & CalYear)
	
	
	
	'DateTime.GetDayOfWeek 用于获取当前是星期几
	nday = (DateTime.GetDayOfWeek(SomeTime)-1)
	
	Dim i,nb As Int
	nb=nday
	
	If nb=0 Then nb=7 'decal next line dim 1
	
	
	
	'开始:初始化日历表格中的42个方格 -----------------------------------------------
	
	''lblDays 显示日期的表格共有42格
	For i=0 To 41 
		lblDays(i).TextColor=Colors.Black
		lblDays(i).Color=ColActive
		lblDays(i).Typeface=Typeface.DEFAULT
		lblDays(i).Text=""	
		lblDays(i).Tag=0
		lblDays(i).TextSize = (RelativTextSize*0.87)
	Next	
	
	'结束:初始化日历表格中的42个方格 -----------------------------------------------
	
	
	'开始:打印日期号 ---------------------------------------------------------------
	
	#Region 打印当前月的日期
	
	Dim z As Int	
	
	For i=(nb) To (nb-1+nbj)
	
		z = i-nb+1
		lblDays(i).Typeface=Typeface.DEFAULT_BOLD
		
		
		Log("lblDays(i).Text =	" & z)
		
		lblDays(i).Text=z	
		
		lblDays(i).Tag=z
		
		'SetdayColor(cmm,caa,cdd,z,i)
		
		If (cmm=CalMonth) And (caa=CalYear) Then
		
		
			If (z=CalDay) Then
			'If (z=cdd) Then '这一句代码是错误的
			
			
				'如果当时号码是指定日期的就修改它的背景色
			
				''ColFunction 当前选中的日期格子的颜色
				lblDays(i).Color=ColFunction
				
			End If
			
		End If
		
		
		If z =CalDay  Then
		
			lblDays(i).Color=ColFunction
			
		End If
		
	Next
	
	#End Region
	

	
	#Region 日历表格中打印上一个月日期

	Log(CRLF&CRLF)
	Log("打印上一个月日期")
	
	Dim m2,m3 As Int
	
	m2=LengthMonth(CalYear,mn1)
	m3=m2-(nb-1)
	For i=0 To (nb-1) 'Prev month
		lblDays(i).TextColor=ColInactive		
		
		Log("lblDays(i).Text = " & (m3+i)	 )
		
		lblDays(i).Text=m3+i	
		lblDays(i).Tag=100+m3+i	
	Next
	
	#End Region
	
	
	
	#Region 日历表格中打印下一个月日期
	
	Log(CRLF&CRLF)
	Log("打印下一个月日期")	
	
	For i=(nb+nbj) To 41 'Next month
		lblDays(i).TextColor=ColInactive
		
		Log("lblDays(i).Text = " & (i-(nb+nbj)+1 ))
		
		lblDays(i).Text=i-(nb+nbj)+1
		lblDays(i).Tag=200+(i-(nb+nbj)+1)
	Next
	
	#End Region
	
	'结束:打印日期号 ---------------------------------------------------------------
	
	
End Sub




Public Sub LengthMonth(An,Mois As Int) As Int '计算指定月份共有多少天
	Dim i As Int
	
	If Mois=1 Then
		i=31
	Else If Mois=2 Then
		If (An Mod 4)=0 Then
			i=29
		Else
			i=28
		End If
	Else If Mois=3 Then
		i=31
	Else If Mois=4 Then
		i=30
	Else If Mois=5 Then
		i=31
	Else If Mois=6 Then
		i=30
	Else If Mois=7 Then
		i=31
	Else If Mois=8 Then
		i=31
	Else If Mois=9 Then
		i=30
	Else If Mois=10 Then
		i=31
	Else If Mois=11 Then
		i=30
	Else If Mois=12 Then
		i=31
	End If
	
	Return i
End Sub

Public Sub AsView As View
Return pnl
End Sub

Private Sub btPrevMonth_Click '点击上一个月按钮

	Dim mm,aa As Int
	
	mm=CalMonth-1
	aa=CalYear
	If mm<1 Then 
		mm=12
		aa=aa-1
	End If
	
	CalMonth = mm
	CalYear  = aa
	SomeTime = DateTime.DateParse(mm & "/01/" & aa)
	
	PrintDate(SomeTime)
	
End Sub

Private Sub SpYearsChoice_ItemClick (Position As Int, Value As Object)
	CalYear=Position+SD
	SomeTime = DateTime.DateParse(CalMonth & "/" & CalDay & "/" & CalYear)
	PrintDate(SomeTime)
End Sub

Public Sub SetTextSize(value As Int)
	RelativTextSize = value
	PrintDate(DateTime.DateParse(CalMonth & "/" & CalDay & "/" & CalYear))
End Sub

Public Sub SetBackGroundColor(vColor As Int)
	ColBackGround = vColor
	pnl.Color=vColor
End Sub

Public Sub SetTableColor(vColor As Int)
	ColTable = vColor
	pnlbackGround.Color=vColor
End Sub

Public Sub SetActiveButtonColor(vColor As Int) '设置42个日历单元格的背景色
	Dim i As Int
	ColActive = vColor
	For i=0 To 41 
		lblDays(i).Color = vColor		
	Next		
End Sub

Public Sub SetFunctionButtonColor(vColor As Int)'设置当前选中的日期格子的背景色
	ColFunction=vColor
	btNextMonth.Color = vColor
	btPrevMonth.Color = vColor
	SpYearsChoice.Color = vColor
End Sub

Public Sub SetInactiveButtonColor(vColor As Int)	'设置周一周二等星期栏的背景色
	Dim i As Int	
	ColInactive = vColor
	For i=0 To 6
		btTitre(i).Color = vColor	
	Next	
End Sub

Private Sub btNextMonth_Click '点击下一个月按钮
	Dim mm,aa As Int
	
	mm=CalMonth+1
	aa=CalYear
	If mm>12 Then 
		mm=1
		aa=aa+1
	End If
	CalMonth = mm
	CalYear  = aa
	SomeTime = DateTime.DateParse(mm & "/01/" & aa)
	PrintDate(SomeTime)
End Sub


Private Sub DayPress As Boolean '按下日期单元格

	Dim v As Label 'Button
	Dim mm,aa,dd As Int
	
	v = Sender
	dd=v.tag
	
	aa=CalYear
	mm=CalMonth
	
	If (dd>100) And (dd<200) Then 'prev month
	   Return False
	Else If (dd>200) Then 'next month
	   Return False
	End If
	
	SomeTime = DateTime.DateParse(mm & "/" & dd & "/" & aa)
	
	'lbtitle 用于显示标题
	lbtitle.Text="公历:"& aa & " 年 " & (CalMonth)  & " 月 " & dd & " 日"
	
	
	'开始:改变当前日历背景色显示,突出当前选中的日期 -------------------------------
	
	For i=0 To 41 
		lblDays(i).Color=ColActive
	Next	

	v.Color=ColFunction
	
	'结束:改变当前日历背景色显示,突出当前选中的日期 -------------------------------
	
	
'    lbtitle.Text=NmFullMonth(CalMonth-1)  & "  " & dd& "  " & aa	
    Return True

End Sub


Private Sub BtJour_Click '日历单元格单击

	If SubExists(CallBack, EventName & "_ItemLongClick") Then
	
		Log("日历单元格单击")
       DayPress	
	   
	End If
	
End Sub

'Private Sub BtJour_Down '日历单元格按下
'
'	If SubExists(CallBack, EventName & "_ItemLongClick") Then
'       DayPress	
'	End If
'	
'End Sub

Private Sub BtJour_LongClick '长按单元格
'	Dim SomeTime As Long
'
'	'SubExists ( Object As Object, Sub As String ) As Boolean 
'	'SubExists 判断子过程存在,测试对象是否包含指定方法. 
'	'如果对象没有初始化或没有实例化的用户累则返回 False.
'	
'	If SubExists(CallBack, EventName & "_ItemLongClick") Then
'	
'       If DayPress Then
'	   	 ' CallSub2 ( Component As Object, Sub As String, Argument As Object ) As Object 
'		 '调用子过程2 ,和 CallSub 相似.用单个参数调用子过程.
'	      CallSub2(  CallBack, EventName & "_ItemLongClick",SomeTime)	
'	   End If
'	   
'	End If
	
End Sub


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值