這是一個具有查找日期、星期和推算功能的程序。當點擊“開始查詢”按鈕後,在右邊的文本編輯框中可以輸入年份、月份和日期,左邊的日歷中就會顯示出這一天在日歷上所對應的部位,並且可以查出這一天是星期幾。窗體右邊的年份、月份和日期文本編輯框中的數字可以通過按鈕進行調整。
設計思想:
本程序主要利用Delphi 6.0 的Calendar 控件實現日歷顯示功能。這是一個很常用的控件,它可以計算出從公元1 年到公元9999 年當中的任何一年的任何一天是星期幾。同時該程序還利用到了一個重要的控件SpinButton,該控件有兩個微調按鈕,一個是帶有向上箭頭的按鈕,另一個是帶有向下箭頭的按鈕,它能夠對整型數值進行加1 和減1 的方便處理。在該程序中,我們還將學習到如何利用MainMenu 控件為程序添加菜單。
設計步驟:
本Delphi日歷中首先為窗體添加各種合適的控件。然後通過編寫年份、月份和日期文本編輯框的Change 事件代碼,實現靈活改變窗體左邊日歷的功能。然後編寫SpinButton 控件的兩個微調按鈕的向上移動OnUpClick 和向下移動OnDownClick 兩個事件的代碼。最後添加窗體的菜單,並為菜單添加相應代碼。
1.新建工程
(1)啟動Delphi 6.0 程序。選擇“文件”菜單下的“新建”命令,從彈出的子菜單中選擇Application 選項,則出現新建工程的Form1 窗口。
(2)選擇“文件”菜單下的“工程另存為”命令,彈出Save Unit1 As 對話框。在“保存在”列表框中選擇需要存放該窗口文件所在的目錄名;在“文件名”編輯框中填寫文件名,這裡填寫“Unit1”,點擊“保存”按鈕,保存上面的選項。
(3)執行上一步後,將彈出“工程另存為”對話框。在“保存在”列表框中選擇需要存放該工程的目錄名,最好和第(2)步選取相同的目錄;在“文件名”編輯框中填寫保存處理該工程的源代碼的文件名,這裡填寫“Project1”,點擊“保存”按鈕,保存上面的選項。
2.修改窗口
(1)激活Form1 窗口,在“屬性”中設置該窗體的Caption 屬性為“萬年歷”,Color屬性設置為“clBtnFace”。
(2)在構件選項板上選擇Samples 頁上的Calendar 選項,將鼠標移到窗口中點擊,生成Calendar 控件,用鼠標調整其合適的大小和在窗體上的位置。在“屬性”中設置其Color 屬性為ClYellow,用鼠標點擊Font 屬性,從其選項列表中設置Color 屬性為clBlue,Name 為Calendar。Samples 頁上的構件是Delphi 中自定義組件的樣本,包括計量表、顏色、網格和日歷網格等,並提供源代碼供參考。
(3)選擇“標准”頁上的Edit 選項,在窗體中添加三個Edit 文本編輯框,調整其合適的大小和位置。選擇“編輯”菜單下的“對齊”命令,選擇合適的選項對齊這些控件。在“屬性”中設置Color 屬性為ClYellow,用鼠標點擊Font 屬性,從其選項列表中設置Color 屬性為clBlue,Name 分別為Edit1、Edit2 和Edit3。
(4)在構件選項板上選擇Samples 頁上的SpinButton 選項,將鼠標移到窗口中點擊,生成SpinButton 控件,本例共添加三個SpinButton 控件,分別將其放置在Edit 控件的右邊合適的位置。
(5)選擇“標准”頁上的Button 選項,在窗體中合適的位置添加Button 控件,在“屬性”中設置其Caption 屬性為“開始查詢”。
(6)選擇“標准”頁上的MainMenu 選項,在窗體中點擊添加MainMenu 控件,雙擊該控件,進入菜單編輯窗口,如下圖(左圖)所示,設計合適的菜單。添加控件後的窗體如圖(右圖)所示。
代碼分析:
(1)在程序中,計算某天是星期幾的過程都是在Calendar 控件內部完成的,所以在編寫代碼時,該部分計算不予考慮,關鍵是把文本框中的年份、月份和日期數字傳遞給Calendar 即可。
procedure TForm1.Edit1Change(Sender: TObject);//改變年份 begin Form1.Calendar1.Year:=strtoint(Form1.Edit1.Text); end; procedure TForm1.Edit2Change(Sender: TObject);//改變月份 begin Form1.Calendar1.Month:=strtoint(Form1.Edit2.Text); end; procedure TForm1.Edit3Change(Sender: TObject); //改變日期 begin Form1.Calendar1.Day:=strtoint(Form1.Edit3.Text); end;
(2)接著編寫SpinButton 的微調按鈕的響應事件,SpinButton 控件有兩個微調按鈕,一個是帶有向上箭頭的按鈕,另外一個是帶有向下箭頭的按鈕,在編寫程序代碼時需要對它們分別進行處理。值得注意的是,在文本框中顯示的數值為String 類型,而SpinButton控件能夠處理的僅為整型數值,所以先要用strtoint()函數將Edit 控件中的文本轉換為整型數值,然後再用inttostr()函數將整型數值轉換為文本才能夠在文本框中顯示。下面以年份的SpinButton 控件為例說明:
procedure TForm1.SpinButton1DownClick(Sender: TObject);//年份減1 begin if(strtoint(Form1.Edit1.Text)>1) then Form1.Edit1.Text:=inttostr(strtoint(Form1.Edit1.Text)-1); Form1.Calendar1.PrevYear; end; procedure TForm1.SpinButton1UpClick(Sender: TObject);//年份加1 begin if(strtoint(Form1.Edit1.Text)<9999) then Form1.Edit1.Text:=inttostr(strtoint(Form1.Edit1.Text)+1); Form1.Calendar1.NextYear; end;
(3)下面為菜單添加相關代碼,當選擇“開始查詢”菜單時,程序中各個控件都處於激活狀態,同時給出一個初值,賦值給日歷:
procedure TForm1.B1Click(Sender: TObject); begin Form1.Calendar1.Enabled:=true; //查詢初始化 Form1.Edit1.Enabled:=true; Form1.Edit2.Enabled:=true; Form1.Edit3.Enabled:=true; Form1.spinButton1.Enabled:=true; Form1.spinButton2.Enabled:=true; Form1.spinButton3.Enabled:=true; Edit1.Text:=’1979’;//賦值初始日期 Edit2.Text:=’5’; Edit3.Text:=’1’; Form1.Calendar1.year:=strtoint(Form1.Edit1.Text);//初始日期查詢 Form1.Calendar1.month:=strtoint(Form1.Edit2.Text); Form1.Calendar1.day:=strtoint(Form1.Edit3.Text); end;
(4)當點擊菜單中的“退出”時,程序自動關閉退出,這只需要一個Close 即可實現:
procedure TForm1.E1Click(Sender: TObject); //退出 begin close; end;
(5)當點擊菜單中的“關於”時,程序給出相關信息,這裡用Messagedlg()函數來實現:
procedure TForm1.N1Click(Sender: TObject); begin messagedlg(’歡迎使用李氏萬年歷※愛媛工作室※ 2011 年’,mtinFormation, [mbok],0); end;
(6)窗體中Button 的點擊事件和菜單中“開始查詢”功能相同,不需為該Button 控件添加代碼,只需在“屬性”面板中“事件”頁中設置Onclick 事件為“開始查詢”菜單的點擊事件即可,本例中為B1Click。
vIEw source