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

📄 okc21mainut.pas.bak

📁 某省公路收费站违章车辆抓拍管理系统
💻 BAK
📖 第 1 页 / 共 3 页
字号:
unit okc21MainUt;

interface

uses
  Windows, Messages, SysUtils,StrUtils,Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, StdCtrls, Buttons, ComCtrls,jpeg, Db, DBTables,dateutils,inifiles,
  Grids, FMTBcd, DBXpress, Nb30, SqlExpr, Opfileut, Math,wnaspi32;

type
 {$A-}
  Tokc21CapFm = class(TForm)
    Timer2: TTimer;
    QuestionTb: TTable;
    StatusBar1: TStatusBar;
    Timer1: TTimer;
    PgCtrl: TPageControl;
    TabSht1: TTabSheet;
    TabSht2: TTabSheet;
    TabSht3: TTabSheet;
    TabSht4: TTabSheet;
    TabSht5: TTabSheet;
    StrGrid: TStringGrid;
    Timer3: TTimer;
    ListBox1: TListBox;
    Label1: TLabel;
    HDRefreshBtn: TBitBtn;
    Label2: TLabel;
    Bevel2: TBevel;
    TabSht6: TTabSheet;
    GroupBox2: TGroupBox;
    Cb1: TCheckBox;
    CB3: TCheckBox;
    CB2: TCheckBox;
    CB4: TCheckBox;
    CB5: TCheckBox;
    CB6: TCheckBox;
    Panel1: TPanel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    DateTimeEdit: TEdit;
    ChanelEdit: TEdit;
    WorkNoEdit: TEdit;
    NameEdit: TEdit;
    Bevel5: TBevel;
    Label3: TLabel;
    Label4: TLabel;
    Label9: TLabel;
    Label11: TLabel;
    BrightnessTB: TTrackBar;
    ContrastTB: TTrackBar;
    HueTB: TTrackBar;
    SaturationTB: TTrackBar;
    RadioBtn1: TRadioButton;
    RadioBtn2: TRadioButton;
    RadioBtn3: TRadioButton;
    RadioBtn4: TRadioButton;
    RadioBtn5: TRadioButton;
    RadioBtn6: TRadioButton;
    GroupBox1: TGroupBox;
    Label10: TLabel;
    PsnCarTypeEdit: TEdit;
    Label12: TLabel;
    ShiftEdit: TEdit;
    Label13: TLabel;
    AutoCarTypeEdit: TEdit;
    QestionTypeEdit: TEdit;
    Label14: TLabel;
    BatchMove: TBatchMove;
    FeeTab: TTable;
    TollorTab: TTable;
    ServerTab: TTable;
    QuestionDS: TDataSource;
    ForbidenCapBtn: TBitBtn;
    TabSht7: TTabSheet;
    Label15: TLabel;
    TabSheet1: TTabSheet;
    ExitBtn: TBitBtn;
    HDStrGrid: TStringGrid;
    Panel2: TPanel;
    Panel3: TPanel;
    Image61: TImage;
    Image60: TImage;
    Image51: TImage;
    Image50: TImage;
    Image41: TImage;
    Image40: TImage;
    Image31: TImage;
    Image30: TImage;
    Image21: TImage;
    Image20: TImage;
    Image11: TImage;
    Image10: TImage;
    Image: TImage;
    Image1: TImage;
    DatabaseServer: TDatabase;
    Commqry: TQuery;
    Animate1: TAnimate;
    FmtTimer: TTimer;
    procedure FormActivate(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure RadioBtn1Click(Sender: TObject);
    procedure BrightnessTBChange(Sender: TObject);
    procedure ContrastTBChange(Sender: TObject);
    procedure HueTBChange(Sender: TObject);
    procedure SaturationTBChange(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Timer3Timer(Sender: TObject);
    procedure HDRefreshBtnClick(Sender: TObject);
    procedure ListBox1Exit(Sender: TObject);
    procedure ForbidenCapBtnClick(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure ExitBtnClick(Sender: TObject);
    procedure FmtTimerTimer(Sender: TObject);
  private
   function  CopyRecord(S:DataRec):DataRec;
   procedure Capture(i:byte);
   procedure Savedata(Buf:DataRec;CarType,lane:byte);
   Function  FindDrives_defgh():string;
   procedure MoveDirTo(sourceDrv,targetDrv:char);
   Function  GetDateStr(t:TDateTime):string;
   Function  GetImageName(Buf:DataRec):string;
   Function  HdFormat(drive:char):boolean;
   Function  updatefromServer:boolean;
   procedure GetCap_MoveDrive;
   function  Ncb_Reset:boolean;
  public
    cb:array[1..6]of TcheckBox;
    procedure DATAMessage(var msg:TMessage); message DATA_MESSAGE;
    procedure IniFileReset;
  end;
const
  AD_Source=1;
  AD_Brightness=2;
  AD_Contrast=3;
  AD_Hue=4;
  AD_Saturation=5;
  VIDEO=0;
  VGASCREEN=-1;
  BUFFER=1;
  Meg=$100000;
  Gb=meg*$400;
  ImgW=384;
  ImgH=288;
  SHFMT_ID_DEFAULT=$FFFF;
  SHFMT_OPT_QUICKFORMAT=$0000;
var
  okc21CapFm: Tokc21CapFm;
  cancap,firstRun,NcbResetok:boolean;
  rect1:Trect;
  index:integer;
  Myini:TIniFile;
  jpg: TJpegImage;
  Handle1:cardinal;
  Lstart,Lend:array[1..6] of Dword;
  DateDir,CommStr: string;
  SysDrive,CapDrive,MoveToDrive:char;
  MaxSize,lanes,lana_num,LeftB,RightB:byte;
  AYear,AMonth,ADay,delay,delta:Word;
  ADate:TDateTime;
  Orignwidth,Orignheight,OrignBitsPerPel:integer;
  devmode:TDevicemode;
  MainLoop,NameAdded,StatTollor,StatFee:Boolean;
  lastcmd:array[1..6] of char;
  NoCapLane:set of 1..6;
  images:array[1..6,boolean] of TImage;
  flags:array[1..6] of boolean;
  tempstr:string;tempBool:bool;
  sPath,dPath:array[0..60] of char;
function okOpenBoard(var Index:Longint):HWND;stdcall;far;
function okCloseBoard(hBoard:HWND):Boolean;stdcall;far;
function okGetLastError:Longint;stdcall;far;
function okSetTargetRect(hBoard:HWND; tgt:integer; var lpTgtRect:TRect):Longint;stdcall;far;
function okSetToWndRect(hBoard:HWND;hWnd:HWND):Boolean;stdcall;far;
function okCaptureToScreen(hBoard:HWND):Boolean;stdcall;far;
function okStopCapture(hBoard:HWND):Boolean;stdcall;far;
function okSetVideoParam(hBoard:HWND; wParam:WORD; lParam:Longint):Longint;stdcall;far;
function okSetCaptureParam(hBoard:HWND; wParam:WORD; lParam:Longint):Longint;stdcall;far;
function okGetBoardIndex(var szBoardName:char; iNo:Smallint):Smallint;stdcall;far;
function okSetConvertParam(hBoard:HWND; wParam:WORD; lParam:Longint):Longint;stdcall;far;
function okWaitSignalEvent(hBoard:HWND; dlwParam:WPARAM; lMilliSecond:LPARAM):Longint;stdcall;far;
function okCaptureSingle(hBoard:HWND;Dest:integer;lStart:Longint):Boolean;stdcall;far;
function okTransferRect(hBoard:HWND; dest:integer; iFirst:Longint; src:integer; iStart:Longint; lNum:Longint):Longint;stdcall;far;
function okConvertRect(hBoard:HWND; dest:integer; iFirst:Longint; src:integer; iStart:Longint; lNum:Longint):Longint;stdcall;far;
function SHFormatDrive(Handle: HWND; Drive, ID, Options: Word): LongInt; stdcall; far;
implementation
{$R *.DFM}
function okOpenBoard(var Index:Longint):HWND;external'okapi32.dll';
function okCloseBoard(hBoard:HWND):Boolean;external'okapi32.dll';
function okGetLastError:Longint;external'okapi32.dll';
function okSetTargetRect(hBoard:HWND; tgt:integer; var lpTgtRect:TRect):Longint;external'okapi32.dll';
function okSetToWndRect(hBoard:HWND;hWnd:HWND):Boolean;external'okapi32.dll';
function okCaptureToScreen(hBoard:HWND):Boolean;external'okapi32.dll';
function okStopCapture(hBoard:HWND):Boolean;external'okapi32.dll';
function okSetVideoParam(hBoard:HWND; wParam:WORD; lParam:Longint):Longint;external'okapi32.dll';
function okSetCaptureParam(hBoard:HWND; wParam:WORD; lParam:Longint):Longint;external'okapi32.dll';
function okGetBoardIndex(var szBoardName:char; iNo:Smallint):Smallint;external'okapi32.dll';
function okSetConvertParam(hBoard:HWND; wParam:WORD; lParam:Longint):Longint;external'okapi32.dll';
function okWaitSignalEvent(hBoard:HWND; dlwParam:WPARAM; lMilliSecond:LPARAM):Longint;external'okapi32.dll';
function okCaptureSingle(hBoard:HWND;Dest:integer;lStart:Longint):Boolean;external'okapi32.dll';
function okTransferRect(hBoard:HWND; dest:integer; iFirst:Longint; src:integer; iStart:Longint; lNum:Longint):Longint;external'okapi32.dll';
function okConvertRect(hBoard:HWND; dest:integer; iFirst:Longint; src:integer; iStart:Longint; lNum:Longint):Longint;external'okapi32.dll';
function SHFormatDrive(Handle:HWND;Drive,ID,Options:Word):LongInt;external 'c:\winnt\system32\shell32.dll' name 'SHFormatDrive'

function Tokc21CapFm.Ncb_Reset:boolean;
  begin 
       result:=true;
       try
           Lana_num:=0;
           Ctlncb.ncb_lana_num:=lana_num;
           Ctlncb.ncb_command:=NCBRESET;
           Ctlncb.ncb_lsn:=0;
           Ctlncb.ncb_callname[0]:=#255; 
           Ctlncb.ncb_callname[2]:=#255;
           Netbios(addr(Ctlncb));
           if Ctlncb.ncb_retcode=NRC_GOODRET then
              StatusBar1.Panels[1].Text:='0网络初始化成功'
             else
              begin
              StatusBar1.Panels[1].Text:='0网络初始化失败:'+' '+inttostr(Ctlncb.ncb_cmd_cplt);
              lana_num:=1;
              Ctlncb.ncb_lana_num:=lana_num;
              Ctlncb.ncb_command:=NCBRESET;
              Ctlncb.ncb_lsn:=0;
              Ctlncb.ncb_callname[0]:=#250; 
              Ctlncb.ncb_callname[2]:=#250; 
              Netbios(addr(Ctlncb));
              if Ctlncb.ncb_retcode=NRC_GOODRET then
                 StatusBar1.Panels[1].Text:='1网络初始化成功'
               else
                 begin
                 StatusBar1.Panels[1].Text:='1网络初始化失败:'+' '+inttostr(Ctlncb.ncb_cmd_cplt);
                 result:=false;
                 end;
              end; 
         except
           result:=false;
         end;
    end;

Function Tokc21CapFm.HdFormat(drive:char):boolean;
 var i:byte;retCode: LongInt;
 begin
  firstRun:=true;
  FmtTimer.Enabled:=true;
  i:=ord(upcase(drive))-65;
  StatusBar1.Panels[7].Text:='格式化'+upcase(drive)+'盘!';
  if i=2 then  
   begin
   StatusBar1.Panels[7].Text:='不能格式化C盘!';
   result:=false;
   exit;
   end;
  retCode:=SHFormatDrive(Handle,i,SHFMT_ID_DEFAULT,SHFMT_OPT_QUICKFORMAT);
  if retCode< 0 then
   begin
   result:=false;
   StatusBar1.Panels[7].Text:=drive+'盘格式化失败!';
   end else result:=true;
   FmtTimer.Enabled:=false;
 end;
function  Tokc21CapFm.updatefromServer :boolean;
    var NewTime:TsystemTime;
        VarTime:TDateTime;
        hour,min,sec,msec:word;
   begin
    result:=true;
    try
    DatabaseServer.Open;
    CommQry.close;
    CommQry.sql.clear;
    CommQry.sql.add('select getdate()');
    CommQry.open;
    VarTime:=CommQry['Column1'];
    getlocaltime(Newtime); 
    decodetime(VarTime,hour,min,sec,msec); 
    decodedate(VarTime,Ayear,Amonth,Aday);
    with NewTime do
    begin
     wyear:=Ayear;
     wmonth:=Amonth;
     wday:=aday;
     whour:=hour;
     wMinute:=min;
     wSecond:=sec;
     wMilliseconds:=msec+50;
    end;
    setlocaltime(NewTime);
    except
     result:=false;
     StatusBar1.Panels[7].Text:='连接服务器出错';
    end;
    StatTollor:=TollorTab.Active;
    try
     TollorTab.Active:=false;
     ServerTab.Active:=false;
     ServerTab.TableName:='Dbo.SC';
     ServerTab.Active:=true;
     BatchMove.Source:=ServerTab;
     BatchMove.Destination:=TollorTab;
     BatchMove.Execute;
     TollorTab.Active:=StatTollor;
    except
     TollorTab.Active:=StatTollor;
     DatabaseServer.Close;
     StatusBar1.Panels[7].Text:='收费员表更新出错!';
     result:=false;
    end;
    StatFee:=FeeTab.Active;
    DatabaseServer.Open;
    try
     FeeTab.Active:=false;
     ServerTab.Active:=false;
     ServerTab.TableName:='Dbo.VF';
     ServerTab.Active:=true;
     BatchMove.Source:=ServerTab;
     BatchMove.Destination:=FeeTab;
     BatchMove.Execute;
     FeeTab.Active:=StatFee;
    except
     FeeTab.Active:=StatFee;
     DatabaseServer.Close;
     StatusBar1.Panels[7].Text:='费率表更新出错!';
     result:=false;
    end;
    ServerTab.Active:=false;
    DatabaseServer.Close;
    end;
procedure Tokc21CapFm.IniFileReset;
  var i,j,n,SortSize,skip:byte; 
      inorder:boolean; space,FreeSpace:Int64;
      logicDisk:array[1..6] of char;
      Diskspace:array[1..6] of word;
      temstr:string;
      station,CurrentDB:string;
begin   
   n:=0;
   for i:=3 to 26 do 
   begin
    space:=DiskSize(i) div Gb;
    FreeSpace:=DiskFree(i); 
    if (space<=1)or(FreeSpace=0) then 
        continue; 
    if not fileexists(Chr(64+i)+':\mark.ini') then
     begin
     MyIni:= TIniFile.Create(Chr(64+i)+':\mark.ini');
      if i=3 then
        begin
        MyIni.WriteString('Disk_set', 'disk', 'C');
        MyIni.Writeinteger('Disk_set', 'lanes', 6);
        MyIni.Writeinteger('Disk_set', 'contrast', 160);
        MyIni.Writeinteger('Disk_set', 'brightness',160);
        MyIni.Writeinteger('Disk_set', 'delay',180);
        end
          else
        MyIni.WriteString('Disk_set', 'disk', 'O');
     DecodeDate(now, AYear, AMonth, ADay);
     temstr:=format('%2.2d',[AYear])+'/'+format('%2.2d',[AMonth])+'/'+Format('%2.2d',[ADay]);
     MyIni.WriteString('Disk_set', 'date', temstr);
     MyIni.WriteString('Disk_set', 'maxfile', '2');
     MyIni.Free;
     end;
   end;
   for i:=4 to 26 do
    begin
     space:=DiskSize(i) div Gb;
     FreeSpace:=DiskFree(i); 
     if (space<=1)or(FreeSpace=0) then 
        continue; 
     inc(n); 
     logicDisk[n]:=Chr(64+i); 
     Diskspace[n]:=space;
     if n=5 then
        break;
    end;
    if n=0 then 
    begin
    StatusBar1.Panels[7].Text:='本机只有C盘?';
    exit;
    end;
    SortSize:=n; 
    skip:=SortSize;
    while skip>1 do
      begin
       skip:=skip div 2;
       repeat
        inorder:=true;
        for j:=1 to SortSize-skip do
           begin
           i:=j+skip;
           if Diskspace[i]<Diskspace[j] then
              begin
              Diskspace[6]:=Diskspace[i];
              Diskspace[i]:=Diskspace[j];
              Diskspace[j]:=Diskspace[6];
              logicDisk[6]:=logicDisk[i];

⌨️ 快捷键说明

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