m1

来源:互联网 发布:淘宝店铺装修工具箱 编辑:程序博客网 时间:2024/05/01 05:53

/******************************************************************************
*                                                                             *
*    文件名  : main.cpp                                                       *
*    开发人  : 胡智玮                                                         *
*    开发时间: 2005.03.05                                                     *                                                                             *
*    版本    : 2.0.0.0                                                        *
*                                                                             *
******************************************************************************/
//---------------------------------------------------------------------------
#include <vcl.h>
#include <iostream.h>
#include <fstream.h>
#include <stdio.h>
#include <sys/stat.h>
#include <string.h>
#include <fcntl.h>
#include <io.h>
#include <Registry.hpp>//读写INI
#pragma hdrstop

#include "Main.h"
#include "AddGas.h"
#include "AddSu.h"
#include "AddSm.h"
#include "About.h"                 
#include "AddNet.h"
#include "SuInfo.h"
#include "SmInfo.h"
#include "AddDev.h"
#include "AddAvdServer.h"
#include "GacHuaLu.h"
#include "GacHunYin.h"
#include "GacDuanKou.h"
#include "GetBanBenHao.h"
#include "SetControlTime.h"
#include "GmuxYeWuKou.h"
#include "SocketOnly.h"
#include "GpaSqlInfo.h"
#include "ListTransferStateArm.h"
#include "DvrVideoParam.h"
#include "FarUpDateNew.h"
#include "HideTime.h"
#include "ShowTime.h"
#include "DxcSetR.h"
#include "DevInfo.h"
#include "Message.h"
#include "OkCancel.h"
#include "AddLine.h"
#include "LineInfo.h"
#include "SuSmInfo.h"
#include "FarUpDate.h"
#include "GpaParams.h"
#include "SetWorkNet.h"
#include "TwoMalarmBack.h"
#include "CopySuParams.h"
#include "SmAddrInfo.h"
#include "E1TimeWorkInfo.h"
#include "QtMainIpParams.h"
#include "ConnectionServer.h"
#include "SmAddrParams.h"
#include "GetVideoSwInfo.h"
#include "ReceiveData.h"
#include "GetNetControl.h"
#include "QtServerIpInfo.h"
#include "SetVideoSwParams.h"
#include "SetNetControlParams.h"
#include "ControlBackInfo.h"
#include "ExtendDvrInfo.h"
#include "ExtendDvr.h"
#include "ExtendDvrBack.h"
#include "ExtendAudioBack.h"
#include "ExtendVideoBack.h"

#include "rrstruct.h"
#include "GetIp.h"
#include "rmipdef.h"
#include "FormatDisk1.h"
#include "ListTransferState.h"
#include "GetInforControlForm1.h"
#include "SetIp.h"
#include "SetPioHelper.h"
#include "GetAVSetTing.h"
#include "GetMPEG.h"
#include "SetMPEG.h"
#include "GetMPEGR.h"
#include "ListTransferState1.h"
#include "GetAVSetTingReturn.h"
#include "GetAudioSwitchStatus.h"
#include "GetVedioSwitchStatus.h"
#include "DisposeAudioHuaLuStatus.h"
#include "FuYongQiAlarmStatus.h"
#include "HuaLuZhanYongStatus.h"
#include "PuTongQieHuan.h"
#include "DVRSwitch.h"
#include "StopVoice.h"
#include "StartVoice.h"
#include "GetPioReturn.h"
#include "SetE1WorkMode.h"
#include "VedioSwitch.h"
#include "FormDS2154.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "FormBaseMain"
#pragma link "CSPIN"
#pragma link "ZConnection"
#pragma link "ZAbstractRODataset"
#pragma link "ZDataset"
#pragma link "ZAbstractDataset"
#pragma link "ZConnection"
#pragma link "ZConnection"
#pragma link "XPMenu"
#pragma link "XPMenu"
#pragma resource "*.dfm"
#define TM_FRAMEWAITE   20000   //升级报文返回超时时间
#define TM_TIMEBEYOND   300000  //写FLASH等待超时时间
TfmMain *fmMain;
String DeviceInfo = "设备参数...";
AnsiString asSql;//全Sql查询专用
bool G2mpGetParamsFlag = false;//
bool V35GetParamsFlag = false;//
bool GPAGetParamsFlag = false;//
bool E1TimeWorkFlag = false;//
int DS2154Flag = 0;
int GacHuaLuFlag = 0;
int GacDuanKoulag = 10;
int GacQieHuanFlag = -1;
int GacQieHuanCount = 0;
String SaveLogPath = "";
int MainControlCount = 0;
int MainControlJS = 0;
BYTE Gac4pBufTemp[640];
int IniError = 0;
int SetMainParamsFuWei = 0;
int MainParamType = 0;//主控参数类型
//---------------------------------------------------------------------------
__fastcall TfmMain::TfmMain(TComponent* Owner)
    : TfmBaseMain(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TfmMain::FormCreate(TObject *Sender)
{
    Width = 952;
    Height = 670;
   
    idx = 0;
    UpDateFlag = 0;
    UpDateSu = -1;
    SetContorlTimeFlag = 0;
    IsOvertimeTimer->Enabled = false ;
    //载入初始化界面 Beging
    imgMain->Canvas->Brush->Color = clWhite;
    imgMain->Canvas->FillRect(Rect(0,0,1024,768));
    imgMain->Canvas->Draw(2,2,ImgSet[0]);
    imgMain->Canvas->Font->Name = "宋体";
    imgMain->Canvas->Font->Color = (TColor) 0xFFFFFF;
    imgMain->Canvas->Font->Size = 9;
    imgMain->Canvas->Font->Style = TFontStyles()<< fsBold;
    imgMain->Canvas->Brush->Color = (TColor)0x00B76A49;
   // imgMain->Canvas->TextOutA(48,11,"后台设备");
    //载入初始化界面 End

    LoadIni();//读取配置文件
    if(IniError == 0)
    {//读取配置文件正常
        LoadData();//装载数据
        LoadVideoParams();//从ct_sm装载站与镜头参数 装入 ct_videoswparams视频切换参数
        SelectDataFlag = true;    //查看数据标记  T--硬件返回数据  F--查看数据库数据

        SaveToLog(" 安全监控系统-网络管理程序启动...",1);//添加到运行记录
    }
}
//---------------------------------------------------------------------------
void __fastcall TfmMain::TmUpdateTimer(TObject *Sender)
{//程序启动时刷新树型图
    tvDevice->Refresh() ;
    TmUpdate->Enabled = false;
}
//---------------------------------------------------------------------------
void __fastcall TfmMain::LoadIni()
{// 读取数据库配置文件
    FILE * fp;

    if((fp = fopen("NetManager.ini","r+")) == NULL)
    {//数据库配置文件不存在
        if((fp = fopen("NetManager.ini","w+")) == NULL)
        {
            TfmMessage *message = new TfmMessage(Application);
            message->lbMessage->Caption = "创建NetManager网络管理程序配置文件错误!";
            message->ShowModal();
            Close();
        }
        else
        {//建立默认配置文件
            String sProvider,sPassword,sPsi,sUsId,sDataS,sMode,sServerip;

            AnsiString AppPath = ExtractFilePath(Application->ExeName);
            String sIniFilename = AppPath + "NetManager.ini";
            SaveLogPath = AppPath;

            WriteStreamInToIni("★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★/n");
            WriteStreamInToIni("★           ★/n");
            WriteStreamInToIni("★  NetManager网络管理程序的配置文件  ★/n");
            WriteStreamInToIni("★           ★/n");
            WriteStreamInToIni("★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★/n/n");

            WriteStreamInToIni("[Program Parameter]/n");
            WriteStreamInToIni("Password=/n");
            WriteStreamInToIni("★注释:连接数据库的密码,默认为空。/n/n");

            WriteStreamInToIni("UserID=root/n");
            WriteStreamInToIni("★注释:连接数据库的用户名,默认为root。/n/n");

            WriteStreamInToIni("DataSourceName=cwddata/n");
            WriteStreamInToIni("★注释:数据库的名称,默认为cwddata。/n/n");

            WriteStreamInToIni("DataSourceIp=127.0.0.1/n");
            WriteStreamInToIni("★注释:数据库所在计算机的Ip地址。/n/n");

            WriteStreamInToIni("Serverip=127.0.0.1/n");
            WriteStreamInToIni("★注释:服务器程序所在计算机的Ip地址或前台主控Ip地址,由ServerType限定。/n/n");

            WriteStreamInToIni("Port=4100/n");
            WriteStreamInToIni("★注释:连接服务器程序的端口,默认为4100或连接前台主控的端口,默认为3000。由ServerType限定。/n/n");

            WriteStreamInToIni("UpDatePort=2000/n");
            WriteStreamInToIni("★注释:前台设备远程升级端口,默认为2000。/n/n");

            WriteStreamInToIni("UpDateInterval=100/n");
            WriteStreamInToIni("★注释:前台设备远程升级下发每包数据时间间隔。/n/n");

            WriteStreamInToIni("UpDateSize=1024/n");
            WriteStreamInToIni("★注释:前台设备远程升级下发每包数据大小,单位为字节。/n/n");

            WriteStreamInToIni("ServerType=0/n");
            WriteStreamInToIni("★注释:服务器类型,0-后台服务器,1-前台主控。");

           
            /*TIniFile *ini;
            ini = new TIniFile(sIniFilename);
            ini->WriteString("Program Parameter","Password","");
            ini->WriteString("Program Parameter","UserID","root");
            ini->WriteString("Program Parameter","DataSourceName","cwddata");
            ini->WriteString("Program Parameter","DataSourceIp","133.124.42.53");
            ini->WriteString("Program Parameter","Serverip","127.0.0.1");
            ini->WriteString("Program Parameter","Port","4100");
            ini->WriteString("Program Parameter","UpDatePort","2000");
            ini->WriteString("Program Parameter","UpDateInterval","100");
            ini->WriteString("Program Parameter","UpDateSize","1024");*/

            IniError = 1;
            TfmMessage *message = new TfmMessage(Application);
            message->lbMessage->Caption = "配置文件不存在!";
            message->lbMessage2->Caption = "生成默认配置文件NetManager.ini,程序将被关闭,请检查配置文件!";

            message->Width = message->lbMessage2->Width + 80;
            message->spbAdd->Left = message->Width / 2 - message->spbAdd->Width / 2;
            message->spbAdd->Top += 5;
            message->ShowModal();
            Application->Terminate();

        }
        fclose(fp);
    }
    else
    {//读取配置文件
        String Password = "",UsId = "",DataSourceName = "",DataSourceIp = "",serverip = "",Port = "";        AnsiString AppPath = ExtractFilePath(Application->ExeName);
        String sIniFilename = AppPath + "NetManager.ini";
        SaveLogPath = AppPath;

        TIniFile *ini;
        ini = new TIniFile(sIniFilename);
        Password = ini->ReadString("Program Parameter","Password","");
        UsId = ini->ReadString("Program Parameter","UserID","");
        DataSourceName = ini->ReadString("Program Parameter","DataSourceName","");
        DataSourceIp = ini->ReadString("Program Parameter","DataSourceIp","");
        serverip = ini->ReadString("Program Parameter","Serverip","");
        Port = ini->ReadString("Program Parameter","Port","");
        ServerType = ini->ReadInteger("Program Parameter","ServerType",0);
        delete ini;

        ZConnection1->Password = Password;
        ZConnection1->User = UsId;
        ZConnection1->Database = DataSourceName;
        ZConnection1->HostName = DataSourceIp;

        try
        {
            ZConnection1->Connected = true ;
        }
        catch(...)
        {
            ZConnection1->Connected = false;
            AnsiString str = "数据库链接失败,请确认数据库正常后重新启动程序!" ;
            MessageShow(str);
            Application->Terminate();
            return ;
        }
        TimerConnectArm->Enabled = true;
        //连接服务器
        if(ClientSocket->Active)
        {
            ClientSocket->Active = false;
        }
        ClientSocket->Host = serverip;
        ClientSocket->Port = Port.ToInt() ;
        ClientSocket->Active = true;

        fclose(fp);
    }
/******************读取配置文件结束************************************/
}
//---------------------------------------------------------------------------
void __fastcall TfmMain::ClientSocketError(TObject *Sender,
      TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
    String str;
    str =  "错误,和服务器 " + ClientSocket->Host + " 连接失败!";
    StatusBar1->Panels->Items[0]->Text = "连接状态:" + str;
    MessageShow(str);
    ErrorCode = 0;
    SaveToLog(" " + str,1);//添加到运行记录
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::MessageShow(String Str)
{
    TfmMessage *message = new TfmMessage(Application);
    message->lbMessage->Caption = Str;
    if(message->lbMessage->Width > 252)
    {
        message->Width = message->lbMessage->Width + 80;
        message->spbAdd->Left = message->Width / 2 - message->spbAdd->Width / 2;
    }
    /*else
    {
        message->lbMessage->Left = message->Width/2 - message->lbMessage->Width/2;
    } */

    message->ShowModal();
}
//---------------------------------------------------------------------------
void __fastcall TfmMain::ClientSocketDisconnect(TObject *Sender,
      TCustomWinSocket *Socket)
{
    String str;
    str =  "请注意,和服务器 ("+Socket->RemoteAddress +")"+"连接断开!";
    MessageShow(str);
    SaveToLog(" " + str,1);//添加到运行记录
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::ClientSocketConnect(TObject *Sender,
      TCustomWinSocket *Socket)
{
    String str;
    str =  "和服务器 ("+Socket->RemoteAddress+")"+"连接成功!";
    StatusBar1->Panels->Items[0]->Text = "连接状态:" + str;
    //MessageShow(str);
    SaveToLog(" " + str,1);//添加到运行记录
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::LoadData()
{
/***************************装载设备节点****************************************/
    String SUNAME,GKDNAME,SetName,NETNAME,SMNAME;
    int Count = 0,SMNUM = 0,SetNum = 0;
    int SuCount = 0,CountSm = 0;
    TTreeNode *Node1,*Node2;
    AnsiString asSql,asSqlGkd;

    tvDevice->Items->Clear();
    Node2 = tvDevice->Items->Add(NULL, "网络管理程序");
    Node2->ImageIndex = 4;
    Node2->SelectedIndex = 5;


    asSql = "select * from CT_SU order by SUNUM";
    ADOIndex->Close();
    ADOIndex->SQL->Clear();
    ADOIndex->SQL->Add(asSql);
    ADOIndex->Open();
    SuCount = ADOIndex->RecordCount;
    if(SuCount > 0)
    {
   //   Count = SuCount+1;
     //  CountSm = Count+1;
       //添加站
      Node1 = tvDevice->Items->Item[0];
      for(int i=0;i<SuCount;i++)
      {
         SUNAME = ADOIndex->FieldByName("SUNAME")->AsString;
         Node2 = tvDevice->Items->AddChild(Node1, SUNAME);
         Node2->ImageIndex = 1;
         ADOIndex->Next() ;
      }
    ADOIndex->First();
    //SUCount ==站数--添加镜头
    for(int i=0;i<SuCount;i++)
    {
      int SUNUM = ADOIndex->FieldByName("SUNUM")->AsInteger;
      ADOIndex->Next();      //防止线路号不按0,1,2....正常顺序排列
      asSql = "select * from CT_SM where SUNUM = '"+IntToStr(SUNUM)+"'" + " order by 'SMNUM'";

      ADOSelect->Close();
      ADOSelect->SQL->Clear();
      ADOSelect->SQL->Add(asSql);
      ADOSelect->Open();
      int SMCount = ADOSelect->RecordCount;

      Node1 = tvDevice->Items->Item[Count+1];
      for(int i=0;i<SMCount;i++)
      {
         SUNAME = ADOSelect->FieldByName("SMNAME")->AsString;
         SMNUM = ADOSelect->FieldByName("SMNUM")->AsInteger;
         Node2 = tvDevice->Items->AddChild(Node1,(Trim(SUNAME) + "_" +IntToStr(SMNUM)));
         Node2->ImageIndex =1;
         ADOSelect->Next();
      }
        Count = Count + SMCount +1;

   
    }
   }


/***************************装载设备数据结束************************************/
/* TODO : 展开站 */
    tvDevice->FullCollapse();
    for(int i=0;i<tvDevice->Items->Count;i++)
    {
        TTreeNode *p1 = tvDevice->Items->Item[i];
        if(p1->Level == 0 || p1->Level == 1||p1->Level == 2)
        //if(p1->Level == 0||p1->Level == 1||p1->Level == 2)
        {
            p1->Expand(false);
        }
    }
    tvDevice->Selected = tvDevice->Items->Item[idx];
}
//---------------------------------------------------------------------------
void __fastcall TfmMain::ConnectServerClick(TObject *Sender)
{//连接服务器
    fmConnectiongServer->ShowModal();
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::SpAboutClick(TObject *Sender)
{
    fmAbout->ShowModal();
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::SpExitClick(TObject *Sender)
{
    Close();   
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::FormCloseQuery(TObject *Sender, bool &CanClose)
{
    TfmOkCancel *okcancel = new TfmOkCancel(Application);
    okcancel->LabelTitle->Caption = "提示信息...";
    okcancel->lbMessage->Caption = "确定要退出网管程序吗?";
    okcancel->ShowModal();
    if(okcancel->bOk)
    {
        CanClose = true;
/*        if(G2mpGetParamsFlag)
        {
            DeleteTable("DROP TABLE G2MPTEMP");//删除获取G2mp参数时产生的临时表
            G2mpGetParamsFlag = false;
        }
        if(V35GetParamsFlag)
        {
            DeleteTable("DROP TABLE V35TEMP");//删除获取V35参数时产生的临时表
            V35GetParamsFlag = false;
        }
        if(GPAGetParamsFlag)
        {
            DeleteTable("DROP TABLE GPATEMP");//删除获取GPA参数时产生的临时表
            GPAGetParamsFlag = false;
        }                                            */

        /*if(fmReceiveData->Memo2->Lines->Count > 0)
        {
            SaveToLog(fmReceiveData->Memo2->Text,0);
        }*/
        SaveToLog(" GS9.0安全监控系统-网络管理程序退出...",1);//添加到运行记录
    }
    else
    {
        CanClose = false;
    }
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::tvDeviceChange(TObject *Sender, TTreeNode *Node)
{
/*    if(G2mpGetParamsFlag)
    {
        DeleteTable("DROP TABLE G2MPTEMP");//删除获取G2mp参数时产生的临时表
        G2mpGetParamsFlag = false;
    }
    if(V35GetParamsFlag)
    {
        DeleteTable("DROP TABLE V35TEMP");//删除获取V35参数时产生的临时表
        V35GetParamsFlag = false;
    }
    if(GPAGetParamsFlag)
    {
        DeleteTable("DROP TABLE GPATEMP");//删除获取GPA参数时产生的临时表
        GPAGetParamsFlag = false;
    }
    //GPA设备
    spbCancel->Enabled = false;
    SpeedButton4->Enabled = false;
    SpeedButton5->Enabled = false;
    G2mpSave->Enabled = false;
    G2mpUpdate->Enabled = false;
    G2mpDel->Enabled = false;
    GroupBox37->Enabled = false;
    //pnlGAC
    GroupBox37->Enabled = false;
    GroupBox36->Enabled = false;
    //G2mp
    GroupBox32->Enabled = false;
    GroupBox33->Enabled = false;
    GroupBox13->Enabled = false;
    GroupBox24->Enabled = false;
    SpeedButton6->Enabled = false;
    SpeedButton9->Enabled = false;
    GroupBox38->Enabled = false;
//    SpeedButton12->Enabled = false;
//    SpeedButton11->Enabled = false;
    SpeedButton13->Enabled = false;
    SpeedButton14->Enabled = false;
    SpeedButton15->Enabled = false;
    //GEDN
    NetSave->Enabled = false;
    NetUpdate->Enabled = false;
    GroupBox38->Enabled = false;             */

    NodeText = tvDevice->Selected->Text;//当前被选中的节点名称
    if(tvDevice->Selected->Level > 1)
    {
        NodeParText = tvDevice->Selected->Parent->Text; //当前被选中的上一级节点名称
    }
/*   if(tvDevice->Selected->Level > 2)
    {
        NodeParParText = tvDevice->Selected->Parent->Parent->Text; //当前被选中的上一级的上一级的节点名称
    }      */

    DrawFace(0);                //恢复默认
    pnlGPA->Visible = false;
    pnlV35->Visible = false;
    pnlG2MP->Visible = false;
    pnlGAC4->Visible = false;
    pnlNet->Visible = false;
    pnlGAS->Visible = false;
    pnlGMUX->Visible = false;
    pnlAVDSERVER->Visible = false;

/*    asSql = "select * from CT_GASINFO where GASNAME='" + NodeText + "'";
    ADOIndex->Close();
    ADOIndex->SQL->Clear();
    ADOIndex->SQL->Add(asSql);
    ADOIndex->Open();
    int GASCount = ADOIndex->RecordCount;
    if(GASCount > 0)
    {
        tvDevice->PopupMenu = PopupMenuGAS;
        pnlGAS->Visible = true;
        Label7->Caption = NodeText + "设备参数...";
        asSql = "select * from CT_GACS where GASNAME='" + NodeText + "' order by GASPORT";
        ADOIndex->Close();
        ADOIndex->SQL->Clear();
        ADOIndex->SQL->Add(asSql);
        ADOIndex->Open();
        int GASPORT = 0,GACOUTPORT = 0;
        String GASNAME,GASADDR;
        GASPORT = ADOIndex->FieldByName("GASPORT")->AsInteger;
        GACOUTPORT = ADOIndex->FieldByName("GACOUTPORT")->AsInteger;
        GASNAME = ADOIndex->FieldByName("GASNAME")->AsString;
        GASADDR = ADOIndex->FieldByName("GASADDR")->AsString;
        GasName->Caption = GASNAME;
        GasAddr->Caption = GASADDR;
        GasPort->Caption = GASPORT;
        GacOutPort->Text = GACOUTPORT;
        SpeedButton11->Enabled = false;
        SpeedButton17->Enabled = false;
        SpeedButton12->Enabled = true;
        SpeedButton16->Enabled = true;
        SpeedButton1->Enabled = false;
        SpeedButton2->Enabled = true;
        GacOutPort->Enabled = false;
        return;
    }        */

/*    asSql = "select * from ct_avdserver where NAME='" + NodeText + "'";
    ADOIndex->Close();
    ADOIndex->SQL->Clear();
    ADOIndex->SQL->Add(asSql);
    ADOIndex->Open();
    int AvdServerCount = ADOIndex->RecordCount;
    if(AvdServerCount > 0)
    {
        tvDevice->PopupMenu = PopupMenuAvdServer;
        pnlAVDSERVER->Visible = true;
        Label7->Caption = NodeText + " AvdServer设备参数...";
        asSql = "select * from ct_avdserver where name='" + NodeText + "' order by ID";
        ADOIndex->Close();
        ADOIndex->SQL->Clear();
        ADOIndex->SQL->Add(asSql);
        ADOIndex->Open();                  */
        /*int GASPORT = 0,GACOUTPORT = 0;
        String GASNAME,GASADDR;
        /*GASPORT = ADOIndex->FieldByName("GASPORT")->AsInteger;
        GACOUTPORT = ADOIndex->FieldByName("GACOUTPORT")->AsInteger;
        GASNAME = ADOIndex->FieldByName("GASNAME")->AsString;
        GASADDR = ADOIndex->FieldByName("GASADDR")->AsString;*/

/*        AvdServerIp->Text = ADOIndex->FieldByName("IpAddr")->AsString;
        AvdServerPort->Text = ADOIndex->FieldByName("ConnPort")->AsInteger;
        AvdServerName->Text = ADOIndex->FieldByName("Name")->AsString;
        AvdServerDaikuan->Text = ADOIndex->FieldByName("MaxBandWidth")->AsInteger;    */


        /*GasName->Caption = GASNAME;
        GasAddr->Caption = GASADDR;
        GasPort->Caption = GASPORT;
        GacOutPort->Text = GACOUTPORT;
        SpeedButton11->Enabled = false;
        SpeedButton17->Enabled = false;
        SpeedButton12->Enabled = true;
        SpeedButton16->Enabled = true;
        SpeedButton1->Enabled = false;
        SpeedButton2->Enabled = true;
        GacOutPort->Enabled = false;*/
/*        return;
    }                                               */

/*    asSql = "select * from CT_DEV where SMNAME='" + NodeText + "'";
    ADOIndex->Close();
    ADOIndex->SQL->Clear();
    ADOIndex->SQL->Add(asSql);
    ADOIndex->Open();
    int Count = ADOIndex->RecordCount;               */


/*    if(Count > 0)
    {//为后台设备
        int SMTYPE = ADOIndex->FieldByName("SMTYPE")->AsInteger;
        switch(SMTYPE)
        {
            case 197:
            {//GPA
                tvDevice->PopupMenu = PopupMenuGPA;
                pnlGPA->Visible = true;
                Label3->Caption = NodeText + DeviceInfo;
                Panel5->Left = pnlGPA->Width/2 - Panel5->Width/2;
                Panel5->Top = pnlGPA->Height/2 - Panel5->Height/2;
                break;
            }
            case 198:
            {// g2mp
                tvDevice->PopupMenu = PopupMenuG2MP;
                pnlG2MP->Visible = true;
                Label1->Caption = NodeText + DeviceInfo;
                Panel8->Left = pnlG2MP->Width/2 - Panel8->Width/2;
                Panel8->Top = pnlG2MP->Height/2 - Panel8->Height/2;
                RadioGroup17->ItemIndex = -1;
                break;
            }
            case 200:
            {//DXC
                tvDevice->PopupMenu = PopupMenuDXC;
                DrawFace(1);
                break;
            }
            case 201:
            {//V35
                tvDevice->PopupMenu = PopupMenuHLQ;
                pnlV35->Visible = true;
                Label2->Caption = NodeText + DeviceInfo;
                Panel7->Left = pnlV35->Width/2 - Panel7->Width/2;
                Panel7->Top = pnlV35->Height/2 - Panel7->Height/2;
                RadioGroup10->ItemIndex = -1;
                GroupBox28->Enabled = false;
                break;
            }
            case 212:
            {//GAC4
                tvDevice->PopupMenu = PopupMenuGAC;
                pnlGAC4->Visible = true;
                Label8->Caption = NodeText + DeviceInfo;
                Panel3->Left = pnlGAC4->Width/2 - Panel3->Width/2;
                Panel3->Top = pnlGAC4->Height/2 - Panel3->Height/2;
                break;
            }
            case 202:
            {//GMUX-15
                tvDevice->PopupMenu = PopupMenuGMUX;
                pnlGMUX->Visible = true;
                Label16->Caption = NodeText + DeviceInfo;
                Panel11->Left = pnlGMUX->Width/2 - Panel11->Width/2;
                Panel11->Top = pnlGMUX->Height/2 - Panel11->Height/2;
                RadioGroup18->ItemIndex = -1;
                GroupBox7->Enabled = false;
                break;
            }
            default :
            {
                DrawFace(0);                //恢复默认
                pnlGPA->Visible = false;
                pnlV35->Visible = false;
                pnlG2MP->Visible = false;
                pnlGAC4->Visible = false;
                pnlNet->Visible = false;
            }
        }
    }                       */
/*    else
    {//非后台设备
        String NETNAME = Node->Text;
        asSql = "select * from CT_NET where GEDN_NAME='" + NETNAME + "'"; //网络编解码器
        ADOIndex->Close();
        ADOIndex->SQL->Clear();
        ADOIndex->SQL->Add(asSql);
        ADOIndex->Open();
        int NetCount = ADOIndex->RecordCount;
        if(NetCount > 0)
        {
            String GEDN_NAME,GEDN_IP;
            int GEDN_PORT;
            GEDN_IP = ADOIndex->FieldByName("GEDN_IP")->AsString;
            GEDN_PORT = ADOIndex->FieldByName("GEDN_PORT")->AsInteger;
            GEDN_NAME = ADOIndex->FieldByName("GEDN_NAME")->AsString;
            NodeParText = Node->Parent->Text;
            NodeText = Node->Text;
            Label4->Caption = "网络编解码设备(GEDN)名称:" + NodeText + " " + DeviceInfo;
            tvDevice->PopupMenu = PopupMenuNet;
            NetSave->Enabled = false;
            NetUpdate->Enabled = true;
            pnlNet->Visible = true;
            NetIp->Text = GEDN_IP;
            NetPort->Text = GEDN_PORT;
            NetName->Text = GEDN_NAME;

            bGroupNum->Caption = ADOIndex->FieldByName("groupnum")->AsString;

            Panel6->Left = pnlNet->Width/2 - Panel6->Width/2;
            Panel6->Top = pnlNet->Height/2 - Panel6->Height/2;
            return;
        }                           */

        if(tvDevice->Selected->Level == 2)       //代码变动
        {//模块
            tvDevice->PopupMenu = PopupMenuSmInfo;

            int LINENUM = 0,SUNUM = 0;
            char* szBuffer = new char[30];
            String NodeTextTemp;
            NodeTextTemp = NodeText;
 //           LINENUM = GetLineNum(NodeParParText);
            SUNUM = GetSuNum(NodeParText);

            /*int LenTemp = StrLen(NodeTextTemp.c_str());
            StrCopy(szBuffer,NodeTextTemp.c_str());
            NodeTextTemp = szBuffer[LenTemp - 1];//获得镜头号
            */

            int LenTemp = StrLen(NodeTextTemp.c_str());
            StrCopy(szBuffer,NodeTextTemp.c_str());
            int Temp_ = 0;
            for(int i = 0;i<LenTemp;i++)
            {
                if(szBuffer[i] == 0X5F)
                {//"_"
                    Temp_ = i+1;
                    break;
                }
            }

            if((LenTemp - Temp_) == 1)
            {
                NodeTextTemp = szBuffer[LenTemp - 1];//获得镜头号
            }
            else if((LenTemp - Temp_) == 2)
            {
                NodeTextTemp = szBuffer[LenTemp - 2];
                NodeTextTemp = NodeTextTemp + szBuffer[LenTemp - 1];
            }


            asSql = "select * from CT_SM where SUNUM=" + IntToStr(SUNUM) + " AND " + "SMNUM=" + NodeTextTemp;
            ADOSelect->Close();
            ADOSelect->SQL->Clear();
            ADOSelect->SQL->Add(asSql);
            ADOSelect->Open();
            int SMTYPE = ADOSelect->FieldByName("SMTYPE")->AsInteger;
            switch(SMTYPE)
            {
                case 1:
                {//云台
                    N33->Caption = "复位云台控制器";
                    N33->Enabled = true;
                    break;
                }
                case 2:
                {//快球
                    N33->Caption = "复位快球控制器";
                    N33->Enabled = true;
                    break;
                }
                default:
                {
                    N33->Caption = "控制器不可用";
                    N33->Enabled = false;
                    break;
                }
            }
        }
        else if(tvDevice->Selected->Level == 0)
        //else if(Node->Text == "网络管理系统")
        {
            tvDevice->PopupMenu = PopupMenuAddSu;
        }
//        else if(Node->Text == "后台设备")
//        {
//            tvDevice->PopupMenu = PopupMenuAddDev;
//        }
//        else if((Node->Text != "后台设备") && (tvDevice->Selected->Level == 1))
//        {//线路
//            tvDevice->PopupMenu = PopupMenuAddSu;
//        }
        else if(tvDevice->Selected->Level == 1)
        {//站
            int LINENUM = 0,SUNUM = 0,AVTYPE = 0;
            SUNUM = GetSuNum(NodeText);
            N38->Enabled = false;//左侧
            N39->Enabled = false;//右侧
            N42->Enabled = false;
            FormatDiskMenu->Enabled = false;
            asSql = "select * from ct_videoserverparams where LINENUM=" + IntToStr(LINENUM)/
             + " AND " + "SUNUM=" + IntToStr(SUNUM) + " order by VIDEONUM";
            ADOSelect->Close();
            ADOSelect->SQL->Clear();
            ADOSelect->SQL->Add(asSql);
            ADOSelect->Open();
            //AVTYPE = (ADOSelect->FieldByName("AVTYPE")->AsInteger & 0XF0)>>4;//0 -右侧 1 - 左侧
            int num = ADOSelect->RecordCount;
            if(num == 1)
            {
                N39->Enabled = true;//监控DVR
                if(ADOSelect->FieldByName("DVRLX")->AsInteger == 0)
                {//DVR不带录像
                  N42->Enabled = false;
                }
                else if(ADOSelect->FieldByName("DVRLX")->AsInteger == 1)
                {//DVR带录像
                    N42->Enabled = true;
                }

                /*if(AVTYPE == 0)
                {
                    N39->Enabled = true;
                }
                else if(AVTYPE == 1)
                {
                    N38->Enabled = true;
                }*/
            }
            else if(num > 1)
            {
                N39->Enabled = true;//监控DVR
                N38->Enabled = true;//录像DVR
                N42->Enabled = true;
             FormatDiskMenu->Enabled = true;
                /*if(AVTYPE == 0)
                {
                    N39->Enabled = true;
                }
                else if(AVTYPE == 1)
                {
                    N38->Enabled = true;
                }
                ADOSelect->Next();
                AVTYPE = (ADOSelect->FieldByName("AVTYPE")->AsInteger & 0XF0)>>4;//0 -右侧 1 - 左侧
                if(AVTYPE == 0)
                {
                    N39->Enabled = true;
                }
                else if(AVTYPE == 1)
                {
                    N38->Enabled = true;
                }*/
            }
            tvDevice->PopupMenu = PopupMenuAddSm;
        }
    }

//---------------------------------------------------------------------------

/***************************************************************/

**功能描述:加载设备界面

/***************************************************************/

void __fastcall TfmMain::DrawFace(int iType)
{
    int SUNUM = 0;
    switch(iType)
    {
        case 0:
        {
            imgMain->Canvas->Brush->Color = clWhite;
            imgMain->Canvas->FillRect(Rect(0,0,1024,768));
            imgMain->Canvas->Draw(2,2,ImgSet[0]);
            imgMain->Canvas->Font->Name = "宋体";
            imgMain->Canvas->Font->Color = (TColor) 0xFFFFFF;
            imgMain->Canvas->Font->Size = 9;
            imgMain->Canvas->Font->Style = TFontStyles()<< fsBold;
            imgMain->Canvas->Brush->Color = (TColor)0x00B76A49;
            switch(tvDevice->Selected->Level)
            {
             /*   case 1:
                {//线路一级
                    if(tvDevice->Selected->Text == "后台设备")
                    {
                        imgMain->Canvas->TextOutA(48,11,NodeText);
                    }
                    else
                    {
                        LINENUM = GetLineNum(NodeText);
                        imgMain->Canvas->TextOutA(48,11,NodeText + "(线路号:" +IntToStr(LINENUM) + ")");
                    }
                    break;
                }       */
                case 1:
                {//站一级
//                    LINENUM = GetLineNum(NodeParText);
                    SUNUM = GetSuNum(NodeText);
                    imgMain->Canvas->TextOutA(48,11,NodeText + "(站号:" +IntToStr(SUNUM) + ")");
                    break;
                }
                case 2:
                {//镜头一级
                    String SmName,Str,SmNum;
                    int Length = 0;
                    char* szBuffer = new char[30];
                   
                    SmName = tvDevice->Selected->Text;
                    Length = strlen(SmName.c_str() );
                    Str = SmName.SubString(1,Length-2);

                    int LenTemp = StrLen(SmName.c_str());
                    StrCopy(szBuffer,SmName.c_str());
                    int Temp_ = 0;
                    for(int i = 0;i<LenTemp;i++)
                    {
                        if(szBuffer[i] == 0X5F)
                        {//"_"
                            Temp_ = i+1;
                            break;
                        }
                    }

                    if((LenTemp - Temp_) == 1)
                    {
                        SmNum = SmName.SubString(Length,1);
                    }
                    else if((LenTemp - Temp_) == 2)
                    {
                        SmNum = SmName.SubString((Length - 1),2);
                    }

                    //SmNum = SmName.SubString(Length,1);
//                    LINENUM = GetLineNum(NodeParParText);
                    SUNUM = GetSuNum(NodeParText);
                    imgMain->Canvas->TextOutA(48,11, NodeParText + "(站号:" +IntToStr(SUNUM) + ")" + "__" + Str/
                     + "镜头" + "(镜头号:" + SmNum + ")");
                    break;
                }
            }
            break;
        }
        case 1:
        {//交叉连接
            imgMain->Canvas->Draw(0,0,ImgSet[1]);
            imgMain->Canvas->Font->Color = (TColor) 0xFFFFFF;
            break;
        }
        case 2:
        {//
            imgMain->Canvas->Draw(0,0,ImgSet[2]);
            imgMain->Canvas->Font->Color = (TColor) 0xFFFFFF;
            break;
        }
        case 3:
        {
            Image6->Canvas->Brush->Color = clWhite;
            Image6->Canvas->FillRect(Rect(0,0,1024,768));
            Image6->Canvas->Draw(2,2,ImgSet[0]);
            Image6->Canvas->Font->Name = "宋体";
            Image6->Canvas->Font->Color = (TColor) 0xFFFFFF;
            Image6->Canvas->Font->Size = 9;
            Image6->Canvas->Font->Style = TFontStyles()<< fsBold;
            Image6->Canvas->Brush->Color = (TColor)0x00B76A49;
            imgMain->Canvas->TextOutA(48,11,NodeText + "设备");
            break;
        }
    }
}
//---------------------------------------------------------------------------


void __fastcall TfmMain::DelLineClick(TObject *Sender)
{//删除线路
    int LINENUM = 0;
    String LINENAME = NodeText;
    //AnsiString asSql;

//    NodeText = tvDevice->Selected->Text;

    TfmOkCancel *okcancel = new TfmOkCancel(Application);
    okcancel->LabelTitle->Caption = "提示信息...";
    okcancel->lbMessage->Caption = "删除该条线路,该条线路下的站和镜头均将被删除,确定吗?";
    if(okcancel->lbMessage->Width > 216)
    {
        okcancel->Width = okcancel->lbMessage->Width + 70;
        okcancel->spbAdd->Left = (okcancel->Width/2 - 75)/2 + 22;
        okcancel->spbCancel->Left = okcancel->spbAdd->Left + 111;
    }
    okcancel->ShowModal();
    if(okcancel->bOk)
    {
        asSql = "select * from CT_LINE where LINENAME='"+NodeText+"'";
        ADOSelect->Close();
        ADOSelect->SQL->Clear();
        ADOSelect->SQL->Add(asSql);
        ADOSelect->Open();
        LINENUM = ADOSelect->FieldByName("LINENUM")->AsInteger;

        asSql = "delete from CT_LINE where LINENAME='"+NodeText+"'";
        ADOSelect->Close();
        ADOSelect->SQL->Clear();
        ADOSelect->SQL->Add(asSql);
        ADOSelect->ExecSQL() ;


        //因为镜头表里没有线路号,所以先删除镜头表(ct_sm),然后再删除(ct_su)表中内容
        asSql = "select * from CT_SU where LINENUM='"+IntToStr(LINENUM)+"'" + " order by SUNUM";
        fmMain->ADOSelect->Close();
        fmMain->ADOSelect->SQL->Clear();
        fmMain->ADOSelect->SQL->Add(asSql);
        fmMain->ADOSelect->Open();
        int num = fmMain->ADOSelect->RecordCount;
        for (int i=0;i < num;i++)
        {
            int SUNUM = ADOSelect->FieldByName("SUNUM")->AsInteger;
            fmMain->ADOSelect->Next();

            asSql = "delete from CT_SM where SUNUM="+IntToStr(SUNUM);
            ADOUI->Close();
            ADOUI->SQL->Clear();
            ADOUI->SQL->Add(asSql);
            ADOUI->ExecSQL();

            asSql = "delete from ct_videoswparams where SUNUM=" + IntToStr(SUNUM);
            ADOUI->Close();
            ADOUI->SQL->Clear();
            ADOUI->SQL->Add(asSql);
            ADOUI->ExecSQL();
        }

        asSql = "delete from CT_SU where LINENUM="+IntToStr(LINENUM);
        ADOSelect->Close();
        ADOSelect->SQL->Clear();
        ADOSelect->SQL->Add(asSql);
        ADOSelect->ExecSQL() ;

        idx = idx - 1;
        LoadData();
        fmMain->SaveToLog(" 删除线路:线路名("+LINENAME+")线路号("+IntToStr(LINENUM)+")",1);//添加到运行记录
    }
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::LookLineInfoClick(TObject *Sender)
{//查看线路信息
    int LINENUM = 0,LINEPORT = 0,DXCADDR = 0,DXC_LINE = 0/
    ,DXC_CONTROL = 0,G2MPADDR = 0,DXC_G2MP = 0,GPAADDR = 0,DXC_GPA = 0,/
    OAADDR = 0,DXC_OA = 0,RECADDR = 0,DXC_REC = 0,ARMPORT = 0,DBEGIN = 0,/
    DCOUNT = 0,DDBEGIN = 0,VBEGIN = 0,VCOUNT = 0,VDBEGIN = 0,ABEGIN = 0,/
    ACOUNT = 0,ADBEGIN = 0,OABEGIN = 0,OACOUNT = 0,OADBEGIN = 0,/
    RECBEGIN = 0,RECCOUNT = 0,RECDBEGIN = 0;
    String LINENAME,LINEADDR,ARMADDR;

    asSql = "select * from CT_LINE where LINENAME='"+NodeText + "'";
    ADOSelect->Close();
    ADOSelect->SQL->Clear();
    ADOSelect->SQL->Add(asSql);
    ADOSelect->Open();
    LINENUM = ADOSelect->FieldByName("LINENUM")->AsInteger;
    LINENAME = ADOSelect->FieldByName("LINENAME")->AsString;
    LINEADDR = ADOSelect->FieldByName("LINEADDR")->AsString;
    LINEPORT = ADOSelect->FieldByName("LINEPORT")->AsInteger;
    DXCADDR = ADOSelect->FieldByName("DXCADDR")->AsInteger;
    DXC_LINE = ADOSelect->FieldByName("DXC_LINE")->AsInteger;
    DXC_CONTROL = ADOSelect->FieldByName("DXC_CONTROL")->AsInteger;
    G2MPADDR = ADOSelect->FieldByName("G2MPADDR")->AsInteger;
    DXC_G2MP = ADOSelect->FieldByName("DXC_G2MP")->AsInteger;
    GPAADDR = ADOSelect->FieldByName("GPAADDR")->AsInteger;
    DXC_GPA = ADOSelect->FieldByName("DXC_GPA")->AsInteger;
    OAADDR = ADOSelect->FieldByName("OAADDR")->AsInteger;
    DXC_OA = ADOSelect->FieldByName("DXC_OA")->AsInteger;
    RECADDR = ADOSelect->FieldByName("RECADDR")->AsInteger;
    DXC_REC = ADOSelect->FieldByName("DXC_REC")->AsInteger;
    ARMADDR = ADOSelect->FieldByName("ARMADDR")->AsString;
    ARMPORT = ADOSelect->FieldByName("ARMPORT")->AsInteger;
    DBEGIN = ADOSelect->FieldByName("DBEGIN")->AsInteger;
    DCOUNT = ADOSelect->FieldByName("DCOUNT")->AsInteger;
    DDBEGIN = ADOSelect->FieldByName("DDBEGIN")->AsInteger;
    VBEGIN = ADOSelect->FieldByName("VBEGIN")->AsInteger;
    VCOUNT = ADOSelect->FieldByName("VCOUNT")->AsInteger;
    VDBEGIN = ADOSelect->FieldByName("VDBEGIN")->AsInteger;
    ABEGIN = ADOSelect->FieldByName("ABEGIN")->AsInteger;
    ACOUNT = ADOSelect->FieldByName("ACOUNT")->AsInteger;
    ADBEGIN = ADOSelect->FieldByName("ADBEGIN")->AsInteger;
    OABEGIN = ADOSelect->FieldByName("OABEGIN")->AsInteger;
    OACOUNT = ADOSelect->FieldByName("OACOUNT")->AsInteger;
    OADBEGIN = ADOSelect->FieldByName("OADBEGIN")->AsInteger;
    RECBEGIN = ADOSelect->FieldByName("RECBEGIN")->AsInteger;
    RECCOUNT = ADOSelect->FieldByName("RECCOUNT")->AsInteger;
    RECDBEGIN = ADOSelect->FieldByName("RECDBEGIN")->AsInteger;
   
    fmLineInfo->LineNum->Caption = IntToStr(LINENUM);
    fmLineInfo->LineName->Text = LINENAME;
    fmLineInfo->LineAddr->Text =LINEADDR ;
    fmLineInfo->LinePort->Text = IntToStr(LINEPORT);
    fmLineInfo->DxcAddr->Text = IntToStr(DXCADDR);
    fmLineInfo->Dxc_Line->Text = IntToStr(DXC_LINE);
    fmLineInfo->Dxc_Control->Text = IntToStr(DXC_CONTROL);
    fmLineInfo->G2mpAddr->Text = IntToStr(G2MPADDR);
    fmLineInfo->Dxc_G2mp->Text = IntToStr(DXC_G2MP);
    fmLineInfo->GpaAddr->Text = IntToStr(GPAADDR);
    fmLineInfo->Dxc_Gpa->Text = IntToStr(DXC_GPA);
    fmLineInfo->OaAddr->Text = IntToStr(OAADDR);
    fmLineInfo->Dxc_Oa->Text = IntToStr(DXC_OA);
    fmLineInfo->RecAddr->Text = IntToStr(RECADDR);
    fmLineInfo->Dxc_Rec->Text = IntToStr(DXC_REC);
    fmLineInfo->ArmAddr->Text = ARMADDR;
    fmLineInfo->ArmPort->Text = IntToStr(ARMPORT);
    fmLineInfo->DBegin->Text = IntToStr(DBEGIN);
    fmLineInfo->DCount->Text = IntToStr(DCOUNT);
    fmLineInfo->DDBegin->Text = IntToStr(DDBEGIN);
    fmLineInfo->VBegin->Text = IntToStr(VBEGIN);
    fmLineInfo->VCount->Text = IntToStr(VCOUNT);
    fmLineInfo->VDBegiin->Text = IntToStr(VDBEGIN);
    fmLineInfo->ABegin->Text = IntToStr(ABEGIN);
    fmLineInfo->ACount->Text = IntToStr(ACOUNT);
    fmLineInfo->ADBegin->Text = IntToStr(ADBEGIN);
    fmLineInfo->OABegin->Text = IntToStr(OABEGIN);
    fmLineInfo->OACount->Text = IntToStr(OACOUNT);
    fmLineInfo->OADBegin->Text = IntToStr(OADBEGIN);
    fmLineInfo->RecBegin->Text = IntToStr(RECBEGIN);
    fmLineInfo->RecCount->Text = IntToStr(RECCOUNT);
    fmLineInfo->RecDBegin->Text = IntToStr(RECDBEGIN);

    //fmLineInfo->LineNum->ReadOnly = true;
    fmLineInfo->LineName->ReadOnly = true;
    fmLineInfo->LineAddr->ReadOnly = true;
    fmLineInfo->LinePort->ReadOnly = true;
    fmLineInfo->DxcAddr->ReadOnly = true;
    fmLineInfo->Dxc_Line->ReadOnly = true;
    fmLineInfo->Dxc_Control->ReadOnly = true;
    fmLineInfo->G2mpAddr->ReadOnly = true;
    fmLineInfo->Dxc_G2mp->ReadOnly = true;
    fmLineInfo->GpaAddr->ReadOnly = true;
    fmLineInfo->Dxc_Gpa->ReadOnly = true;
    fmLineInfo->OaAddr->ReadOnly = true;
    fmLineInfo->Dxc_Oa->ReadOnly = true;
    fmLineInfo->RecAddr->ReadOnly = true;
    fmLineInfo->Dxc_Rec->ReadOnly = true;
    fmLineInfo->ArmAddr->ReadOnly = true;
    fmLineInfo->ArmPort->ReadOnly = true;
    fmLineInfo->DBegin->ReadOnly = true;
    fmLineInfo->DCount->ReadOnly = true;
    fmLineInfo->DDBegin->ReadOnly = true;
    fmLineInfo->VBegin->ReadOnly = true;
    fmLineInfo->VCount->ReadOnly = true;
    fmLineInfo->VDBegiin->ReadOnly = true;
    fmLineInfo->ABegin->ReadOnly = true;
    fmLineInfo->ACount->ReadOnly = true;
    fmLineInfo->ADBegin->ReadOnly = true;
    fmLineInfo->OABegin->ReadOnly = true;
    fmLineInfo->OACount->ReadOnly = true;
    fmLineInfo->OADBegin->ReadOnly = true;
    fmLineInfo->RecBegin->ReadOnly = true;
    fmLineInfo->RecCount->ReadOnly = true;
    fmLineInfo->RecDBegin->ReadOnly = true;
    fmLineInfo->spbSave->Enabled = false;
    fmLineInfo->spbUpDate->Enabled = true;

    fmLineInfo->ShowModal();     
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::AddSuClick(TObject *Sender)
{//添加站
    fmAddSu->ShowModal();
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::LookSuInfoClick(TObject *Sender)
{//查看站信息
    String SUNAME,LINENAME,SUIP;
    AnsiString asSql;
    int SUNUM,RECORDER_SELECT,SUPORT;

/*    LINENAME = NodeParText;
    asSql = "select * from CT_LINE where LINENAME='"+LINENAME+"'";
    ADOSelect->Close();
    ADOSelect->SQL->Clear();
    ADOSelect->SQL->Add(asSql);
    ADOSelect->Open();
    LINENUM = ADOSelect->FieldByName("LINENUM")->AsInteger;         */

    SUNAME = tvDevice->Selected->Text;
    asSql = "select * from CT_SU where SUNAME='"+SUNAME+"'" ;
    ADOSelect->Close();
    ADOSelect->SQL->Clear();
    ADOSelect->SQL->Add(asSql);
    ADOSelect->Open();
//    LINENUM = ADOSelect->FieldByName("LINENUM")->AsInteger;
    SUNUM = ADOSelect->FieldByName("SUNUM")->AsInteger;
    RECORDER_SELECT = ADOSelect->FieldByName("RECORDER_SELECT")->AsInteger;
    SUIP = ADOSelect->FieldByName("SUADDRESS")->AsString;
    SUPORT = ADOSelect->FieldByName("PORT")->AsInteger;

//    fmSuInfo->LineNum->Caption = IntToStr(LINENUM);
    fmSuInfo->RadioGroup2->ItemIndex = RECORDER_SELECT;
    fmSuInfo->SuNum->Caption = IntToStr(SUNUM);
    fmSuInfo->SuName->Text = SUNAME;
    fmSuInfo->Address->Text = SUIP;
    fmSuInfo->port->Text = IntToStr(SUPORT);
    fmSuInfo->SuName->ReadOnly = true;
    fmSuInfo->spbSave->Enabled = false;
    fmSuInfo->spbUpDate->Enabled = true;
    fmSuInfo->RadioGroup2->Enabled = false;
    fmSuInfo->port->ReadOnly = true;
    fmSuInfo->Address->ReadOnly = true;
    fmSuInfo->ShowModal();
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::DelSuClick(TObject *Sender)
{//删除站
    int SUNUM;
    AnsiString asSql;
    String SUNAME;

//    LINENAME = NodeParText;
    SUNAME = NodeText;
/*    asSql = "select * from CT_LINE where LINENAME='"+LINENAME+"'";
    ADOSelect->Close();
    ADOSelect->SQL->Clear();
    ADOSelect->SQL->Add(asSql);
    ADOSelect->Open();
    LINENUM = ADOSelect->FieldByName("LINENUM")->AsInteger;         */

    //NodeText = tvDevice->Selected->Text;

    TfmOkCancel *okcancel = new TfmOkCancel(Application);
    okcancel->LabelTitle->Caption = "提示信息...";
    okcancel->lbMessage->Caption = "删除该站,该站下的镜头均将被删除,确定吗?";
    if (okcancel->lbMessage->Width > 216)
    {
        okcancel->Width = okcancel->lbMessage->Width + 70;
        okcancel->spbAdd->Left = (okcancel->Width/2 - 75)/2 + 22;
        okcancel->spbCancel->Left = okcancel->spbAdd->Left + 111;
    }
    okcancel->ShowModal();
    if(okcancel->bOk)
    {
        asSql = "select * from CT_SU where SUNAME='"+SUNAME+"'" ;
        ADOSelect->Close();
        ADOSelect->SQL->Clear();
        ADOSelect->SQL->Add(asSql);
        ADOSelect->Open();
        SUNUM = ADOSelect->FieldByName("SUNUM")->AsInteger;

        asSql = "delete from CT_SU where SUNUM="+IntToStr(SUNUM) ;
        ADOSelect->Close();
        ADOSelect->SQL->Clear();
        ADOSelect->SQL->Add(asSql);
        ADOSelect->ExecSQL() ;

        asSql = "delete from CT_SM where SUNUM="+IntToStr(SUNUM);
        ADOSelect->Close();
        ADOSelect->SQL->Clear();
        ADOSelect->SQL->Add(asSql);
        ADOSelect->ExecSQL() ;

        asSql = "delete from ct_videoswparams where SUNUM=" + IntToStr(SUNUM);
        ADOSelect->Close();
        ADOSelect->SQL->Clear();
        ADOSelect->SQL->Add(asSql);
        ADOSelect->ExecSQL();

        idx = idx - 1;
        LoadData();
        fmMain->SaveToLog("删除站:站名("+ SUNAME+") 站号(" +IntToStr(SUNUM) +")",1);//添加到运行记录
    }
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::AddSmClick(TObject *Sender)
{//添加镜头
    int LINENUM,SUNUM,SMNUM;
    String SuName;
    AnsiString asSql;

    String LINENAME;

//    LINENAME = NodeParText;
/*    asSql = "select * from CT_LINE where LINENAME='"+LINENAME+"'";
    ADOSelect->Close();
    ADOSelect->SQL->Clear();
    ADOSelect->SQL->Add(asSql);
    ADOSelect->Open();
    LINENUM = ADOSelect->FieldByName("LINENUM")->AsInteger;//获取线路号    */

    SuName = NodeText;

    asSql = "select * from CT_SU where SUNAME='"+SuName + "'";
    ADOSelect->Close();
    ADOSelect->SQL->Clear();
    ADOSelect->SQL->Add(asSql);
    ADOSelect->Open();
//    LINENUM = ADOSelect->FieldByName("LINENUM")->AsInteger;
    SUNUM = ADOSelect->FieldByName("SUNUM")->AsInteger; //获取线路号和站号

    asSql = "select * from CT_SM where SUNUM != 0 order by SMPORT";
    ADOSelect->Close();
    ADOSelect->SQL->Clear();
    ADOSelect->SQL->Add(asSql);
    ADOSelect->Open();//排除中心镜头
    ADOSelect->Last() ;//设定新镜头的端口号
    fmAddSm->SmPort->Text = IntToStr(ADOSelect->FieldByName("SMPORT")->AsInteger + 1);

    asSql = "select * from CT_SM where SUNUM=" + IntToStr(SUNUM) + " order by SUNUM";
    ADOSelect->Close();
    ADOSelect->SQL->Clear();
    ADOSelect->SQL->Add(asSql);
    ADOSelect->Open();
    int num = ADOSelect->RecordCount;//已有镜头数
    if (num > 0)
    {
        ADOSelect->Last();
        SMNUM = ADOSelect->FieldByName("SMNUM")->AsInteger;
        fmAddSm->SmNum->Text = IntToStr(SMNUM + 1);
    }
    else
    {
         fmAddSm->SmNum->Text = IntToStr(0);
    }
    fmAddSm->ShowModal();
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::DelSmClick(TObject *Sender)
{//删除该镜头
    int LINENUM,SUNUM;
    AnsiString asSql;
    char* szBuffer = new char[30];

//    String LINENAME = NodeParParText;
    String SUNAME = NodeParText;

/*    asSql = "select * from CT_LINE where LINENAME='"+LINENAME + "'";
    ADOSelect->Close();
    ADOSelect->SQL->Clear();
    ADOSelect->SQL->Add(asSql);
    ADOSelect->Open();
    LINENUM = ADOSelect->FieldByName("LINENUM")->AsInteger;        */


    /*StrCopy(szBuffer,NodeText.c_str());
    int TempL = strlen(NodeText.c_str());
    NodeText = szBuffer[TempL - 1];*/
    int LenTemp = StrLen(NodeText.c_str());
    StrCopy(szBuffer,NodeText.c_str());
    int Temp_ = 0;
    for (int i = 0;i<LenTemp;i++)
    {
        if(szBuffer[i] == 0X5F)
        {//"_"
            Temp_ = i+1;
            break;   
        }
    }

    if((LenTemp - Temp_) == 1)
    {
        NodeText = szBuffer[LenTemp - 1];//获得镜头号
    }
    else if((LenTemp - Temp_) == 2)
    {
        NodeText = szBuffer[LenTemp - 2];
        NodeText = NodeText + szBuffer[LenTemp - 1];
    }

    asSql = "select * from CT_SU where SUNAME='"+NodeParText+"'" ;
    ADOSelect->Close();
    ADOSelect->SQL->Clear();
    ADOSelect->SQL->Add(asSql);
    ADOSelect->Open();
//    LINENUM = ADOSelect->FieldByName("LINENUM")->AsInteger;
    SUNUM = ADOSelect->FieldByName("SUNUM")->AsInteger;

    asSql = "select * from CT_SM where SUNUM=" + IntToStr(SUNUM) + " AND " + "SMNUM=" + NodeText;
    ADOSelect->Close();
    ADOSelect->SQL->Clear();
    ADOSelect->SQL->Add(asSql);
    ADOSelect->Open();
    String SMNAME = ADOSelect->FieldByName("SMNAME")->AsString;

    TfmOkCancel *okcancel = new TfmOkCancel(Application);
    okcancel->LabelTitle->Caption = "提示信息...";
    okcancel->lbMessage->Caption = "确定要删除该镜头?";
    okcancel->ShowModal();
    if(okcancel->bOk)
    {
        asSql = "delete from CT_SM where SUNUM=" + IntToStr(SUNUM) + " AND " + "SMNUM=" + NodeText;
        ADOSelect->Close();
        ADOSelect->SQL->Clear();
        ADOSelect->SQL->Add(asSql);
        ADOSelect->ExecSQL();

        asSql = "delete from ct_videoswparams where SUNUM=" + IntToStr(SUNUM) + " AND " + "SMNUM=" + NodeText;
        ADOSelect->Close();
        ADOSelect->SQL->Clear();
        ADOSelect->SQL->Add(asSql);
        ADOSelect->ExecSQL();
        idx = idx - 1;
        LoadData();
        fmMain->SaveToLog("在"+SUNAME+"(站号:"+IntToStr(SUNUM)+")下删除镜头:镜头名("+ SMNAME+")",1);//添加到运行记录
    }
}
//---------------------------------------------------------------------------


void __fastcall TfmMain::LookSmInfoClick(TObject *Sender)
{//查看该镜头信息
    int SUNUM;
    AnsiString asSql;
    String NodeTextTemp;
    char* szBuffer = new char[30];
    String LINENAME;

/*    LINENAME = NodeParParText;
    asSql = "select * from CT_LINE where LINENAME='"+LINENAME+"'";
    ADOSelect->Close();
    ADOSelect->SQL->Clear();
    ADOSelect->SQL->Add(asSql);
    ADOSelect->Open();
    LINENUM = ADOSelect->FieldByName("LINENUM")->AsInteger;      */

    NodeTextTemp = NodeText;

    int LenTemp = StrLen(NodeTextTemp.c_str());
    StrCopy(szBuffer,NodeTextTemp.c_str());
    int Temp_ = 0;
    for (int i = 0;i<LenTemp;i++)
    {
        if (szBuffer[i] == 0X5F)
        {//"_"
            Temp_ = i+1;
            break;
        }
    }

    if ((LenTemp - Temp_) == 1)
    {
        NodeTextTemp = szBuffer[LenTemp - 1];//获得镜头号
    }
    else if ((LenTemp - Temp_) == 2)
    {
        NodeTextTemp = szBuffer[LenTemp - 2];
        NodeTextTemp = NodeTextTemp + szBuffer[LenTemp - 1];
    }

    asSql = "select * from CT_SU where SUNAME='"+NodeParText+"'";
    ADOSelect->Close();
    ADOSelect->SQL->Clear();
    ADOSelect->SQL->Add(asSql);
    ADOSelect->Open();
//    LINENUM = ADOSelect->FieldByName("LINENUM")->AsInteger;
    SUNUM = ADOSelect->FieldByName("SUNUM")->AsInteger;

    asSql = "select * from CT_SM where SUNUM=" + IntToStr(SUNUM) + " AND " + "SMNUM=" + NodeTextTemp;
    ADOSelect->Close();
    ADOSelect->SQL->Clear();
    ADOSelect->SQL->Add(asSql);
    ADOSelect->Open();

    SUNUM = ADOSelect->FieldByName("SUNUM")->AsInteger;
    int SMNUM = ADOSelect->FieldByName("SMNUM")->AsInteger;
    String SMNAME = ADOSelect->FieldByName("SMNAME")->AsString;
    int SMTYPE = ADOSelect->FieldByName("SMTYPE")->AsInteger;
    int SWADDR = ADOSelect->FieldByName("SWADDR")->AsInteger;
    int SMPORT = ADOSelect->FieldByName("SMPORT")->AsInteger;
    String SMIP = ADOSelect->FieldByName("SMIP")->AsString;
    int ENABLEAUDIO = ADOSelect->FieldByName("ENABLEAUDIO")->AsInteger;
    int ENABLEREC = ADOSelect->FieldByName("ENABLEREC")->AsInteger;

    int ENABLEYZD = ADOSelect->FieldByName("ENABLEYZD")->AsInteger;
    int YTCIRCLETIME = ADOSelect->FieldByName("YTCIRCLETIME")->AsInteger;
    int YTSTAYTIME = ADOSelect->FieldByName("YTSTAYTIME")->AsInteger;
    int YZDTIME = ADOSelect->FieldByName("YZDTIME")->AsInteger;

    fmSmInfo->SuNum->Caption = IntToStr(SUNUM);
    fmSmInfo->SmNum->Caption = IntToStr(SMNUM);
    fmSmInfo->SmName->Text = SMNAME;
    if (SMTYPE == 255)
    {
        fmSmInfo->SmType->ItemIndex = 3;
    }
    else
    {
        fmSmInfo->SmType->ItemIndex = SMTYPE;
    }
    fmSmInfo->RadioGroup1->ItemIndex = ENABLEAUDIO;
    fmSmInfo->RadioGroup2->ItemIndex = ENABLEREC;
    fmSmInfo->RadioGroup3->ItemIndex = ADOSelect->FieldByName("ENABLELAMP")->AsInteger;
    fmSmInfo->RadioGroup4->ItemIndex = ENABLEYZD;
    fmSmInfo->RadioGroup5->ItemIndex = ADOSelect->FieldByName("YTBACK")->AsInteger;
    fmSmInfo->RadioGroup6->ItemIndex = ADOSelect->FieldByName("ENABLEYUSHUA")->AsInteger;

    fmSmInfo->Edit1->Text = IntToStr(YTCIRCLETIME);
    fmSmInfo->Edit2->Text = IntToStr(YTSTAYTIME);
    fmSmInfo->Edit3->Text = IntToStr(YZDTIME);
    fmSmInfo->Edit4->Text = ADOSelect->FieldByName("AUDIONUM")->AsInteger;

    fmSmInfo->SwAddr->Text = IntToStr(SWADDR);
    fmSmInfo->SmPort->Text = IntToStr(SMPORT);   
    fmSmInfo->SmIp->Text = SMIP;

    fmSmInfo->SmType->Enabled = false;
    fmSmInfo->SwAddr->ReadOnly = true;
    fmSmInfo->SmName->ReadOnly = true;
    fmSmInfo->SwAddr->ReadOnly = true;
    fmSmInfo->SmPort->ReadOnly = true;
    fmSmInfo->Edit4->ReadOnly = true;
    fmSmInfo->RadioGroup1->Enabled = false;
    fmSmInfo->RadioGroup2->Enabled = false;
    fmSmInfo->RadioGroup3->Enabled = false;
    fmSmInfo->RadioGroup4->Enabled = false;
    fmSmInfo->RadioGroup5->Enabled = false;
    fmSmInfo->RadioGroup6->Enabled = false;
    fmSmInfo->SmIp->ReadOnly = true;
    fmSmInfo->spbSave->Enabled = false;
    fmSmInfo->spbUpDate->Enabled = true;
    fmSmInfo->Edit1->ReadOnly = true;
    fmSmInfo->Edit2->ReadOnly = true;
    fmSmInfo->Edit3->ReadOnly = true;

    fmSmInfo->Ev_jilian->ItemIndex = ADOSelect->FieldByName("EV_JILIAN")->AsInteger;
    fmSmInfo->Ev_mainselfinport->Text = ADOSelect->FieldByName("EV_MAINSELFINPORT")->AsInteger;
    fmSmInfo->Ev_swaddr->Text = ADOSelect->FieldByName("EV_SWADDR")->AsInteger;
    fmSmInfo->Ev_swoutport->Text = ADOSelect->FieldByName("EV_SWOUTPORT")->AsInteger;
    fmSmInfo->Ev_swinport->Text = ADOSelect->FieldByName("EV_SWINPORT")->AsInteger;
    fmSmInfo->Vs_addr->Text = ADOSelect->FieldByName("VS_ADDR")->AsInteger;
    fmSmInfo->Vs_inport->Text = ADOSelect->FieldByName("VS_INPORT")->AsInteger;
    fmSmInfo->Vs_outport->Text = ADOSelect->FieldByName("VS_OUTPORT")->AsInteger;

    fmSmInfo->bGroupNum->Value = ADOSelect->FieldByName("GROUPNUM")->AsInteger;

    fmSmInfo->Ev_jilian->Enabled = false;
    fmSmInfo->Ev_mainselfinport->Enabled = false;
    fmSmInfo->Ev_swaddr->Enabled = false;
    fmSmInfo->Ev_swoutport->Enabled = false;
    fmSmInfo->Ev_swinport->Enabled = false;
    fmSmInfo->Vs_addr->Enabled = false;
    fmSmInfo->Vs_inport->Enabled = false;
    fmSmInfo->Vs_outport->Enabled = false;

    fmSmInfo->bGroupNum->Enabled = false;

    fmSmInfo->ShowModal();
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::AddsetClick(TObject *Sender)
{//添加后台设备
 //   fmAddDev->ShowModal();   
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::SetSuSmParamsClick(TObject *Sender)
{//设置站和镜头参数
    String SUNAME,SMNAME;
    int SUNUM = 0,SMNUM = 0,SMTYPE = 0,AUDIONUM = 0,LINENUM = 0,ENABLEAUDIO = 0,ENABLEREC = 0;
    int ENABLELAMP = 0,ENABLEYZD = 0,YTCIRCLETIME = 0,YTSTAYTIME = 0,YZDTIME = 0,YTBACK = 0;
    int ENABLEYUSHUA = 0;
    int SWADDR = 0;
    SUNAME = NodeText;//当前站名
//    LINENAME = NodeParText;//当前线路号

    fmMain->SetContorlTimeFlag = 0;

//    LINENUM = GetLineNum(NodeParText);
    SUNUM = GetSuNum(NodeText);

    SetMainParamsFuWei = 1;
    MainControlJS = 4;
    MainParamType = 1;
   
    BYTE DataInfo[2000];
    memset(DataInfo, 0, 2000);

    //DATAINFO
    DataInfo[0] = 0X01;//COMMAND TYPE 参数型号
    int SuNameLength = SUNAME.Length();
    memcpy((char *)DataInfo + 1, SUNAME.c_str(), SuNameLength);//站名

    asSql = "select * from CT_SM where SUNUM=" + IntToStr(SUNUM) + " order by 'SMNUM'";
    fmMain->ADOSelect->Close();
    fmMain->ADOSelect->SQL->Clear();
    fmMain->ADOSelect->SQL->Add(asSql);
    fmMain->ADOSelect->Open();
    int SmCount = fmMain->ADOSelect->RecordCount;//镜头个数
    FuWeiZhuKong->Interval = SmCount * 5000;
    DataInfo[17 + 0] = SmCount;//镜头个数
    for(int i = 0;i<SmCount;i++)
    {
        SMNUM = ADOSelect->FieldByName("SMNUM")->AsInteger;//镜头编号
        SMTYPE = ADOSelect->FieldByName("SMTYPE")->AsInteger;//镜头类型
        SMNAME = ADOSelect->FieldByName("SMNAME")->AsString;//镜头名
        ENABLEAUDIO = ADOSelect->FieldByName("ENABLEAUDIO")->AsInteger;//是否有音频
        ENABLEREC = ADOSelect->FieldByName("ENABLEREC")->AsInteger;//是否有录像
        SWADDR = ADOSelect->FieldByName("SWADDR")->AsInteger;//切换器地址

        ENABLELAMP = ADOSelect->FieldByName("ENABLELAMP")->AsInteger;//
        ENABLEYZD = ADOSelect->FieldByName("ENABLEYZD")->AsInteger;//
        YTCIRCLETIME = ADOSelect->FieldByName("YTCIRCLETIME")->AsInteger;//
        YTSTAYTIME = ADOSelect->FieldByName("YTSTAYTIME")->AsInteger;//
        YZDTIME = ADOSelect->FieldByName("YZDTIME")->AsInteger;//
        YTBACK = ADOSelect->FieldByName("YTBACK")->AsInteger;//
        AUDIONUM = ADOSelect->FieldByName("AUDIONUM")->AsInteger;//
        ENABLEYUSHUA = ADOSelect->FieldByName("ENABLEYUSHUA")->AsInteger;//

        if(SMTYPE != 255)
        {
            SMTYPE = ENABLEREC * 0X80 + SMTYPE;//第8位
            SMTYPE = ENABLELAMP * 0X40 + SMTYPE;//第7位
            SMTYPE = ENABLEYZD * 0X20 + SMTYPE;//第6位
            SMTYPE = YTBACK * 0X10 + SMTYPE;//第5位
            SMTYPE = ENABLEYUSHUA * 0X08 + SMTYPE;//第4位
        }
        if(ENABLEAUDIO)
        {
            //AUDIONUM += 1;
            DataInfo[17 + 19 + i * 26] = AUDIONUM;//AUDIONUM;//音频编号1 空闲用FF补
        }
        else
        {
            DataInfo[17 + 19 + i * 26] = 0XFF;//AUDIONUM;//音频编号1 空闲用FF补
            //AUDIONUM = 0XFF;
        }
        DataInfo[17 + 20 + i * 26] = SWADDR;//切换器地址

        *(WORD *)(DataInfo + 17 + 21 + i * 26) = YTCIRCLETIME;//
        *(WORD *)(DataInfo + 17 + 23 + i * 26) = YTSTAYTIME;//
        *(WORD *)(DataInfo + 17 + 25 + i * 26) = YZDTIME;//

        //总共19字节
        DataInfo[17 + 1 + i * 26] = SMNUM;//镜头编号
        DataInfo[17 + 2 + i * 26] = SMTYPE;//镜头类型 0=固定;1云台;2=快球
      /*DataInfo[17 + 3] = 0X00;//镜头名称1 16个字节(空闲字节请用0补)
        DataInfo[17 + 4] = 0X00;//
        DataInfo[17 + 5] = 0X00;//
        DataInfo[17 + 6] = 0X00;//
        DataInfo[17 + 7] = 0X00;//
        DataInfo[17 + 8] = 0X00;//
        DataInfo[17 + 9] = 0X00;//
        DataInfo[17 + 10] = 0X00;//
        DataInfo[17 + 11] = 0X00;//
        DataInfo[17 + 12] = 0X00;//
        DataInfo[17 + 13] = 0X00;//
        DataInfo[17 + 14] = 0X00;//
        DataInfo[17 + 15] = 0X00;//
        DataInfo[17 + 16] = 0X00;//
        DataInfo[17 + 17] = 0X00;//
        DataInfo[17 + 18] = 0X00;//镜头名称*/
        BYTE pSmName[16];
        memset(pSmName, 0, 16);
        memcpy((char *)pSmName, SMNAME.c_str(), SMNAME.Length());
        memcpy(DataInfo+(17 + 3 + i * 26), (char *)(pSmName), 16);//拷贝镜头名
        //DataInfo[17 + 19 + i * 19] = AUDIONUM;//AUDIONUM;//音频编号1 空闲用FF补
        ADOSelect->Next();
    }
    int DataLength = 17 + 1 + SmCount * 26;//DATAInfo长度
    MakePack(DataInfo,DataLength,0X04,SUNUM,0X00,0XC4,LINENUM,SUNUM,"设置主控参数(站和镜头信息)命令");
}
//---------------------------------------------------------------------------
void __fastcall TfmMain::MakePack(BYTE *DataInfo,int DataLength, int Protocol/
    ,int SmAddr,int Cid1, int Cid2, int LineNum, int SuNum,String CmdName)
{
 if(ServerType == 0)
    {//连接后台服务器
        int Length = 0;
        Length = DataLength + 7;//7个字节含义
                                    //1B USERLEVEL 用户级别
                                    //+
                                    //6B
                                    //9-10 CMDWORD 命令码2B
                                    //11 LINE 线路号1B
                                    //12 STATION 站号1B
                                    //13 MODEL 模块号1B
                                    //14 CID1 设备类型码 1B

        //swab((char*)&Length, (char*)&Length, 2);
        BYTE *pFrame = new BYTE[2000];
        memset(pFrame, 0, 2000);
        pFrame[0] = 0XEB;
        pFrame[1] = 0X90;
        *(WORD *)(pFrame + 2) = Length;//DATA部分长度 2B
      //pFrame[2] = 0X00;//LENGTH  DATA部分长度
      //pFrame[3] = 0X00;
        pFrame[4] = 0X01;//VERSION 1B协议版本号
        pFrame[5] = Protocol;//PROTOCOL 1B协议类型
      //pFrame[6] = 0X00;//TERMID 1B 终端号
      //pFrame[7] = 0X00;//RESERVED 1B保留字节(多级扩展字段,已使用)
      //DATA
        pFrame[8] = 0XAA;//USERLEVEL 用户级别1B
        pFrame[9] = Cid2;//CMDWORD 命令码2B CID2
        pFrame[10] = 0X00;//CMDWORD 命令码2B CID2
        pFrame[11] = LineNum; //LINE 线路号1B
        pFrame[12] = SuNum;//STATION 站号1B
        pFrame[13] = SmAddr;//MODEL 模块号1B
        pFrame[14] = Cid1;//CID1 设备类型码 1B
      //INFO
      //pFrame[15] = CommandType;//COMMAND TYPE  基本站名和镜头信息  参数型号
      /*pFrame[16] = 0X00;//站名 16个字节(空闲字节请用0补)
        pFrame[17] = 0X00;//
        pFrame[18] = 0X00;//
        pFrame[19] = 0X00;//
        pFrame[20] = 0X00;//
        pFrame[21] = 0X00;//
        pFrame[22] = 0X00;//
        pFrame[23] = 0X00;//
        pFrame[24] = 0X00;//
        pFrame[25] = 0X00;//
        pFrame[26] = 0X00;//
        pFrame[27] = 0X00;//
        pFrame[28] = 0X00;//
        pFrame[29] = 0X00;//
        pFrame[30] = 0X00;//
        pFrame[31] = 0X00;//站名结束*/
        memcpy(pFrame+15, DataInfo, DataLength);//拷贝DATAINFO
        SocketSend(pFrame,Length + 8,CmdName);//8个字节的包头 -- HEAD
    }
    else if(ServerType == 1)
    {//连接主控
       int Length = 0;
        Length = DataLength + 7;//7个字节含义
                                    //1B USERLEVEL 用户级别
                                    //+
                                    //6B
                                    //9-10 CMDWORD 命令码2B
                                    //11 LINE 线路号1B
                                    //12 STATION 站号1B
                                    //13 MODEL 模块号1B
                                    //14 CID1 设备类型码 1B

        //swab((char*)&Length, (char*)&Length, 2);
        BYTE *pFrame = new BYTE[2000];
        memset(pFrame, 0, 2000);
        pFrame[0] = 0XEB;
        pFrame[1] = 0X90;
        *(WORD *)(pFrame + 2) = Length;//DATA部分长度 2B
      //pFrame[2] = 0X00;//LENGTH  DATA部分长度
      //pFrame[3] = 0X00;
        pFrame[4] = 0X01;//VERSION 1B协议版本号
        pFrame[5] = Protocol;//PROTOCOL 1B协议类型
      //pFrame[6] = 0X00;//TERMID 1B 终端号
      //pFrame[7] = 0X00;//RESERVED 1B保留字节(多级扩展字段,已使用)
      //DATA
        pFrame[8] = 0XAA;//USERLEVEL 用户级别1B
        pFrame[9] = Cid2;//CMDWORD 命令码2B CID2
        pFrame[10] = 0X00;//CMDWORD 命令码2B CID2
        pFrame[11] = LineNum; //LINE 线路号1B
        pFrame[12] = SuNum;//STATION 站号1B
        pFrame[13] = SmAddr;//MODEL 模块号1B
        pFrame[14] = Cid1;//CID1 设备类型码 1B
      //INFO
      //pFrame[15] = CommandType;//COMMAND TYPE  基本站名和镜头信息  参数型号
      /*pFrame[16] = 0X00;//站名 16个字节(空闲字节请用0补)
        pFrame[17] = 0X00;//
        pFrame[18] = 0X00;//
        pFrame[19] = 0X00;//
        pFrame[20] = 0X00;//
        pFrame[21] = 0X00;//
        pFrame[22] = 0X00;//
        pFrame[23] = 0X00;//
        pFrame[24] = 0X00;//
        pFrame[25] = 0X00;//
        pFrame[26] = 0X00;//
        pFrame[27] = 0X00;//
        pFrame[28] = 0X00;//
        pFrame[29] = 0X00;//
        pFrame[30] = 0X00;//
        pFrame[31] = 0X00;//站名结束*/
        memcpy(pFrame+15, DataInfo, DataLength);//拷贝DATAINFO
        //SocketSend(pFrame,Length + 8,CmdName);//8个字节的包头 -- HEAD
        ProcHtParamCMD(pFrame,Length + 8,0,CmdName);
    }
}
//---------------------------------------------------------------------------
void __fastcall TfmMain::SocketSend(BYTE * pFrame,int SendLength,String CmdName)
{
    if(ClientSocket->Active)
    {
        ClientSocket->Socket->SendBuf(pFrame,SendLength);
        SprintfData("-> ->  "+CmdName + ":",pFrame,SendLength);
        //MessageShow("下发成功!");
    }
    else
    {
        MessageShow("网络连接失败,请先确认网络连接状态!");
    }
}

//---------------------------------------------------------------------------
void __fastcall TfmMain::MakePack(BYTE *DataInfo,int DataLength, int Protocol/
    ,int SmAddr,int Cid1, int Cid2, int LineNum, int SuNum)
{
    int Length = 0;
    Length = DataLength + 7;//Data长度
    //swab((char*)&Length, (char*)&Length, 2);
    BYTE *pFrame = new BYTE[2000];
    memset(pFrame, 0, 2000);
    pFrame[0] = 0XEB;
    pFrame[1] = 0X90;
    *(WORD *)(pFrame + 2) = Length;
  //pFrame[2] = 0X00;//LENGTH  DATA部分长度
  //pFrame[3] = 0X00;
    pFrame[4] = 0X01;//VERSION 1B协议版本号
    pFrame[5] = Protocol;//PROTOCOL 1B协议类型
  //pFrame[6] = 0X00;//TERMID 1B 终端号
  //pFrame[7] = 0X00;//RESERVED 1B保留字节(多级扩展字段,已使用)
  //DATA
    pFrame[8] = 0XAA;//USERLEVEL 用户级别1B
    pFrame[9] = Cid2;//CMDWORD 命令码2B CID2
    pFrame[10] = 0X00;//CMDWORD 命令码2B CID2
    pFrame[11] = LineNum; //LINE 线路号1B
    pFrame[12] = SuNum;//STATION 站号1B
    pFrame[13] = SmAddr;//MODEL 模块号1B
    pFrame[14] = Cid1;//CID1 设备类型码 1B
  //INFO
  //pFrame[15] = CommandType;//COMMAND TYPE  基本站名和镜头信息  参数型号
  /*pFrame[16] = 0X00;//站名 16个字节(空闲字节请用0补)
    pFrame[17] = 0X00;//
    pFrame[18] = 0X00;//
    pFrame[19] = 0X00;//
    pFrame[20] = 0X00;//
    pFrame[21] = 0X00;//
    pFrame[22] = 0X00;//
    pFrame[23] = 0X00;//
    pFrame[24] = 0X00;//
    pFrame[25] = 0X00;//
    pFrame[26] = 0X00;//
    pFrame[27] = 0X00;//
    pFrame[28] = 0X00;//
    pFrame[29] = 0X00;//
    pFrame[30] = 0X00;//
    pFrame[31] = 0X00;//站名结束*/
    memcpy(pFrame+15, DataInfo, DataLength);//拷贝DATAINFO
    SocketSend(pFrame,Length);
}
//---------------------------------------------------------------------------
void __fastcall TfmMain::SocketSend(BYTE * pFrame,int SendLength)
{
    if(ClientSocket->Active)
    {
        ClientSocket->Socket->SendBuf(pFrame,(8 +SendLength));
        SprintfData("-> ->  ",pFrame,8 +SendLength);
        //MessageShow("下发成功!");
    }
    else
    {
        MessageShow("网络连接失败,请先确认网络连接状态!");
    }
}
//---------------------------------------------------------------------------
void __fastcall TfmMain::IP1Click(TObject *Sender)
{//设置前台IP参数
 SetMainParamsFuWei = 1;
 MainControlJS = 4;
    MainParamType = 0;
    fmQtMainParams->ShowModal();   
}
//---------------------------------------------------------------------------

int __fastcall TfmMain::GetLineNum(String LineName)
{//通过线路名获得线路号
/*    asSql = "select * from CT_LINE where LINENAME='"+LineName+"'";
    ADOSelect->Close();
    ADOSelect->SQL->Clear();
    ADOSelect->SQL->Add(asSql);
    ADOSelect->Open();
    int LINENUM = ADOSelect->FieldByName("LINENUM")->AsInteger;
    return LINENUM;           */

}
//---------------------------------------------------------------------------
int __fastcall TfmMain::GetSuNum(String SuName)
{//通过站名获得站号
//    int LineNum = 0;
//    LineNum = GetLineNum(LineName);
    asSql = "select * from CT_SU where SUNAME='"+SuName + "'";
    ADOSelect->Close();
    ADOSelect->SQL->Clear();
    ADOSelect->SQL->Add(asSql);
    ADOSelect->Open();
    int SUNUM = ADOSelect->FieldByName("SUNUM")->AsInteger;
    return SUNUM;
}

//---------------------------------------------------------------------------
/******************************************************************************
*                                                                             *
*  功能:将StrIp中Ip转化到pBuff中                                             *
*  输入:StrIp = 192.168.1.12                                                 *
*  输出:pBuff[0] = 192 pBuff[1] = 168 pBuff[2] = 1 pBuff[3] = 12             *
*  创建日期:                                                                 *
*                                                                             *
******************************************************************************/
/* TODO : 拆分Ip */
void __fastcall TfmMain::SplitIp(BYTE pBuff[4],String StrIp)
{//拆分IP 例:StrIp = 192.168.1.12 处理之后:pBuff[0] = 192 pBuff[1] = 168 pBuff[2] = 1 pBuff[3] = 12
    String str1,str2;
    int j1 = -1;
    memset(pBuff,0,4);
    int Legth1 = strlen(StrIp.c_str());
    for(int i1 = 1;i1 < (Legth1 + 2);i1++)
    {
        str1 = StrIp.SubString(i1,1);
        if(str1 == "." || (i1 == (Legth1+1)))
        {
            j1 = j1+1;
            pBuff[j1] = StrToInt(str2);
            str1 = "";
            str2 = "";
            if(i1 == (Legth1 + 1))
            {
                break;
            }
        }
        else
        {
            str2 = str2 + str1;
        }
    }
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::SetSmAddrClick(TObject *Sender)
{//设置模块地址参数
    int LINENUM = 0,SUNUM = 0;
//    LINENUM = GetLineNum(NodeParText);
    SUNUM = GetSuNum(NodeText);

    SetMainParamsFuWei = 1;
    MainControlJS = 4;
    MainParamType = 0;
//    fmSmAddrParams->LineNum->Caption = IntToStr(LINENUM);
    fmSmAddrParams->SuNum->Caption = IntToStr(SUNUM);
    fmSmAddrParams->Edit6->Text = IntToStr(SUNUM);//主控模块地址:
    fmSmAddrParams->Edit1->Text = IntToStr(1);//信道控制器地址:
    fmSmAddrParams->ShowModal();
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::SpeedButton10Click(TObject *Sender)
{
    fmReceiveData->ShowModal();
}
//---------------------------------------------------------------------------

void __fastcall TfmMain::LoadVideoParams()
{//装载视频参数 从ct_sm读取站号、镜头号、镜头名装入ct_videoswparams表中
    int SUNUM = 0,SMNUM = 0,SMTYPE = 0;
    AnsiString asSql,SMNAME;


    //清空ct_videoswparams表
    /*asSql = "delete from ct_videoswparams";
    ADOUI->Close();
    ADOUI->SQL->Clear();
    ADOUI->SQL->Add(asSql);
    ADOUI->ExecSQL();
    */
   
    asSql = "select * from ct_sm order by SUNUM";
    ADOSelect->Close();
    ADOSelect->SQL->Clear();
    ADOSelect->SQL->Add(asSql);
    ADOSelect->Open();
    int Count = ADOSelect->RecordCount ;
    for(int i = 0 ;i < Count ;i++)
    {
        SUNUM = ADOSelect->FieldByName("SUNUM")->AsInteger;
        SMNUM = ADOSelect->FieldByName("SMNUM")->AsInteger;
        SMNAME = ADOSelect->FieldByName("SMNAME")->AsString;
        SMTYPE = ADOSelect->FieldByName("SMTYPE")->AsInteger;
       
        asSql = "select * from ct_videoswparams where SUNUM=" + IntToStr(SUNUM)/
             + " AND "+ "SMNUM=" + IntToStr(SMNUM)/
             + " AND "+ "SMTYPE=" + IntToStr(SMTYPE)/
             + " AND " + "SMNAME='" + SMNAME + "'";
        ADOUI->Close();
        ADOUI->SQL->Clear();
        ADOUI->SQL->Add(asSql);
        ADOUI->Open();
        int Count = ADOUI->RecordCount ;
        if(Count == 0)
        {
            asSql = "insert into ct_videoswparams values("+IntToStr(SUNUM)/
                +","+IntToStr(SMNUM) +",'"+ SMNAME +"',"+IntToStr(SMTYPE)/
                +","+IntToStr(SMNUM)+","+IntToStr(0)+","+IntToStr(0) + ")";

            ADOUI->Close();
            ADOUI->SQL->Clear();
            ADOUI->SQL->Add(asSql);
            ADOUI->ExecSQL();
        }

        ADOSelect->Next();
    }
}
//---------------------------------------------------------------------------
void __fastcall TfmMain::N4Click(TObject *Sender)
{//设置视频切换参数
    int SUNUM = 0,SMNUM = 0,SWINPORT = 0,CLASSTYPE = 0,CLASSSWADDR = 0,/
 DVRCHANNELS = 0,ONESWINPORT = 0,TWOCLASSSWOUTPORT = 0,TWOCLASSSWADDR = 0;
    String asSql,SMNAME;

    SetMainParamsFuWei = 1;
  MainControlJS = 4;
    MainParamType = 0;  
//    int LINENUM = GetLineNum(NodeParText);
    SUNUM = GetSuNum(NodeText);
    fmSetVideoSwParams->GroupBox2->Caption = NodeText + "参数...";
    asSql = "select * from ct_videoswparams where SUNUM=" + IntToStr(SUNUM) + " order by SMNUM";
    ADOSelect->Close();
    ADOSelect->SQL->Clear();
    ADOSelect->SQL->Add(asSql);
    ADOSelect->Open();
    //int Count = ADOSelect->RecordCount ;

    SMNUM = fmMain->ADOSelect->FieldByName("SMNUM")->AsInteger;
    SMNAME = fmMain->ADOSelect->FieldByName("SMNAME")->AsString;
    SWINPORT = fmMain->ADOSelect->FieldByName("SWINPORT")->AsInteger;
    CLASSTYPE = fmMain->ADOSelect->FieldByName("CLASSTYPE")->AsInteger;
    CLASSSWADDR = fmMain->ADOSelect->FieldByName("CLASSSWADDR")->AsInteger;
    /*DVRCHANNELS = fmMain->ADOSelect->FieldByName("DVRCHANNELS")->AsInteger;
    ONESWINPORT = fmMain->ADOSelect->FieldByName("ONESWINPORT")->AsInteger;
    TWOCLASSSWOUTPORT = fmMain->ADOSelect->FieldByName("TWOCLASSSWOUTPORT")->AsInteger;
    TWOCLASSSWADDR = fmMain->ADOSelect->FieldByName("TWOCLASSSWADDR")->AsInteger;*/

    fmSetVideoSwParams->SmNum->Caption = IntToStr(SMNUM);
    fmSetVideoSwParams->SmName->Caption = SMNAME;
    fmSetVideoSwParams->SwInPort->Text = IntToStr(SWINPORT);
    fmSetVideoSwParams->ClassType->ItemIndex = CLASSTYPE;
    fmSetVideoSwParams->ClassSwAddr->Text = IntToStr(CLASSSWADDR);
    /*fmSetVideoSwParams->DvrChannels->Text = IntToStr(DVRCHANNELS);
    fmSetVideoSwParams->OneSwInPort->Text = IntToStr(ONESWINPORT);
    fmSetVideoSwParams->TwoClassSwOutPort->Text = IntToStr(TWOCLASSSWOUTPORT);
    fmSetVideoSwParams->TwoClassSwAddr->Text = IntToStr(TWOCLASSSWADDR);*/

    fmSetVideoSwParams->SwInPort->Enabled = false;
    fmSetVideoSwParams->ClassType->Enabled = false;
    fmSetVideoSwParams->ClassSwAddr->Enabled = false;
    /*fmSetVideoSwParams->DvrChannels->Enabled = false;
    fmSetVideoSwParams->OneSwInPort->Enabled = false;
    fmSetVideoSwParams->TwoClassSwOutPort->Enabled = false;
    fmSetVideoSwParams->TwoClassSwAddr->Enabled = false;*/

    fmSetVideoSwParams->SpeedButton7->Enabled = true;
    fmSetVideoSwParams->SpeedButton6->Enabled = false;
    fmSetVideoSwParams->SpeedButton8->Enabled = true;
    fmSetVideoSwParams->SpeedButton9->Enabled = false;
    fm