📄 drawinfor.pas
字号:
//斜接近
if (rNew_Infor.StratY[i-1]<> rNew_Infor.EndY[i-1]) and (rNew_Infor.StratY[i-1]*rNew_Infor.EndY[i-1]>0) then
rE_Infor.E_M:=Get_M2_Data(rE_Infor.E_w,rNew_Infor.AveDDL[i-1],rNew_Infor.StratY[i-1]/1000,rNew_Infor.EndY[i-1]/1000);
//交越时
if (rNew_Infor.StratY[i-1]<> rNew_Infor.EndY[i-1]) and (rNew_Infor.StratY[i-1]*rNew_Infor.EndY[i-1]<0) then
rE_Infor.E_M:=Get_M3_Data(rE_Infor.E_w,rNew_Infor.AveDDL[i-1]/1000,rNew_Infor.StratY[i-1],rNew_Infor.EndY[i-1]/1000);
rE_Infor.E_l:= rNew_Infor.Lengthl[i-1]/1000; //投影长度 (把单位米化成KM)
if rPara.RunState=True then
rE_Infor.E_I:= rNew_Infor.Id[i-1] //牵引电流
else
rE_Infor.E_I:= rNew_Infor.GDB_Is[i-1] ; //短路电流
if rPara.SingTral=True then
rE_Infor.E_r:= Get_I_Single_Data(rNew_Infor.AveDDL[i-1]) // 单轨屏蔽系数
else
rE_Infor.E_r:= Get_I_double_Data(rNew_Infor.AveDDL[i-1]); // 复轨屏蔽系数
strX := rNew_Infor.EndX[i-1];
strY :=strY+rE_Infor.E_w*rE_Infor.E_M*rE_Infor.E_l*rE_Infor.E_I*rE_Infor.E_r*rE_Infor.E_K;
rNew_Infor.DDS_E[i-1]:=strY;//磁感应电动势
end ;
with ShowDrawForm do
begin
LineSeries1.AddXY(strX, strY, '', clTeeColor );
Series5.AddXY(strX, strY, '', clTeeColor );
case ChartNum of
1: begin
LineSeries5.AddXY(strX, strY, '', clTeeColor );
PointSeries2.AddXY(strX, strY, '', clTeeColor );
end;
2: begin
LineSeries3.AddXY(strX, strY, '', clTeeColor );
PointSeries1.AddXY(strX, strY, '', clTeeColor );
end;
end;
if strY>=AddRedValue then
begin
if AddRed = False then
begin
if i > 1 then
strRedX:=Get_PointRedX(rNew_Infor.EndX[i-2], rNew_Infor.DDS_E[i-2],rNew_Infor.EndX[i-1], rNew_Infor.DDS_E[i-1]);
if i = 1 then
strRedX:=Get_PointRedX(rNew_Infor.StratX[0], 0, rNew_Infor.EndX[i-1], rNew_Infor.DDS_E[i-1]);
case ChartNum of
1: begin
LineSeries2.AddXY(strRedX, AddRedValue, '', clTeeColor );
end;
2: begin
LineSeries4.AddXY(strRedX, AddRedValue, '', clTeeColor );
end;
end;
AddRed:=True;
end;
if strY>AddRedValue then
case ChartNum of
1: begin
LineSeries2.AddXY(strX, strY, '', clTeeColor );
end;
2: LineSeries4.AddXY(strX, strY, '', clTeeColor );
end;
end;
end;
i:=i+1;
end;
ShowDrawForm.LineSeries2.AddXY(rNew_Infor.StratX[0], AddRedValue, '', clTeeColor );
ShowDrawForm.LineSeries2.AddXY(rNew_Infor.EndX[rNew_Infor.Num-1], AddRedValue, '', clTeeColor );
ShowDrawForm.SpinEdit2.MaxValue :=ShowDrawForm.Chart2.Series[0].Count;
ShowDrawForm.SpinEdit2.Value :=ShowDrawForm.Chart2.Series[0].Count;
//===第二幅图绘制完毕
close;
end;
procedure TDrawInforForm.BitBtn1Click(Sender: TObject);
var
i:Integer;
begin
if not OpenDialog1.Execute then Exit;
BitBtn2.Enabled:=True;
try
Excel:=CreateOleObject('Excel.Application' );
except
on Exception do raise exception.Create('无法创建Xls文件,请确认是否安装EXCEL')
end;
Excel.Workbooks.Open(OpenDialog1.FileName);
//**********
ComboBox1.Clear;
For i:=1 to Excel.Worksheets.Count do
ComboBox1.Items.Add(Excel.Worksheets.Item[i].Name);
ComboBox1.ItemIndex:=0;
// Excel.Visible := True;
Edit1.Text:=OpenDialog1.FileName;
Excel.ActiveWorkBook.Saved := True; //表示不保存,关闭,不再显示是否保存的消息,而是直接关闭
lvTestPointList.Items.Clear;
end;
procedure TDrawInforForm.BitBtn2Click(Sender: TObject);
var
i,j : Integer;
Item : TListItem;
temp : string;
StartPoint:Single;
begin
lvTestPointList.Clear;
ProgressBar1.Position:=0;
try
Edit4.Text:=Excel.Cells.Item[2,1]; //起点公里数
StartPoint:=Excel.Cells.Item[2,1]; //起点公里数
ProgressBar1.Max := Excel.ActiveSheet.UsedRange.Rows.Count-2;
if Excel.ActiveSheet.UsedRange.Rows.Count > updown1.Position then
for i:=updown1.Position to (Excel.ActiveSheet.UsedRange.Rows.Count-1) do
begin
Item := lvTestPointList.Items.Add;
Item.Caption :=IntToStr(lvTestPointList.Items.Count);
for j:=updown2.Position to Excel.ActiveSheet.UsedRange.Columns.Count-1 do
begin
lvTestPointList.Columns[j].Caption:=Excel.Cells.Item[1,j+1];
Item.SubItems.Add(Excel.Cells.Item[i+1,j+1]);
end;
ProgressBar1.Position:=i-1;
end;
//==给电动势测量点相关数据赋值
for i:=2 to Excel.ActiveSheet.UsedRange.Rows.Count+1 do//i从2开始就是从第二行开始,第一行是表头
begin
temp:=Excel.Cells.Item[i,2];
if temp ='' then
begin
rDDSInfo.Num := i-1;//有效数据的行数 +1 =点数
if rDDSInfo.Num <= 1 then
begin
Application.MessageBox('电子表格数据格式错误!!', '错误',
MB_OK + MB_ICONSTOP);
Exit;
end;
Break;
end;
end;
Setlength(rDDSInfo.PointX , rDDSInfo.Num);
Setlength(rDDSInfo.PointY , rDDSInfo.Num);
for i:=1 to rDDSInfo.Num do
begin
try
//==计算横坐标
if i=1 then
rDDSInfo.PointX[i-1] := StartPoint;
if (i>1) and (i<rDDSInfo.Num) then
begin
rDDSInfo.PointX[i-1] :=Excel.Cells.Item[i,4];
rDDSInfo.PointX[i-1] :=rDDSInfo.PointX[i-1]+rDDSInfo.PointX[i-2];
end;
if i=rDDSInfo.Num then
begin
rDDSInfo.PointX[i-1] :=Excel.Cells.Item[i,4];
rDDSInfo.PointX[i-1] :=rDDSInfo.PointX[i-1]+rDDSInfo.PointX[i-2];
end;
//==计算纵坐标
if i = rDDSInfo.Num then
rDDSInfo.PointY[i-1]:= Excel.Cells.Item[i,3]
else
rDDSInfo.PointY[i-1]:= Excel.Cells.Item[i+1,2];
except
Application.MessageBox('电子表格电动势测点位置参数格式错误!!',
'错误', MB_OK + MB_ICONSTOP);
end;
end;
//=====给大地导电率相关数据赋值
for i:=2 to Excel.ActiveSheet.UsedRange.Rows.Count+1 do//i从2开始就是从第二行开始,第一行是表头
begin
temp:=Excel.Cells.Item[i,5];//第五列
if temp ='' then
begin
rDDLInfo.Num := i-2;//有效数据的行数
if rDDLInfo.Num <= 0 then
begin
Application.MessageBox('电子表格数据格式错误!!', '错误',
MB_OK + MB_ICONSTOP);
Exit;
end;
Break;
end;
end;
Setlength(rDDLInfo.AreaPoint , rDDLInfo.Num);
Setlength(rDDLInfo.DDL_Forty , rDDLInfo.Num);
Setlength(rDDLInfo.DDL_Eighty , rDDLInfo.Num);
for i:=1 to rDDLInfo.Num do
begin
try
rDDLInfo.AreaPoint[i-1] := Excel.Cells.Item[i+1,5];
rDDLInfo.DDL_Forty[i-1] := Excel.Cells.Item[i+1,6];
rDDLInfo.DDL_Eighty[i-1] := Excel.Cells.Item[i+1,7];
except
Application.MessageBox('电子表格电动势测点位置参数格式错误!!',
'错误', MB_OK + MB_ICONSTOP);
end;
end;
//========给牵引变电所相关数据赋值
for i:=2 to Excel.ActiveSheet.UsedRange.Rows.Count+1 do//i从2开始就是从第二行开始,第一行是表头
begin
temp:=Excel.Cells.Item[i,8];
if temp ='' then
begin
rBDSInfo.Num := i-2;//有效数据的行数
if rBDSInfo.Num <= 0 then
begin
Application.MessageBox('电子表格数据格式错误!!', '错误',
MB_OK + MB_ICONSTOP);
Exit;
end;
Break;
end;
end;
Setlength(rBDSInfo.beginPoint , rBDSInfo.Num);
Setlength(rBDSInfo.EndPoint , rBDSInfo.Num);
Setlength(rBDSInfo.GDB_I , rBDSInfo.Num);
Setlength(rBDSInfo.GDB_Is , rBDSInfo.Num);
Setlength(rBDSInfo.AveDDL , rBDSInfo.Num);
for i:=1 to rBDSInfo.Num do
begin
try
rBDSInfo.beginPoint[i-1] := Excel.Cells.Item[i+1,8];
rBDSInfo.EndPoint[i-1] := Excel.Cells.Item[i+1,9];
rBDSInfo.GDB_I[i-1] := Excel.Cells.Item[i+1,10];
rBDSInfo.GDB_Is[i-1] := Excel.Cells.Item[i+1,11];
except
Application.MessageBox('电子表格电动势测点位置参数格式错误!!',
'错误', MB_OK + MB_ICONSTOP);
end;
end;
//==赋值结束
except;
end;
btn1.Enabled:=True;
BitBtn4.Enabled:=True;
end;
procedure TDrawInforForm.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Try
Excel.Quit;
Except
End;
end;
procedure TDrawInforForm.ComboBox1Change(Sender: TObject);
begin
Excel.Sheets[ComboBox1.ItemIndex+1].Activate;
Excel.ActiveWorkBook.Saved := True; //表示不保存,关闭,不再显示是否保存的消息,而是直接关闭
end;
procedure TDrawInforForm.BitBtn4Click(Sender: TObject);
begin
if Messagebox(handle,'您确定要将数据导出到Excel中吗?','询问',MB_YESNO+MB_ICONQUESTION)=IDYES then begin
btn1Click(Sender);
OutToExcel.Create(true);
progressform:=Tprogressform.Create(self);
progressform.ShowModal;
end;
end;
initialization
CoInitialize(nil);
finalization
CoUnInitialize;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -