📄 unitmain.pas
字号:
MessageBox(Handle,'运算错误!','错误',mb_OK);
FreeAll;
exit;
end;
FreeAll;
end;
procedure TFormMath.Edit2VSChange(Sender: TObject);
var
S:String;
FunCom:TFunCommand;
begin
Edit2VS.Font.Color:=clBlack;
Case ComboBox2V.ItemIndex of
0: begin
S:=CStrToSStr(Edit2VS.Text,SStrs);
if not StrToFuncomN(S,FunCom,'X','Y') then
Edit2VS.Font.Color:=clRed;
end;
1: begin
S:=CStrToSStr(Edit2VS.Text,SStrs);
if not StrToFuncomN(S,FunCom,'Z','X') then
Edit2VS.Font.Color:=clRed;
end;
2: begin
S:=CStrToSStr(Edit2VS.Text,SStrs);
if not StrToFuncomN(S,FunCom,'Y','Z') then
Edit2VS.Font.Color:=clRed;
end;
end;
FreeFunCommand(FunCom);
end;
procedure TFormMath.Edit2VSKeyPress(Sender: TObject; var Key: Char);
begin
if Key=#$D then begin Key:=#0; Edit2VbZ.SetFocus; end;
end;
procedure TFormMath.Edit2VZKeyPress(Sender: TObject; var Key: Char);
begin
if Key=#$D then begin Key:=#0; Edit2VX.SetFocus; end;
end;
procedure TFormMath.Edit2VXKeyPress(Sender: TObject; var Key: Char);
begin
if Key=#$D then begin Key:=#0; Edit2VbZ.SetFocus; end;
end;
procedure TFormMath.Edit2VbZKeyPress(Sender: TObject; var Key: Char);
begin
if Key=#$D then begin Key:=#0; Edit2VeZ.SetFocus; end;
end;
procedure TFormMath.Edit2VeZKeyPress(Sender: TObject; var Key: Char);
begin
if Key=#$D then begin Key:=#0; Edit2VbX.SetFocus; end;
end;
procedure TFormMath.Edit2VbXKeyPress(Sender: TObject; var Key: Char);
begin
if Key=#$D then begin Key:=#0; Edit2VeX.SetFocus; end;
end;
procedure TFormMath.Edit2VeXKeyPress(Sender: TObject; var Key: Char);
begin
if Key=#$D then begin Key:=#0; BitBtn2Vclick(nil); end;
end;
procedure TFormMath.Edit2VZChange(Sender: TObject);
begin
JudgeInt(Sender);
end;
procedure TFormMath.Edit2VbZChange(Sender: TObject);
var
CX,CZ:Char;
begin
Case ComboBox2V.ItemIndex of
1: begin cX:='Z'; cZ:='X'; end;
2: begin cX:='Y'; cZ:='Z'; end;
else begin cX:='X'; cZ:='Y'; end; //0:
end;
{ Case ComboBox2V.ItemIndex of
0: begin CX:='Y'; CZ:='Z'; end;
1: begin CX:='Z'; CZ:='X'; end;
else begin CX:='X'; CZ:='Y'; end; //2
end;}
if (JudgeFloat(Edit2VbZ) and JudgeFloat(Edit2VeZ)
and JudgeCStr(Edit2VbX,CX)and JudgeCStr(Edit2VeX,CX) )
or (JudgeFloat(Edit2VbX) and JudgeFloat(Edit2VeX)
and JudgeCStr(Edit2VbZ,CZ)and JudgeCStr(Edit2VeZ,CZ) )
then begin
Edit2VbZ.Font.Color:=clBlack; Edit2VeZ.Font.Color:=clBlack;
Edit2VbX.Font.Color:=clBlack; Edit2VeX.Font.Color:=clBlack;
end else begin
Edit2VbZ.Font.Color:=clRed; Edit2VeZ.Font.Color:=clRed;
Edit2VbX.Font.Color:=clRed; Edit2VeX.Font.Color:=clRed;
end;
end;
procedure TFormMath.SDFunMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
ValueX,ValueY:Double;
AlphaX,AlphaY,AlphaZ:Extended;
i:Integer;
Error:Byte;
begin
try
sdfun.GetPositionValue(X,Y,ValueX,ValueY);
i:=SDfun.GetNearPoint(ValueX,ValueY);
if {SDfun.CanStickHint and} not(SDfun.Can3D) then begin
EditNPS.Text:=SCienceDraw.MyFormatFloat(SDfun.GetPointSlope(i,Error),SDfun.HintValidNums);
end;
if (NELinkN.Checked)and(not SDFun.Can3D) then begin
SDfun.RefreshSDOK;
SDfun.DrawSCLine(ValueX,ValueY,SDFun.Points[i].ValueX,SDFun.Points[i].ValueY);
end;
except
//EditNPS.Text:='错误';
end;
if not CheckBoxEE.Checked then exit;
if not fCanResize then begin exit; end;
if sdfun.Can3D then begin
AlphaX:=0; AlphaY:=0; AlphaZ:=0;
Case sdfun.Cursor of
crSizeNS: AlphaY:=(Y-OrgY);
crSizeWE: AlphaZ:=(X-OrgX);
crSizeNWSE: AlphaX:=(X-OrgX+y-OrgY)/2;
end;
SDFun.Roll3D((sdfun.CMaxX+sdfun.CMinX)/2,(sdfun.CMaxY+sdfun.CMinY)/2,
(sdfun.CMaxZ+sdfun.CMinZ)/2,AlphaX,AlphaY,AlphaZ);
end else begin
SDfun.ViewStart:=Point(SDFun.ViewStart.x-X+OrgX,SDFun.ViewStart.y-Y+OrgY);
end;
OrgX:=x; OrgY:=Y;
SDfun.Refresh;
end;
procedure TFormMath.SDFunMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if not CheckBoxEE.Checked then exit;
fCanResize:=False;
if SDFun.PointsNum=0 then exit;
if Button<>mbRight then exit;
OrgX:=X; OrgY:=Y;
if SDFun.Can3D then begin
if (y<SDFun.Height div 4) then begin SDFun.Cursor:=crSizeWE; fCanResize:=True; end;
if (X>Width*3 div 4)and(y>SDFun.Height div 4) then begin SDFun.Cursor:=crSizeNs; fCanResize:=True; end;
if (x<Width div 4) and (y>SDFun.Height div 4) then begin SDFun.Cursor:=crSizeNWSE; fCanResize:=True; end;
end else begin SDFun.Cursor:=crHandPoint; fCanResize:=True; end;
end;
const MaxViewRatio=1000000; MinViewRatio=0.5;
procedure TFormMath.SDFunMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
CX,CY:Double;
begin
if not CheckBoxEE.Checked then exit;
fCanResize:=False;
if SDFun.PointsNum=0 then exit;
if(Button<>mbRight)and(not SDFun.Can3D)then
begin
SDFun.Cursor:=2;
SDFun.GetPositionValue(X,Y,CX,CY);
SDFun.ViewXRatio:=SDFun.ViewXRatio*BitBtnMoreR.Tag/100;
SDFun.ViewYRatio:=SDFun.ViewYRatio*BitBtnMoreR.Tag/100;
if SDFun.ViewXRatio<MinViewRatio then SDFun.ViewXRatio:=MinViewRatio;
if SDFun.ViewYRatio<MinViewRatio then SDFun.ViewYRatio:=MinViewRatio;
if SDFun.ViewXRatio>MaxViewRatio then SDFun.ViewXRatio:=MaxViewRatio;
if SDFun.ViewYRatio>MaxViewRatio then SDFun.ViewYRatio:=MaxViewRatio;
EditXVR.Tag:=1; EditYVR.Tag:=1;
EditXVR.Text:=FormatFloat('0.##',SDFun.ViewXRatio);
EditYVR.Text:=FormatFloat('0.##',SDFun.ViewYRatio);
EditXVR.Tag:=0; EditYVR.Tag:=0;
SDFun.SetValueCenter(CX,CY);
SDFun.SetValueCenter(CX,CY);
SDFun.Refresh;
end;
SDFun.Cursor:=crCross;
Application.ProcessMessages;
end;
procedure TFormMath.SDFunMouseLeave(Sender: TObject);
begin
SDFun.CanColorPoint:=False;
fCanResize:=False;
SDFun.Cursor:=crCross;
SDFun.Refresh;
end;
procedure TFormMath.PageControlGraphChange(Sender: TObject);
begin
Case PageControlGraph.ActivePageIndex of
0,3: if SDFun.Can3D then begin SDFun.Can3D:=False; SDFun.Refresh; end;
1,5: if not SDFun.Can3D Then begin SDFun.Can3D:=True; SDFun.Refresh; end;
end;
end;
procedure TFormMath.MemoComplexChange(Sender: TObject);
var
rs,rx,R:Extended;
begin
try
if CacuCompStrValue(MemoComplex.text,rs,rx,SStrs)
then begin
MemoComplex.Font.Color:=clBlack;
EditCSV.Text:=FloatToStr(rs);
EditCXV.Text:=FloatToStr(rx);
R:=Sqrt(RS*RS+RX*RX);
EditCFV.Text:=FloatToStr(R);
if RS<>0
then EditCFAV.Text:=FloatToStr(ArcTan(RX/RS))
else if RX<>0 then EditCFAV.Text:='90'
else EditCFAV.Text:='0';
end else begin
MemoComplex.Font.Color:=clRed;
EditCSV.Clear; EditCXV.Clear;
end;
except
MemoComplex.Font.Color:=clRed;
EditCSV.Clear; EditCXV.Clear;
end;
end;
procedure TFormMath.MemoNormalChange(Sender: TObject);
var
FunCom:TFunCommand;
S:String;
R:Boolean;
begin
try
S:=CStrToSStr(MemoNormal.Lines.Text,SStrs);
R:=False;
try
Case ComboBoxVNum.ItemIndex of
0: R:=StrToFunComN(S,FunCom,'UNKNOW');
1: R:=StrToFunComN(S,FunCom,EditV1C.Text);
2: R:=StrToFunComN(S,FunCom,EditV1C.Text,EditV2C.Text);
3: R:=StrToFunComN(S,FunCom,EditV1C.Text,EditV2C.Text,EditV3C.Text);
4: R:=StrToFunComN(S,FunCom,EditV1C.Text,EditV2C.Text,EditV3C.Text,EditV4C.Text);
5: R:=StrToFunComN(S,FunCom,EditV1C.Text,EditV2C.Text,EditV3C.Text,EditV4C.Text,EditV5C.Text);
end;
if not R then begin //错误
MemoNormal.Font.Color:=clRed; EditAnswer.Clear;
end else begin
MemoNormal.Font.Color:=clBlack;
EditAnswer.Text:=FloatToStr(GetFunValueN(FunCom,V1,V2,V3,V4,V5));
end;
except
MemoNormal.Font.Color:=clRed;
end;
finally
FreeFunCommand(FunCom);
end;
end;
procedure TFormMath.MemoNormalKeyPress(Sender: TObject; var Key: Char);
begin
if Key=#27 then begin
TCustomEdit(Sender).Clear;
if (Sender is TCustomEdit)and Assigned(TEdit(Sender).OnChange)
then TEdit(Sender).OnChange(Sender);
end;
end;
procedure TFormMath.ComboBoxVNumChange(Sender: TObject);
var
i:Integer;
begin
for i:=1 to ComboBoxVNum.ItemIndex do begin
TWinControl(FindComponent('EditV'+IntToStr(i)+'V')).Enabled:=True;
TWinControl(FindComponent('EditV'+IntToStr(i)+'C')).Enabled:=True;
end;
for i:=ComboBoxVNum.ItemIndex+1 to ComboBoxVNum.Items.Count-1 do begin
TWinControl(FindComponent('EditV'+IntToStr(i)+'V')).Enabled:=False;
TWinControl(FindComponent('EditV'+IntToStr(i)+'C')).Enabled:=False;
end;
MemoNormalChange(MemoNormal);
end;
procedure TFormMath.EditV1CChange(Sender: TObject);
var
S:String;
Temp:TObject;
begin
S:=TLabeledEdit(Sender).Text;
if s='' then exit;
if Length(s)>1 then begin
Delete(S,2,Length(s)-1);
TLabeledEdit(Sender).Text:=S;
exit;
end;
if S[1]>'Z' then S:='Z';
if S[1]<'A' then S:='A';
if S<>TLabeledEdit(Sender).Text then begin
TLabeledEdit(Sender).Text:=S;
exit;
end;
if ((EditV1C.Text=S)and(Sender<>EditV1C))or
((EditV2C.Text=S)and(Sender<>EditV2C))or
((EditV3C.Text=S)and(Sender<>EditV3C))or
((EditV4C.Text=S)and(Sender<>EditV4C))or
((EditV5C.Text=S)and(Sender<>EditV5C))then
begin
TLabeledEdit(Sender).Text:='';
MessageBox(Handle,'不能有同名的变量代号!','错误',mb_OK);
exit;
end;
S:=TComponent(Sender).Name;
S[7]:='V';
Temp:=FindComponent(S);
with TLabeledEdit(Temp) do
begin
EditLabel.Caption:= TLabeledEdit(Sender).Text+'=';
if Assigned(OnChange) then OnChange(Temp);
end;
end;
procedure TFormMath.EditV1CExit(Sender: TObject);
begin
if TLabeledEdit(Sender).text=''
then TLabeledEdit(Sender).SetFocus;
end;
procedure TFormMath.EditV1VChange(Sender: TObject);
var
V:Extended;
begin
if CStrToFloat(TEdit(Sender).Text,V,SStrs)
then begin
TEdit(Sender).Font.Color:=clBlack;
MemoNormalChange(nil);
end else begin
TEdit(Sender).Font.Color:=clRed;
EditAnswer.Clear;
end;
Case TComponent(Sender).Tag of
0: V1:=V;
1: V2:=V;
2: V3:=V;
3: V4:=V;
4: V5:=V;
end;
end;
procedure TFormMath.EditV1VKeyPress(Sender: TObject; var Key: Char);
begin
if Key=#$D then begin
if TComponent(Sender).Tag<ComboBoxVNum.ItemIndex-1
then begin//下一个
TWinControl(FindComponent('EditV'
+IntToStr(TComponent(Sender).Tag+2)
+'V')).SetFocus;
end else begin//开头一个
EditV1V.SetFocus;
end;
end;
end;
procedure TFormMath.EditDecChange(Sender: TObject);
var
Value:Extended;
begin
if EditDec.Tag=1 then exit; //防止死锁
EditHex.Tag:=1;
try
if CStrToFloat(EditDec.Text,Value,SStrs) then begin
EditHex.Text:=FloatToHex(Value);
EditDec.Font.Color:=clBlack;
EditHex.Font.Color:=clBlack;
end else begin
EditHex.Clear;
EditDec.Font.Color:=clRed;
end;
except
end;
EditHex.Tag:=0;
end;
procedure TFormMath.EditHexChange(Sender: TObject);
var
Value:Extended;
begin
if EditHex.Tag=1 then exit;
EditDec.Tag:=1;
Try
if HexToFloat(EditHex.Text,Value) then begin
EditDec.Text:=FloatToStr(Value);
EditDec.Font.Color:=clBlack;
EditHex.Font.Color:=clBlack;
end else begin
EditDec.Clear;
EditHex.Font.Color:=clRed;
end;
except
end;
EditDec.Tag:=0;
end;
procedure TFormMath.EditJDChange(Sender: TObject);
var
Value:Extended;
begin
try
if EditJD.Tag=1 then exit;
EditHD.Tag:=1;
if DFMtoFloat(EditJD.Text,Value) then begin
EditHD.Text:=FloatToStr(Value);
EditJD.Font.Color:=clBlack;
EditHD.Font.Color:=clBlack;
end else begin
EditHD.Clear;
EditJD.Font.Color:=clRed;
end;
except
end;
EditHD.Tag:=0;
end;
procedure TFormMath.EditHDChange(Sender: TObject);
var
Value:Extended;
begin
try
if EditHD.Tag=1 then exit;
EditJD.Tag:=1;
if CstrtoFloat(EditHD.Text,Value,SStrs) then begin
EditJD.Text:=FloatToDFM(Value);
EditJD.Font.Color:=clBlack;
EditHD.Font.Color:=clBlack;
end else begin
EditJD.Clear;
EditHD.Font.Color:=clRed;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -