⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 drawinfor.pas

📁 基于高速铁路周边电动势计算的关键
💻 PAS
📖 第 1 页 / 共 2 页
字号:
                     //斜接近
                  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 + -