一個萬年暦的程式想要理解一下.....急!!! |
|
cleverman319
一般會員 發表:5 回覆:1 積分:1 註冊:2005-10-10 發送簡訊給我 |
這是一個萬年暦的程式 , 透過button1來輸入年份, button2來輸入月份後,可以
執行結果如下一張圖檔連結,這是網路上找的所以作者不知名,我也看不懂他中間寫的那一段用"------"框起來的部分,希望各位大大能夠幫我解釋一下,如果可以就近量多寫或著是在旁邊註解一下也好...我不了解萬年暦的公式,不知道要去那兒找,急著想要了解,回答的人我會極力的感謝你的...
(因為不會貼圖貼不出來,所以用圖檔連結,抱歉!!)
http://homelf.kimo.com.tw/cleverman319/calender1.JPG
http://homelf.kimo.com.tw/cleverman319/calender2.JPG 程式如下:
unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls; type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Button2: TButton;
Label1: TLabel;
Label2: TLabel;
procedure FormCreate(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form1: TForm1;
a:tbitmap; implementation {$R *.dfm}
var
sty:integer=1980;
stw:integer=2;
asky:integer;
askm:integer=2;
askw:integer;
sday:integer=31;
i,j,k:integer;
----------------------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
var X,bb,cc,alday:integer;
begin
i:=1;j:=1;k:=1;askw:=stw;alday:=0;
asky:=strtoint(edit1.Text);
askm:=strtoint(edit2.Text);
form1.Canvas.TextOut(17,1,'日 一 二 三 四 五 六'); for bb:=1980 to asky-1 do
begin
if((X mod 4= 0)and(asky mod 100<>0) )then alday:=alday 1;
if((X mod 400=0) and (asky mod 100=0))then alday:=alday 1;
alday:=alday 365;
end;
askw:=(alday askw) mod 7;
for X:= 1 to askm-1 do
begin
case X of
1,3,5,7,8,10,12:
begin
askw:=(31 askw) mod 7
end;
4,6,9,11:
begin
askw:=(30 askw) mod 7
end;
2:
begin
askw:=(28 askw) mod 7
end;
end;
end; case askm of
1,3,5,7,8,10,12:
begin
sday:=31
end;
4,6,9,11:
begin
sday:=30
end;
2:
begin
sday:=28;
if((asky mod 4= 0)and(asky mod 100<>0) )then sday:=sday 1;
if((asky mod 400=0) and (asky mod 100=0))then sday:=sday 1
end;
end;
for k:= 1 to 7-askw do
begin
form1.Canvas.TextOut(17*(askw k),15*i,inttostr(k));
end; for i:= 2 to 6 do
begin
for j:= 1 to 7 do
begin
if(k-1 j (i-2)*7 <= sday)then
form1.Canvas.TextOut(17*(j),15*i,inttostr(k-1 j (i-2)*7));
end;
end;
// edit1.Text :=inttostr(askw);
button1.Hide ;
end;
----------------------------------------------------------------------
procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |