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

📄 main.pas

📁 合成实验的上位机程序
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, Buttons, StdCtrls, jpeg, Menus, ComCtrls, ToolWin,
  XPMenu, ImgList, ActnList, StdActns;

type
  TMainFrm = class(TForm)
    IconImg: TImage;
    CaptionLbl: TLabel;
    MinSpdBtn: TSpeedButton;
    CloseSpdBtn: TSpeedButton;
    MainMenu1: TMainMenu;
    rtFile: TMenuItem;
    rtPara: TMenuItem;
    ParaAdd: TMenuItem;
    N10: TMenuItem;
    ParaData: TMenuItem;
    FileExit: TMenuItem;
    rtTest: TMenuItem;
    TestRun: TMenuItem;
    N15: TMenuItem;
    TestVer: TMenuItem;
    SelfCheck: TMenuItem;
    rtView: TMenuItem;
    WaveView: TMenuItem;
    rtHelp: TMenuItem;
    About: TMenuItem;
    N22: TMenuItem;
    HelpRun: TMenuItem;
    CoolBar2: TCoolBar;
    ImageList1: TImageList;
    Label1: TLabel;
    Image3: TImage;
    Image4: TImage;
    Label2: TLabel;
    Image6: TImage;
    Label3: TLabel;
    Image7: TImage;
    Label4: TLabel;
    FrameImg: TImage;
    OpenDialog1: TOpenDialog;
    ToolBar2: TToolBar;
    ToolButton7: TToolButton;
    ParaAddBtn: TToolButton;
    ToolButton9: TToolButton;
    ParaDataBtn: TToolButton;
    ToolButton11: TToolButton;
    TestRunBtn: TToolButton;
    ToolButton13: TToolButton;
    TestVerBtn: TToolButton;
    ToolButton15: TToolButton;
    SelfCheckBtn: TToolButton;
    ToolButton17: TToolButton;
    WaveViewBtn: TToolButton;
    ToolButton19: TToolButton;
    AboutBtn: TToolButton;
    ToolButton21: TToolButton;
    HelpRunBtn: TToolButton;
    ToolButton23: TToolButton;
    FileExitBtn: TToolButton;
    ToolButton25: TToolButton;
    SaveDialog1: TSaveDialog;
    Label7: TLabel;
    CoolBar1: TCoolBar;
    ToolBar1: TToolBar;
    Timer1: TTimer;
    Reset: TMenuItem;
    N2: TMenuItem;
    ResetBtn: TToolButton;
    ToolButton2: TToolButton;
    N1: TMenuItem;
    procedure FormCreate(Sender: TObject);
    procedure MinSpdBtnClick(Sender: TObject);
    procedure CloseSpdBtnClick(Sender: TObject);
    procedure FrameImgMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FrameImgMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FrameImgMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FileExitClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure ParaAddBtnClick(Sender: TObject);
    procedure ParaAddClick(Sender: TObject);
    procedure ParaDataClick(Sender: TObject);
    procedure ParaDataBtnClick(Sender: TObject);
    procedure WaveViewBtnClick(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure WaveViewClick(Sender: TObject);
    procedure FileExitBtnClick(Sender: TObject);
    procedure TestRunClick(Sender: TObject);
    procedure TestRunBtnClick(Sender: TObject);
    procedure SelfCheckClick(Sender: TObject);
    procedure SelfCheckBtnClick(Sender: TObject);
    procedure AboutClick(Sender: TObject);
    procedure AboutBtnClick(Sender: TObject);
    procedure N1Click(Sender: TObject);
    procedure HelpRunClick(Sender: TObject);
    procedure HelpRunBtnClick(Sender: TObject);
  private
  
  public
    { Public declarations }
  end;

var
  MainFrm: TMainFrm;
  golMouseDownFlag: Boolean;//鼠标是否在标题栏内按下
  golOldMouseX,golOldMouseY:Integer;//鼠标按下后的坐标
  cnnConNo,cnnVerNo: array[1..32] of TLabel;   //控制/校验通道标签变量
  cnnConImg,cnnVerImg:array[1..32] of TImage;  //控制/校验通道图像变量
  cnnHighNo,cnnArcNo: array[1..4] of TLabel;   //高压/延弧开锁通道标签变量
  cnnHighImg,cnnArcImg: array[1..4] of TImage; //高压/延弧开锁通道图标变量
  PictureDir:String;       //存放图片文件夹的路径
  DataDir:String;          //参数文件夹的路径
  ShuJuDir:String;         //数据文件夹的路径
  golTime: array[0..10] of Double;

implementation
uses
  Splash, ParaData, ParaAdd, TestVer, WaveView, TestControl, SelfCheck,
  SPort, Help;

{$R *.dfm}

//**********本单元中所有代码用于改变显示器的分辨率为1024×768,85Hz************//
function DynamicResolution(X, Y, F: word): BOOL;
begin
  Result := EnumDisplaySettings(nil, 0, lpDevMode);
  if Result then
  begin
    lpDevMode.dmFields := DM_PELSWIDTH Or DM_PELSHEIGHT Or DM_DISPLAYFREQUENCY;
    lpDevMode.dmPelsWidth := X;
    lpDevMode.dmPelsHeight := Y;
    lpDevMode.dmDisplayFrequency:=F;
    Result := ChangeDisplaySettings(lpDevMode, 0) = DISP_CHANGE_SUCCESSFUL;
  end;
end;

procedure TMainFrm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  //********************刷新显示器的分辨率为800*600***************************//
  if Splash.disFlag=True then
    DynamicResolution(800,600,85);
end;

procedure TMainFrm.FormCreate(Sender: TObject);
var 
  CurrTime: TSystemTime;
  Sec: Word;
  I: Integer;
  lpRect:tRect;
  cnnConCap: array[1..4] of TLabel;//4个控制标题
  cnnVerCap: array[1..4] of TLabel;//4个校验标题
  cnnUnlockCap: TLabel;//1个开锁标题
begin
  //*************启动画面延时5秒***************//
  GetSystemTime(CurrTime);
  for I:=1 to 0 do
  begin
    Sec := CurrTime.wSecond + 1;
    while Sec>CurrTime.wSecond do
      GetSystemTime(CurrTime);
    SplashFrm.Label1.Caption:=SplashFrm.Label1.Caption+'.';
    SplashFrm.Update;
  end;
  //*************界面初始化时最大化显示************//
  SystemParametersInfo(SPI_GETWORKAREA,0,@lpRect,0);
  MainFrm.Top:=lpRect.Top;
  MainFrm.Left:=lpRect.Left;
  MainFrm.Width:=lpRect.Right-lpRect.Left;
  MainFrm.Height:=lpRect.Bottom-lpRect.Top;
  //取得指示灯图片所在的路径
  PictureDir:=ExtractFilePath(Application.ExeName)+'Picture\';
  //取得参数文件夹的路径
  DataDir:=ExtractFilePath(Application.ExeName)+'Data\';
  //取得数据文件夹的路径
  ShuJuDir:=ExtractFilePath(Application.ExeName)+'数据\';
  //动态创建4个控制通道的标题
  for I:=1 to 4 do
  begin
    cnnConCap[I]:=TLabel.Create(Self);
    cnnConCap[I].Parent:=MainFrm;
    cnnConCap[I].Font.Charset:=GB2312_CHARSET;
    cnnConCap[I].Font.Name:='宋体';
    cnnConCap[I].Font.Size:=12;
    cnnConCap[I].Font.Color:=clNavy;
    cnnConCap[I].AutoSize:=True;
    cnnConCap[I].Transparent:=True;
    cnnConCap[I].Left:=256;
    case I of
      1: begin
           cnnConCap[I].Top:=137;
           cnnConCap[I].Caption:='控制通道01~08:';
         end;
      2: begin
           cnnConCap[I].Top:=196;
           cnnConCap[I].Caption:='控制通道09~16:';
         end;
      3: begin
           cnnConCap[I].Top:=255;
           cnnConCap[I].Caption:='控制通道17~24:';
         end;
      4: begin
           cnnConCap[I].Top:=314;
           cnnConCap[I].Caption:='控制通道25~32:';
         end;
    end;
  end;
  //动态创建4个校验通道的标题
  for I:=1 to 4 do
  begin
    cnnVerCap[I]:=TLabel.Create(Self);
    cnnVerCap[I].Parent:=MainFrm;
    cnnVerCap[I].Font.Charset:=GB2312_CHARSET;
    cnnVerCap[I].Font.Name:='宋体';
    cnnVerCap[I].Font.Size:=12;
    cnnVerCap[I].Font.Color:=clNavy;
    cnnVerCap[I].AutoSize:=True;
    cnnVerCap[I].Transparent:=True;
    cnnVerCap[I].Left:=256;
    case I of
      1: begin
           cnnVerCap[I].Top:=385;
           cnnVerCap[I].Caption:='校验通道01~08:';
         end;
      2: begin
           cnnVerCap[I].Top:=444;
           cnnVerCap[I].Caption:='校验通道09~16:';
         end;
      3: begin
           cnnVerCap[I].Top:=503;
           cnnVerCap[I].Caption:='校验通道17~24:';
         end;
      4: begin
           cnnVerCap[I].Top:=562;
           cnnVerCap[I].Caption:='校验通道25~32:';
         end;                         
    end;
  end;
  //动态生成32个控制通道指示灯和标签
  for I:=1 to 32 do
  begin
    cnnConNo[I]:=TLabel.Create(Self);
    cnnConNo[I].Parent:=MainFrm;
    cnnConNo[I].Font.Charset:=GB2312_CHARSET;
    cnnConNo[I].Font.Name:='宋体';
    cnnConNo[I].Font.Size:=12;
    cnnConNo[I].Height:=16;
    cnnConNo[I].Width:=48;
    cnnConNo[I].Transparent:=True;
    cnnConImg[I]:=TImage.Create(Self);
    cnnConImg[I].Parent:=MainFrm;
    cnnConImg[I].Height:=36;
    cnnConImg[I].Width:=36;
    cnnConImg[I].AutoSize:=True;
    cnnConImg[I].Transparent:=True;
    cnnConImg[I].Tag:=I;
    try
      cnnConImg[I].Picture.LoadFromFile(PictureDir+'Gray.bmp');
    except
      if MessageBox(MainFrm.Handle,'主程序调用指定文件出错,"Gray.bmp"文件不存在!'+#10+#13+
        '请在备份数据文件后重装应用程序。', '错误', MB_OK+MB_ICONERROR)=IDOK then
           Exit;
    end;
    case ((I-1) div 8) of
      0:begin           
          cnnConNo[I].Left:=382+78*(I-1);
          cnnConNo[I].Top:=137;
          cnnConNo[I].Caption:='控制0'+IntToStr(I);
          cnnConImg[I].Left:=389+78*(I-1);
          cnnConImg[I].Top:=156;
        end;
      1:begin
          cnnConNo[I].Left:=382+78*(I-9);
          cnnConNo[I].Top:=196;
          if I=9 then
            cnnConNo[I].Caption:='控制0'+IntToStr(I)
          else
            cnnConNo[I].Caption:='控制'+IntToStr(I);
          cnnConImg[I].Left:=389+78*(I-9);
          cnnConImg[I].Top:=215;
        end;
      2:begin
          cnnConNo[I].Left:=382+78*(I-17);
          cnnConNo[I].Top:=255;
          cnnConNo[I].Caption:='控制'+IntToStr(I);
          cnnConImg[I].Left:=389+78*(I-17);
          cnnConImg[I].Top:=274;
        end;
      3:begin
          cnnConNo[I].Left:=382+78*(I-25);
          cnnConNo[I].Top:=314;
          cnnConNo[I].Caption:='控制'+IntToStr(I);
          cnnConImg[I].Left:=389+78*(I-25);
          cnnConImg[I].Top:=333;
        end;
      end;
  end;
  //动态生成32个校验通道指示灯和标签
  for I:=1 to 32 do
  begin
    cnnVerNo[I]:=TLabel.Create(Self);
    cnnVerNo[I].Parent:=MainFrm;
    cnnVerNo[I].Font.Charset:=GB2312_CHARSET;
    cnnVerNo[I].Font.Name:='宋体';
    cnnVerNo[I].Font.Size:=12;
    cnnVerNo[I].Height:=16;
    cnnVerNo[I].Width:=48;
    cnnVerNo[I].Transparent:=True;
    cnnVerImg[I]:=TImage.Create(Self);
    cnnVerImg[I].Parent:=MainFrm;
    cnnVerImg[I].Height:=36;
    cnnVerImg[I].Width:=36;
    cnnVerImg[I].AutoSize:=True;
    cnnVerImg[I].Transparent:=True;
    cnnVerImg[I].Tag:=I;
    try
      cnnVerImg[I].Picture.LoadFromFile(PictureDir+'Gray.bmp');
    except
      if MessageBox(MainFrm.Handle,'主程序调用指定文件出错,"Gray.bmp"文件不存在!'+#10+#13+
        '请在备份数据文件后重装应用程序。', '错误', MB_OK+MB_ICONERROR)=IDOK then
           Exit;
    end;
    case ((I-1) div 8) of
      0:begin
          cnnVerNo[I].Left:=382+78*(I-1);
          cnnVerNo[I].Top:=385;
          cnnVerNo[I].Caption:='校验0'+IntToStr(I);
          cnnVerImg[I].Left:=389+78*(I-1);
          cnnVerImg[I].Top:=404;
        end;
      1:begin
          cnnVerNo[I].Left:=382+78*(I-9);
          cnnVerNo[I].Top:=444;
          if I=9 then
            cnnVerNo[I].Caption:='校验0'+IntToStr(I)
          else
            cnnVerNo[I].Caption:='校验'+IntToStr(I);
          cnnVerImg[I].Left:=389+78*(I-9);
          cnnVerImg[I].Top:=463;
        end;
      2:begin
          cnnVerNo[I].Left:=382+78*(I-17);
          cnnVerNo[I].Top:=503;
          cnnVerNo[I].Caption:='校验'+IntToStr(I);
          cnnVerImg[I].Left:=389+78*(I-17);
          cnnVerImg[I].Top:=522;
        end;
      3:begin
          cnnVerNo[I].Left:=382+78*(I-25);
          cnnVerNo[I].Top:=562;
          cnnVerNo[I].Caption:='校验'+IntToStr(I);
          cnnVerImg[I].Left:=389+78*(I-25);
          cnnVerImg[I].Top:=581;
        end;
      end;
  end;
  //动态创建1个开锁通道的标题
  begin
    cnnUnlockCap:=TLabel.Create(Self);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -