📄 metaphysicsbasic.pas
字号:
vItems[tgGui].Caption:='癸';
vItems[tgGui].YinYang:=yyYin;
vItems[tgGui].WuXing:=wxShui;
vItems[tgGui].DiGong:=dzChou;
vFinger:=tgJia;
end;
destructor TTianGanLian.Destroy;
var
tgI:TTianGanShunXu;
begin
vWuXing.Free;
for tgI:=tgGui downto tgJia do//逐个释放天干元素
begin
vItems[tgI].Free;
end;
// SetLength(vItems,0);
inherited;
end;
procedure TTianGanLian.First;
begin
vFinger:=tgJia;
// Result:=vFinger;
end;
function TTianGanLian.GetItem(TheFinger: TTianGanShunXU): TTianGan;
begin
vFinger:=TheFinger;
Result:=vItems[vFinger];
end;
function TTianGanLian.GetCurrentItem: TTianGan;
begin
Result:=vItems[vFinger];
end;
procedure TTianGanLian.Last;
begin
vFinger:=tgGui;
end;
procedure TTianGanLian.Step(StepLen: Integer);
begin
StepLen:=StepLen mod 10;//变远偏移称为内偏移
if StepLen <0 then Inc(StepLen,10);//变负偏移为正偏移
StepLen:=(Integer(vFinger)+StepLen) mod 11;
if StepLen=0 then Inc(StepLen);//跳过 tgNull
vFinger:=TTianGanShunXu(StepLen);
// Result:=vFinger;
end;
{ /TTianGan }//天干链
{ TDiZhi }//地支链
constructor TDiZhiLian.Create;
begin
vItems[dzZi]:=TDiZhi.Create;
vItems[dzZi].Order:=dzZi;
vItems[dzZi].Caption:='子';
vItems[dzZi].YinYang:=yyYang;
vItems[dzZi].WuXing:=wxShui;
vItems[dzZi].HuoLi:=hlZhong;
vItems[dzChou]:=TDiZhi.Create;
vItems[dzChou].Order:=dzChou;
vItems[dzChou].Caption:='丑';
vItems[dzChou].YinYang:=yyYin;
vItems[dzChou].WuXing:=wxTu;
vItems[dzChou].HuoLi:=hlJi;
vItems[dzYin]:=TDiZhi.Create;
vItems[dzYin].Order:=dzYin;
vItems[dzYin].Caption:='寅';
vItems[dzYin].YinYang:=yyYang;
vItems[dzYin].WuXing:=wxMu;
vItems[dzYin].HuoLi:=hlMeng;
vItems[dzMao]:=TDiZhi.Create;
vItems[dzMao].Order:=dzMao;
vItems[dzMao].Caption:='卯';
vItems[dzMao].YinYang:=yyYin;
vItems[dzMao].WuXing:=wxMu;
vItems[dzMao].HuoLi:=hlZhong;
vItems[dzChen]:=TDiZhi.Create;
vItems[dzChen].Order:=dzChen;
vItems[dzChen].Caption:='辰';
vItems[dzChen].YinYang:=yyYang;
vItems[dzChen].WuXing:=wxTu;
vItems[dzChen].HuoLi:=hlJi;
vItems[dzSi]:=TDiZhi.Create;
vItems[dzSi].Order:=dzSi;
vItems[dzSi].Caption:='巳';
vItems[dzSi].YinYang:=yyYin;
vItems[dzSi].WuXing:=wxHuo;
vItems[dzSi].HuoLi:=hlMeng;
vItems[dzWu]:=TDiZhi.Create;
vItems[dzWu].Order:=dzWu;
vItems[dzWu].Caption:='午';
vItems[dzWu].YinYang:=yyYang;
vItems[dzWu].WuXing:=wxHuo;
vItems[dzWu].HuoLi:=hlZhong;
vItems[dzWei]:=TDiZhi.Create;
vItems[dzWei].Order:=dzWei;
vItems[dzWei].Caption:='未';
vItems[dzWei].YinYang:=yyYin;
vItems[dzWei].WuXing:=wxTu;
vItems[dzWei].HuoLi:=hlJi;
vItems[dzShen]:=TDiZhi.Create;
vItems[dzShen].Order:=dzShen;
vItems[dzShen].Caption:='申';
vItems[dzShen].YinYang:=yyYang;
vItems[dzShen].WuXing:=wxJin;
vItems[dzShen].HuoLi:=hlMeng;
vItems[dzYou]:=TDiZhi.Create;
vItems[dzYou].Order:=dzYou;
vItems[dzYou].Caption:='酉';
vItems[dzYou].YinYang:=yyYin;
vItems[dzYou].WuXing:=wxJin;
vItems[dzYou].HuoLi:=hlZhong;
vItems[dzXu]:=TDiZhi.Create;
vItems[dzXu].Order:=dzXu;
vItems[dzXu].Caption:='戌';
vItems[dzXu].YinYang:=yyYang;
vItems[dzXu].WuXing:=wxTu;
vItems[dzXu].HuoLi:=hlJi;
vItems[dzHai]:=TDiZhi.Create;
vItems[dzHai].Order:=dzHai;
vItems[dzHai].Caption:='亥';
vItems[dzHai].YinYang:=yyYin;
vItems[dzHai].WuXing:=wxShui;
vItems[dzHai].HuoLi:=hlMeng;
vFinger:=dzZi;
end;
destructor TDiZhiLian.Destroy;
var
dzI:TDiZhiShunXu;
begin
for dzI:=dzHai downto dzZi do//逐个释放地支元素
begin
vItems[dzI].Free;
end;
// setLength(vItems,0);
inherited;
end;
procedure TDiZhiLian.First;
begin
vFinger:=dzZi;
// Result:=vFinger;
end;
function TDiZhiLian.GetItem(TheFinger: TDiZhiShunXu): TDiZhi;
begin
vFinger:=TheFinger;
Result:=vItems[vFinger];
end;
function TDiZhiLian.GetCurrentItem: TDiZhi;
begin
Result:=vItems[vFinger];
end;
procedure TDiZhiLian.Last;
begin
vFinger:=dzHai;
// Result:=vFinger;
end;
procedure TDiZhiLian.Step(StepLen: Integer);
begin
I:=StepLen mod 12;//变远偏移称为内偏移
if I <0 then Inc(I,12);//变负偏移为正偏移
I:=(Integer(vFinger)+I) mod 13;
if I=0 then Inc(I);//跳过 dzNull
vFinger:=TDiZhiShunXu(I);
// Result:=vFinger;
end;
procedure TDiZhiLian.StepNext;
begin
if vFinger = dzHai then vFinger := dzZi else Inc(vFinger);
end;
{ /TDiZhi }//地支链
function WuXingGuanXi(Shang{上}:TWuXingShunXu;Xia{下,为主体}:TWuXingShunXu):TWuXingGuanXi;
//元素关系
//TWuXingGuanXi=(Sheng{生},Bi{比},Xie{泄},Ke{克},Zei{贼});//元素间五行关系,以下为主
label Compared;
begin
_WX:=TWuXing.Create;
//0步
if Shang=Xia then
begin
Result:=Bi;//比
Exit;
end;
_WX.Finger:=Shang;
_WX.Step(1);//1步
if _WX.Finger=Xia then
begin
Result:=Sheng;//生
Exit;
end;
_WX.Step(1);//2步
if _WX.Finger=Xia then
begin
Result:=Ke;//克
Exit;
end;
_WX.Step(1);//3步
if _WX.Finger=Xia then
begin
Result:=Zei;//贼
Exit;
end;
//4步
Result:=Xie;//泄
Compared://较完了
end;
{ TSiZhu }
constructor TSiZhu.Create;
begin
NianZhu:=TZhu.Create;
YueZhu:=TZhu.Create;
RiZhu:=TZhu.Create;
ShiZhu:=TZhu.Create;
end;
destructor TSiZhu.Destroy;
begin
NianZhu.Free;
YueZhu.Free;
RiZhu.Free;
ShiZhu.Free;
inherited;
end;
function DiZhiWuXing(DZ:TDiZhiShunXu):TWuXingShunXu;//天干五行
begin
Result:=_DZL.Items[DZ].WuXing;
end;
function TianGanWuXing(TG:TTianGanShunXu):TWuXingShunXu;//地支五行
begin
Result:=_TGL.Items[TG].WuXing;
end;
function DiZhiHuoLi(DZ:TDiZhiShunXu):THuoLi;
begin
Result:=_DZL.Items[DZ].HuoLi;
end;
function TianGanYinYang(TG:TTianGanShunXu):TYinYang;//天干阴阳
begin
Result:=_TGL.Items[TG].YinYang;
end;
function DiZhiYinYang(DZ:TDiZhiShunXu):TYinYang;//地支阴阳
begin
Result:=_DZL.Items[DZ].YinYang;
end;
function GuanXiMingCheng(GX:TWuXingGuanXi):string;//五行相互的关系名称
begin
//TWuXingGuanXi=(Sheng{生},Bi{比},Xie{泄},Ke{克},Zei{贼});//元素间五行关系、作用 以下为主
case GX of
Sheng : Result:='生';
Bi : Result:='比';
Xie : Result:='泄';
Ke : Result:='克';
Zei : Result:='贼';
end;
end;
function TianGanMingcheng(TG:TTianGanShunXu):string;//天干名称
begin
if TG=tgNull then Result:='亡' else Result:=_TGL.Items[TG].Caption;
end;
function DiZhiMingcheng(DZ:TDiZhiShunXu):string;//地支名称
begin
Result:=_DZL.Items[DZ].Caption;
end;
initialization
_WX:=TWuXing.Create;
_DZL:=TDiZhiLian.Create;
_TGL:=TTianGanLian.Create;
finalization
_WX.Free;
_DZL.Free;
_TGL.Free;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -