unitmain.pas

来自「智能监控delphi源码, 操作说明 1. 在两台微机上分别运行文件夹中的可」· PAS 代码 · 共 1,203 行 · 第 1/3 页

PAS
1,203
字号
unit UnitMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, StdCtrls, ExtCtrls, ComCtrls, Videocap, DB, ADODB,
  Buttons, SPComm;

type
  TFormMain = class(TForm)
    memu: TMainMenu;
    View: TMenuItem;
    Help: TMenuItem;
    grp1: TGroupBox;
    grp2: TGroupBox;
    btnStartGet1: TButton;
    btnStopMoniter1: TButton;
    btnStartGet2: TButton;
    btnStopMoniter2: TButton;
    stat1: TStatusBar;
    SysTime: TTimer;
    File1: TMenuItem;
    NExit1: TMenuItem;
    Edit1: TMenuItem;
    StopGet: TMenuItem;
    StartGet: TMenuItem;
    NStartGet1: TMenuItem;
    NStartGet2: TMenuItem;
    NStopGet1: TMenuItem;
    NStopGet2: TMenuItem;
    Nop4: TMenuItem;
    VideoCap1: TVideoCap;
    VideoCap2: TVideoCap;
    LvEvent: TMenuItem;
    NRec: TMenuItem;
    NOpenAvi1: TMenuItem;
    NOpenAvi2: TMenuItem;
    dlgOpen1: TOpenDialog;
    N3: TMenuItem;
    N4: TMenuItem;
    NStartMoniter: TMenuItem;
    NStopMoniter: TMenuItem;
    N7: TMenuItem;
    NStartMoniter1: TMenuItem;
    NStartMoniter2: TMenuItem;
    NStopMoniter1: TMenuItem;
    NStopMoniter2: TMenuItem;
    BtnAM: TBitBtn;
    Comm1: TComm;
    tmrRevStr: TTimer;
    pnlShowRecoderMessageA: TPanel;
    pnlShowRecoderMessageB: TPanel;
    btnClearDB: TButton;
    tmrDelayAuto1: TTimer;
    tmrDelayAuto2: TTimer;
    tmrDelayMan1: TTimer;
    tmrDelayMan2: TTimer;
    Shape1: TShape;
    Shape2: TShape;
    tmrFlash1: TTimer;
    tmrFlash2: TTimer;
    Image1: TImage;
    Image2: TImage;
    Setup: TMenuItem;
    SelectMode1: TMenuItem;
    SelectAlarm: TMenuItem;
    MoniterMode: TMenuItem;
    SetTime: TMenuItem;
    ManMode: TMenuItem;
    ComputerMode: TMenuItem;
    AlarmOn: TMenuItem;
    AlarmOff: TMenuItem;
    MoniterAll: TMenuItem;
    MoniterNo1: TMenuItem;
    MoniterNo2: TMenuItem;
    Choise10s: TMenuItem;
    Choise20s: TMenuItem;
    Choise30s: TMenuItem;
    Choise60s: TMenuItem;
    N5: TMenuItem;
    procedure btnStartGet1Click(Sender: TObject);
    procedure btnStartGet2Click(Sender: TObject);
    procedure SysTimeTimer(Sender: TObject);
    procedure NExit1Click(Sender: TObject);
    procedure AlarmOnClick(Sender: TObject);
    procedure AlarmOffClick(Sender: TObject);
    procedure NStartGet1Click(Sender: TObject);
    procedure NStopGet1Click(Sender: TObject);
    procedure NStartGet2Click(Sender: TObject);
    procedure NStopGet2Click(Sender: TObject);
    procedure MoniterAllClick(Sender: TObject);
    procedure MoniterNo1Click(Sender: TObject);
    procedure MoniterNo2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure btnStopMoniter1Click(Sender: TObject);
    procedure btnStopMoniter2Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure NRecClick(Sender: TObject);
    procedure NStartMoniter1Click(Sender: TObject);
    procedure NStartMoniter2Click(Sender: TObject);
    procedure NStopMoniter1Click(Sender: TObject);
    procedure NStopMoniter2Click(Sender: TObject);
    procedure N4Click(Sender: TObject);
    procedure N3Click(Sender: TObject);
    procedure BtnAMClick(Sender: TObject);
    procedure Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
      BufferLength: Word);
    procedure tmrRevStrTimer(Sender: TObject);
    procedure NOpenAvi1Click(Sender: TObject);
    procedure NOpenAvi2Click(Sender: TObject);
    procedure btnClearDBClick(Sender: TObject);
    procedure tmrDelayAuto1Timer(Sender: TObject);
    procedure tmrDelayAuto2Timer(Sender: TObject);
    procedure tmrDelayMan1Timer(Sender: TObject);
    procedure tmrDelayMan2Timer(Sender: TObject);
    procedure tmrFlash1Timer(Sender: TObject);
    procedure tmrFlash2Timer(Sender: TObject);
    procedure ManModeClick(Sender: TObject);
    procedure ComputerModeClick(Sender: TObject);
    procedure Choise10sClick(Sender: TObject);
    procedure Choise20sClick(Sender: TObject);
    procedure Choise30sClick(Sender: TObject);
    procedure Choise60sClick(Sender: TObject);

  private
    { Private declarations }


  public
    function GetAviDir(n: Integer): string; //得到Avi文件夹地址
    function GetInfDir(): string; //得到Inf文件夹地址
    function GetDataBaseDir(): string; //得到DataBase文件夹地址
    function FIntToStr(Strn: string): string; //格式化视频文件名
    function WriteDB(ATime: TDateTime; AFileName: string; AString: string): integer; //往数据库写数据
    function GetDefaultAviName: string; //视频文件名的编号
    procedure Delay(msecs: integer);
    procedure Flash1; //发生异常情况时会在主窗体上有一个报警闪烁
    procedure Flash2;
    function SaveStrChangedA: Boolean;
    function SaveStrChangedB: Boolean;
    function CommRevStrChanged: Boolean;
    procedure StartRecordA;
    procedure StopRecordA;
    procedure StartRecordB;
    procedure StopRecordB;
    procedure ChangeNumberA;
    procedure ChangeNumberB;

  end;

var
  FormMain: TFormMain;
  rec1: Boolean; //摄像头1是否摄像的标志;当rec1 =1或true时 表示摄像  当为0或false时 表示不摄像;
  rec2: Boolean; //摄像头2是否摄像的标志;当rec2 =1或true时 表示摄像  当为0或false时 表示不摄像;
  nn, nn1, nn2: Integer; //文件存盘编号;
  str, str1, str2: string; //中间变量;
  strn, strn1, strn2, strn1Bak, strn2Bak: string;
  f, f1, f2: TextFile; // 创建文件时要用的变量;
  CommRevStr, CommRevStrBak, CommRevStrBakA, CommRevStrBakB: WideString; //接收字符串
  SSRec1, OCMon1, SSRec2, OCMon2, AM: Boolean; //开始-结束录像 打开-关闭监控  手动-自动监控
  FlashN1, FlashN2: string; //报警闪烁
  DateBak, TimeBak: TDateTime;
  AOrM: Integer;

implementation

uses UnitNo1, UnitNo2, UnitDataBase, UnitFormRec;


{$R *.dfm}
//编写窗体成员函数GetAviDir,该函数的功能是得到视频文件存放的具体文件夹。
//将其写成为一个函数,以便修改和维护。代码如下:

function TFormMain.GetAviDir(n: Integer): string;
begin
  Result := '.\avi' + IntToStr(n); ;
end;


//编写窗体成员函数GetInfDir,该函数的功能是得到文本文件存放的具体文件夹。
//将其写成为一个函数,以便修改和维护。代码如下:

function TFormMain.GetInfDir: string;
begin
  Result := '.\inf';
end;


//编写窗体成员函数GetDataBaseDir,该函数的功能是得到数据库文件存放的具体文件夹。
//将其写成为一个函数,以便修改和维护。代码如下:

function TFormMain.GetDataBaseDir: string;
begin
  Result := '.\database';
end;


//编写窗体成员函数WriteDB,该函数的功能是将异常情况的相应信息写入数据库,
//该函数被函数tmrControlTimer和函数btnStartGet1Click调用 。代码如下:

function TFormmain.WriteDB(ATime: TDateTime; AFileName: string; AString: string): integer;
begin
  Result := 1;
  try
        //数据模块中的事件记录表
    with DMMain.tblEvent do
    begin
      Append();
      FieldByName('EventTime').AsDateTime := ATime;
      FieldByName('AviName').AsString := AFileName;
      FieldByName('MoniterNumber').AsString := AString;
      Post();
    end;
  except
    Result := -1;
  end;
end;

//编写窗体成员函数GetDefaultAviName,该函数实现的功能是从数据库中得到默认的
//视频文件名称,默认文件名的规则为“00000001.avi,00000002.avi,...”。

function TFormmain.GetDefaultAviName: string;
var
  mQuery: TADOQuery;
  mMaxId: integer;
  mStr: string;
begin
  mStr := 'SELECT max(Event Id) FROM eventrec';
  //动态生成Qurry控件;
  mQuery := TADOQuery.Create(nil);
  with mQuery do
  begin
    //设置连接属性;
    Connection := DMMain.conMain;
    SQL.Clear;
    SQL.Add(mStr);
    try
      Open();
      //数据库中有数据;
      if not Fields[0].IsNull then
      begin
        mMaxId := Fields[0].Value + 1;
        Result := FIntToStr(IntToStr(mMaxId)) + '.avi';
      end
      else //数据库为空;
      begin
        Result := FIntToStr(IntToStr(1)) + '.avi';
      end;
    except
      Result := '';
    end;
  end;
end;

//编写窗体成员函数FIntToStr,该函数的功能是完成整形数据到字符串的转换,
//如果整形数据不足8位,前面用零补齐

function TFormmain.FIntToStr(Strn: string): string;
begin
  while length(Strn) <= 7 do
  begin
    Strn := '0' + Strn;
  end;
  result := Strn;
end;


procedure TFormMain.Delay(msecs: Integer);
var
  FirstTickCount: LongInt;
begin
  FirstTickCount := GetTickCount;
  repeat
    Application.ProcessMessages; {allowing access to other controls etc.}
  until ((GetTickCount - FirstTickCount) >= LongInt(msecs));
end;

//完成在出现异常情况下时的报警闪烁功能

procedure TFormMain.Flash1;
begin
  if FlashN1 = '0' then
  begin
    Shape1.Brush.Color := clRed;
    FlashN1 := '1';
    Exit;
  end;
  if FlashN1 = '1' then
  begin
    Shape1.Brush.Color := clBtnFace;
    FlashN1 := '0';
    Exit;
  end;
end;

procedure TFormMain.Flash2;
begin
  if FlashN2 = '0' then
  begin
    Shape2.Brush.Color := clRed;
    FlashN2 := '1';
    Exit;
  end;
  if FlashN2 = '1' then
  begin
    Shape2.Brush.Color := clBtnFace;
    FlashN2 := '0';
    Exit;
  end;
end;


function TFormMain.CommRevStrChanged: Boolean;
begin
  if CompareStr(CommRevStr, CommRevStrBak) <> 0 then Result := True
  else Result := False;
  CommRevStrBak := CommRevStr;
end;


function TFormMain.SaveStrChangedA: Boolean;
begin
  if CompareStr(strn1, strn1Bak) <> 0 then Result := True
  else Result := False;
  strn1Bak := strn1;
end;


function TFormMain.SaveStrChangedB: Boolean;
begin
  if CompareStr(strn2, strn2Bak) <> 0 then Result := True
  else Result := False;
  strn2Bak := strn2;
end;


procedure TFormMain.ChangeNumberA;
begin
  DateBak := Date;
  TimeBak := Time;
end;


procedure TFormMain.ChangeNumberB;
begin
  DateBak := Date;
  TimeBak := Time;
end;


procedure TFormMain.StartRecordA;
begin
  if strn1 = '' then strn1 := '1';
  VideoCap1.CapTimeLimit := 0;
  VideoCap1.VideoFileName := GetAviDir(1) + '\' + FIntToStr(Strn1) + '.avi';
  VideoCap1.StartCapture;
  VideoCap1.DlgVCompression;
  if SaveStrChangedA then
  begin
    WriteDB(DateBak + TimeBak, VideoCap1.VideoFileName, '1#摄像头出现异常情况'); //将有关的信息写入数据库;
  end;
  pnlShowRecoderMessageA.Caption := '摄像头A录制中……';
  tmrFlash1.Enabled := True;
  tmrDelayAuto1.Enabled := True; //启动定时,到时自动停止录像
  if AlarmOn.Checked then Image1.Visible := True; //如果启动报警,则出现
end;

procedure TFormMain.StopRecordA;
begin
  btnStartGet1.Caption := '开始录像';
  VideoCap1.StopCapture;
  pnlShowRecoderMessageA.Caption := '摄像头A停止录制';
  tmrFlash1.Enabled := False;
  Shape1.Brush.Color := clBtnFace;
  Image1.Visible:=False;
end;

procedure TFormMain.StartRecordB;
begin
  if strn2 = '' then strn2 := '1';
  VideoCap2.CapTimeLimit := 0;
  VideoCap2.VideoFileName := GetAviDir(2) + '\' + FIntToStr(Strn2) + '.avi';
  VideoCap2.StartCapture;
  VideoCap2.DlgVCompression;
  if SaveStrChangedB then
  begin
    WriteDB(DateBak + TimeBak, VideoCap2.VideoFileName, '2#摄像头出现异常情况'); //将有关的信息写入数据库;
  end;
  pnlShowRecoderMessageB.Caption := '摄像头B录制中……';
  tmrFlash2.Enabled := True;
  tmrDelayAuto2.Enabled := True;
  if AlarmOn.Checked then Image2.Visible := True;
end;

procedure TFormMain.StopRecordB;
begin
  btnStartGet2.Caption := '开始录像';
  VideoCap2.StopCapture;
  pnlShowRecoderMessageB.Caption := '摄像头B停止录制';
  tmrFlash2.Enabled := False;

⌨️ 快捷键说明

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