//--------------------------------------------------------------------------- #include #include "AppGlobalF.h" #include "ITSSkinF.h" #include "ITSUtilF.h" #include "ITSLangTransF.h" #include "FrmInitializeF.h" #include "DMDbF.h" #pragma hdrstop #include "FrmCctvCamCtrlF.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma link "cxButtons" #pragma link "cxCalc" #pragma link "cxCheckBox" #pragma link "cxClasses" #pragma link "cxContainer" #pragma link "cxControls" #pragma link "cxCustomData" #pragma link "cxData" #pragma link "cxDataStorage" #pragma link "cxEdit" #pragma link "cxFilter" #pragma link "cxGraphics" #pragma link "cxGrid" #pragma link "cxGridBandedTableView" #pragma link "cxGridCustomTableView" #pragma link "cxGridCustomView" #pragma link "cxGridLevel" #pragma link "cxGridTableView" #pragma link "cxGroupBox" #pragma link "cxLabel" #pragma link "cxLookAndFeelPainters" #pragma link "cxLookAndFeels" #pragma link "cxMaskEdit" #pragma link "cxPC" #pragma link "cxPCdxBarPopupMenu" #pragma link "cxSpinEdit" #pragma link "cxStyles" #pragma link "cxTextEdit" #pragma link "dxSkinBlue" #pragma link "dxSkinsCore" #pragma link "dxSkinscxPCPainter" #pragma link "FFBaseComponent" #pragma link "FFBasePlay" #pragma link "FFPlay" //#pragma link "FRAME_WCamStateListF" #pragma link "IdBaseComponent" #pragma link "IdComponent" #pragma link "IdIcmpClient" #pragma link "IdRawBase" #pragma link "IdRawClient" #pragma link "ImageBtn" #pragma link "dxSkinBlack" #pragma link "dxSkinsForm" #pragma link "dxSkinMcSkin" #pragma link "IdHTTP" #pragma link "IdTCPClient" #pragma link "IdTCPConnection" #pragma link "FRAME_CctvStateListF" #pragma resource "*.dfm" TFrmCctvCamCtrl *FrmCctvCamCtrl = NULL; //{* Information Bar *} #define CAP_CAMERA_NAME 0x01 #define CAP_TIME 0x02 #define CAP_CHANNEL 0x04 #define CAP_SIZE 0x08 #define CAP_EVENT 0x10 #define CAP_FPSCHANGED 0x20 //{* Pan/tilt/Zoom and Transparent controls *} #define CTL_FOCUS_CONT 0x2001 #define CTL_PTZ_CONT 0x2002 #define CTL_TRANSPARENT 0x7000 #define CTL_TRANSPARENT_RS232 0x7001 //{* OCXState for NVSMPEG4OCX *} #define GRAPH_NONE 0x00000000 #define GRAPH_PREVIEW 0x00000001 #define GRAPH_CAPTURE 0x00000002 #define GRAPH_PREVIEWCAPTURE 0x00000003 #define GRAPH_AUDIO_LISTEN 0x00000100 #define GRAPH_AUDIO_CAPTURE 0x00000200 #define GRAPH_AUDIO_LISTENCAPTURE 0x00000400 #define GRAPH_STATE_RUNNING 0x80000000 #define SB_PAN_LEFT 0x000000C4 #define SB_PAN_RIGHT 0x0000003C #define SB_TILT_UP 0x00003C00 #define SB_TILT_DOWN 0x0000C400 #define SB_ZOOM_IN 0x003C0000 #define SB_ZOOM_OUT 0x00C40000 #define SB_FOCUS_IN 0x3C #define SB_FOCUS_OUT 0xC4 enum { E_MJPG=0, E_MP4S, E_DX50, E_MPEG2, E_MPEG1, E_H264 }; enum { BR_32K=0, BR_64K, BR_128K, BR_256K, BR_384K, BR_500K, BR_750K, BR_1M, BR_1_5M, BR_2M, BR_4M, BR_5M, BR_6M, BR_7M, BR_8M }; enum { S_1080P=0, S_720P, S_D1, S_4CIF, S_VGA, S_HD1, S_H4CIF, S_HVGA, S_CIF, S_QVGA, S_QCIF, S_QQVGA }; #define PRESET_SET 0x1020 // Unsigned 1 byte #define PRESET_MOVE 0x1021 // Unsigned 1 byte #define PRESET_CLEAR 0x1022 // Unsigned 1 byte #define LICENSE_KEY "FSXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX" //--------------------------------------------------------------------------- __fastcall TFrmCctvCamCtrl::TFrmCctvCamCtrl(TComponent* Owner) : TForm(Owner) { //::CoInitialize(NULL); ITSSkin_Initialize(Application, "kr", true, true); LangTrans->Translate(this, ITSDb_GetConnection()); ITSSkin_Load(this); LoadLocalSkin(); //CMM_LoadForm(g_sFormsDir, this); FSelCtlr = NULL; FRAMECctvStateList1->PnlTop->Visible = false; FRAMECctvStateList1->PnlBottom->Visible = false; FRAMECctvStateList1->TvList->OptionsView->Footer = false; FSelIds = new TStringList(); FTitle = Caption; //TabPreset->Visible = false; //TabPreset->TabVisible = false; FStrmPlay = false; String sAVILibDir = g_sAppDir + "LibAV"; FFPlayer1->SetLicenseKey(LICENSE_KEY); FFPlayer1->DisableFPUExceptions(); if (!FFPlayer1->LoadAVLib(sAVILibDir)) { reMsg->Lines->Add("¿µ»óÇ¥Ãâ ¶óÀ̺귯¸® ÃʱâÈ­ ½ÇÆÐ."); #if 0 if (g_AppCfg.sLang != "kr") Application->MessageBox(L"Stream display library load failed.", L"Stream display fail", MB_OK|MB_ICONERROR|MB_APPLMODAL); else Application->MessageBox(L"¿µ»óÇ¥Ãâ ¶óÀ̺귯¸®¸¦ ·ÎµåÇÏÁö ¸øÇÏ¿´½À´Ï´Ù.", L"¿µ»óÇ¥Ãâ ¿À·ù", MB_OK|MB_ICONERROR|MB_APPLMODAL); #endif } PgCam->Properties->HideTabs = true; PnlCamera->ParentColor = false; FTmrShow = true; } //--------------------------------------------------------------------------- void __fastcall TFrmCctvCamCtrl::CommClose() { try { SAFE_DELETE(FSelIds); CMM_SaveForm(g_sFormsDir, this); CloseRtsp(); //::CoUninitialize(); } catch(...) { } } //--------------------------------------------------------------------------- void __fastcall TFrmCctvCamCtrl::FormShow(TObject *Sender) { Refresh(); TmrShow->Enabled = FTmrShow; } //--------------------------------------------------------------------------- void __fastcall TFrmCctvCamCtrl::FormActivate(TObject *Sender) { ActivateForm(true); } //--------------------------------------------------------------------------- void __fastcall TFrmCctvCamCtrl::FormDeactivate(TObject *Sender) { ActivateForm(false); } //--------------------------------------------------------------------------- void __fastcall TFrmCctvCamCtrl::LoadLocalSkin() { PnlCamera->ParentColor = false; PnlCamera->Color = clBlack; Refresh(); } //--------------------------------------------------------------------------- void __fastcall TFrmCctvCamCtrl::TmrShowTimer(TObject *Sender) { TmrShow->Enabled = false; if (!CctvCtlrManager) { CctvCtlrManager = new TCctvCtlrManager(); } FrmInitialize = new TFrmInitialize(this); FrmInitialize->ShowModal(); FrmInitialize = NULL; FRAMECctvStateList1->UpdateList(); FRAMECctvStateList1->RefreshStatus(); FRAMECctvStateList1->CxList->Enabled = false; UpdatePingList(); FRAMECctvStateList1->CxList->Enabled = true; BtnStatRefresh->Enabled = true; TmrRefresh->Enabled = true; } //--------------------------------------------------------------------------- void __fastcall TFrmCctvCamCtrl::FormClose(TObject *Sender, TCloseAction &Action) { try { CommClose(); FrmCctvCamCtrl = NULL; Action = caFree; } catch(...) {} } //--------------------------------------------------------------------------- void __fastcall TFrmCctvCamCtrl::OnMainFormMessage(TMessage &Msg) { } //--------------------------------------------------------------------------- void __fastcall TFrmCctvCamCtrl::OnCctvStateRefreshMessage(TMessage &Msg) { FRAMECctvStateList1->RefreshStatus(); RefreshPingList(); } //--------------------------------------------------------------------------- void __fastcall TFrmCctvCamCtrl::ActivateForm(bool AActivate) { if (AActivate) FRAMECctvStateList1->RefreshStatus(); } //--------------------------------------------------------------------------- void __fastcall TFrmCctvCamCtrl::InitForm() { ClearPreset(); EdCtlrId->Text = ""; EdCtlrNm->Text = ""; EdCtlrIp->Text = ""; Se_CCTV_CTLR_PORT->Value = 0; EdTypeNm->Text = ""; Ed_STRM_SESN_NM->Text = ""; Ed_STRM_RTSP_ADDR->Text = ""; Ed_STRM_RTMP_ADDR->Text = ""; Ed_STRM_HTTP_ADDR->Text = ""; Ed_INTR_RTMP_ADDR->Text = ""; EdCmraId->Text = ""; EdCmraPswd->Text = ""; BtnWebCamUrl->Enabled = false; PnlCamConrtol->Enabled = false; } //--------------------------------------------------------------------------- void __fastcall TFrmCctvCamCtrl::DisplayInfo(TCctvCtlr* AObj) { InitForm(); FSelCtlr = AObj; if (FSelCtlr == NULL) { return; } EdCtlrId->Text = AObj->CCTV_CTLR_ID; EdCtlrNm->Text = AObj->CCTV_NM; EdCtlrIp->Text = AObj->CCTV_CTLR_IP; Se_CCTV_CTLR_PORT->Value = AObj->CCTV_CTLR_PORT; EdTypeNm->Text = AObj->CCTV_TYPE_NM; Ed_STRM_SESN_NM->Text = AObj->STRM_SESN_NM; Ed_STRM_RTSP_ADDR->Text = AObj->STRM_RTSP_ADDR; Ed_STRM_RTMP_ADDR->Text = AObj->STRM_RTMP_ADDR; Ed_STRM_HTTP_ADDR->Text = AObj->STRM_HTTP_ADDR; Ed_INTR_RTMP_ADDR->Text = AObj->STRM_STOR_ADDR; EdCmraId->Text = AObj->CMRA_ID; EdCmraPswd->Text = AObj->CMRA_PSWD; BtnWebCamUrl->Enabled = false; PnlCamConrtol->Enabled = false; FStrmHttp = "http://" + FSelCtlr->CCTV_CTLR_IP; int cctvType = AObj->CCTV_TYPE.Trim().ToIntDef(0); switch(cctvType) { case 1: // ´Ù±â´É Á¦¾î±â break; case 2: // Truen BtnWebCamUrl->Enabled = true; PnlCamConrtol->Enabled = true; FStrmHttp = "http://" + FSelCtlr->CCTV_CTLR_IP; if (FSelCtlr->CCTV_CTLR_PORT != 0 && FSelCtlr->CCTV_CTLR_PORT != 80) { FStrmHttp = FStrmHttp + ":" + String(FSelCtlr->CCTV_CTLR_PORT); } break; case 3: // Pelco break; case 4: // Á¦³ë½Ã½º break; default: break; } try { OpenRtsp(); InitPreset(); } catch(Exception &e) { } } //--------------------------------------------------------------------------- bool __fastcall TFrmCctvCamCtrl::OpenRtsp() { if (!FSelCtlr) return false; try { reMsg->Lines->Clear(); CloseRtsp(); FStrmAddr = FSelCtlr->STRM_SESN_NM.Trim(); if (FStrmAddr != "") { FFPlayer1->AspectRatio = -1;//ChkFullScreen->Checked ? -1 : 0; FFPlayer1->TryOpen(FStrmAddr, PnlCamera->Handle); FStrmUser = FSelCtlr->CMRA_ID; FStrmPswd = FSelCtlr->CMRA_PSWD; FStrmPlay = true; } } catch(Exception &e) { } return true; } //--------------------------------------------------------------------------- void __fastcall TFrmCctvCamCtrl::CloseRtsp() { if (!FStrmPlay) return; try { if (FFPlayer1->ScreenHandle != NULL) { FFPlayer1->Stop(true); PostMessage(FFPlayer1->ScreenHandle, CM_INVALIDATE, 0, 0); UpdateWindow(FFPlayer1->ScreenHandle); //FFPlayer1->ScreenHandle = NULL; } } catch(Exception &e) { } PnlCamConrtol->Enabled = false; FStrmPlay = false; } //--------------------------------------------------------------------------- void __fastcall TFrmCctvCamCtrl::ClearCheckList() { } //--------------------------------------------------------------------------- void __fastcall TFrmCctvCamCtrl::FRAMECctvStateList1TvListCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo, TMouseButton AButton, TShiftState AShift, bool &AHandled) { if (!ACellViewInfo) return; ClearCheckList(); TcxGridBandedTableView *TvList = FRAMECctvStateList1->TvList; TcxDataController *pGDC = TvList->DataController; int nSelIdx = CMM_GetRecordIndex(TvList); if (nSelIdx < 0) return; pGDC->Values[nSelIdx][FRAMECctvStateList1->ColumnSel->Index] = true; int nMemPtr = (int)pGDC->Values[nSelIdx][FRAMECctvStateList1->Col99->Index]; FSelCtlr = (TCctvCtlr*)nMemPtr; if (!FSelCtlr) return; DisplayInfo(FSelCtlr); } //--------------------------------------------------------------------------- void __fastcall TFrmCctvCamCtrl::FRAMECctvStateList1TvList2CellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo, TMouseButton AButton, TShiftState AShift, bool &AHandled) { if (!ACellViewInfo) return; ClearCheckList(); TcxGridBandedTableView *TvList = FRAMECctvStateList1->TvList2; TcxDataController *pGDC = TvList->DataController; int nSelIdx = CMM_GetRecordIndex(TvList); if (nSelIdx < 0) return; pGDC->Values[nSelIdx][FRAMECctvStateList1->ColumnSel2->Index] = true; int nMemPtr = (int)pGDC->Values[nSelIdx][FRAMECctvStateList1->Column99->Index]; FSelCtlr = (TCctvCtlr*)nMemPtr; if (!FSelCtlr) return; DisplayInfo(FSelCtlr); } //--------------------------------------------------------------------------- int __fastcall TFrmCctvCamCtrl::GetSelListItems(bool ACommCheck/*=true*/) { return 0; } //--------------------------------------------------------------------------- void __fastcall TFrmCctvCamCtrl::BtnWebCamUrlClick(TObject *Sender) { if (FSelCtlr) { if (FStrmHttp != "") { ShellExecute(NULL, NULL, FStrmHttp.c_str(), NULL, NULL, 0); } } } //--------------------------------------------------------------------------- void __fastcall TFrmCctvCamCtrl::UpdatePingList() { } //--------------------------------------------------------------------------- void __fastcall TFrmCctvCamCtrl::RefreshPingList(bool AInit/*=false*/) { } //--------------------------------------------------------------------------- void __fastcall TFrmCctvCamCtrl::PingNetwork(String AIp, int APort) { } //--------------------------------------------------------------------------- void __fastcall TFrmCctvCamCtrl::BtnSaveImgFileClick(TObject *Sender) { #if 0 String sSaveFileName; if (!FSelCtlr || XNVTViewerCtrl1->OCXState == GRAPH_NONE) { String sMsg = cxLabel1->Caption; Application->MessageBox(sMsg.c_str(), L"Save Snap Shot", MB_OK|MB_ICONERROR|MB_APPLMODAL); return; } sSaveFileName.printf(L"%s\\%d_%s.bmp", g_sTempDir.c_str(), FSelCtlr->WCAM_CTLR_NMBR, Now().FormatString("yyyymmddhhnnss").c_str()); if (XNVTViewerCtrl1->FileSnapShot(sSaveFileName.c_str())) { Application->MessageBox(sSaveFileName.c_str(), L"Save Snap Shot Success", MB_OK|MB_ICONINFORMATION|MB_APPLMODAL); } else { Application->MessageBox(cxLabel2->Caption.c_str(), L"Save Snap Shot Fail", MB_OK|MB_ICONERROR|MB_APPLMODAL); } #endif } //--------------------------------------------------------------------------- void __fastcall TFrmCctvCamCtrl::ClearPreset() { } //--------------------------------------------------------------------------- void __fastcall TFrmCctvCamCtrl::InitPreset() { } //--------------------------------------------------------------------------- void __fastcall TFrmCctvCamCtrl::reMsgDblClick(TObject *Sender) { reMsg->Lines->Clear(); } //--------------------------------------------------------------------------- void __fastcall TFrmCctvCamCtrl::FFPlayer1State(TObject *Sender, TPlayState APlayState) { switch(APlayState) { case Ffbasecomponent::psPlay: reMsg->Lines->Add("Play..."); PnlCamConrtol->Enabled = true; break; case Ffbasecomponent::psResume: reMsg->Lines->Add("Resume."); break; case Ffbasecomponent::psPause: reMsg->Lines->Add("Pause.."); break; case Ffbasecomponent::psStep: reMsg->Lines->Add("Step..."); break; case Ffbasecomponent::psStop: if (FFPlayer1->ScreenHandle != NULL) { PostMessage(FFPlayer1->ScreenHandle, CM_INVALIDATE, 0, 0); UpdateWindow(FFPlayer1->ScreenHandle); //FFPlayer1->ScreenHandle = NULL; } reMsg->Lines->Add("Stop..."); break; case Ffbasecomponent::psEnd: { FFPlayer1->Stop(true); PostMessage(FFPlayer1->ScreenHandle, CM_INVALIDATE, 0, 0); UpdateWindow(FFPlayer1->ScreenHandle); //FFPlayer1->ScreenHandle = NULL; FStrmPlay = false; } reMsg->Lines->Add("End..."); break; } } //--------------------------------------------------------------------------- void __fastcall TFrmCctvCamCtrl::BtnStatRefreshClick(TObject *Sender) { TmrRefresh->Enabled = false; BtnStatRefresh->Enabled = false; if (!DMDb->Connect()) { if (g_AppCfg.sLang != "kr") { Application->MessageBox(L"Database connection failed.\r\n\r\nPlease restart the program.", L"Database connection error !!!", MB_OK|MB_ICONERROR); } else { Application->MessageBox(L"µ¥ÀÌÅͺ£À̽º ¿¬°á¿¡ ½ÇÆÐÇÏ¿´½À´Ï´Ù.\r\n\r\nÇÁ·Î±×·¥À» ´Ù½Ã ½ÃÀÛÇϽʽÿä.", L"µ¥ÀÌÅͺ£À̽º ¿¬°á ¿À·ù!!!", MB_OK|MB_ICONERROR); } BtnStatRefresh->Enabled = true; TmrRefresh->Enabled = true; return; } CctvCtlrManager->LoadStatusFromDb(DMDb->GetConnection()); FRAMECctvStateList1->RefreshStatus(); RefreshPingList(); DMDb->Close();; BtnStatRefresh->Enabled = true; TmrRefresh->Enabled = true; } //--------------------------------------------------------------------------- void __fastcall TFrmCctvCamCtrl::TmrRefreshTimer(TObject *Sender) { BtnStatRefreshClick(NULL); } //--------------------------------------------------------------------------- void __fastcall TFrmCctvCamCtrl::IdHTTP1Authorization(TObject *Sender, TIdAuthentication *Authentication, bool &Handled) { #if 1 IdHTTP1->Request->Username = FStrmUser; IdHTTP1->Request->Password = FStrmPswd; #endif Authentication->Username = FStrmUser; Authentication->Password = FStrmPswd; TIdDigestAuthentication *pAuth1 = (TIdDigestAuthentication*)IdHTTP1->Request->Authentication; TIdDigestAuthentication *pAuth2 = (TIdDigestAuthentication*)Authentication; pAuth1->Uri = IdHTTP1->Request->URL; pAuth2->Method = "GET"; Handled = true; } //--------------------------------------------------------------------------- void __fastcall TFrmCctvCamCtrl::IdHTTP2Authorization(TObject *Sender, TIdAuthentication *Authentication, bool &Handled) { // For ZenoSys } //--------------------------------------------------------------------------- //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void __fastcall TFrmCctvCamCtrl::Ptz_BtnUpMouseDown(int command, String ptzSpeed) { // not apply } //--------------------------------------------------------------------------- void __fastcall TFrmCctvCamCtrl::Ptz_BtnUpMouseUp(int command, String ptzSpeed) { // not apply } //--------------------------------------------------------------------------- //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void __fastcall TFrmCctvCamCtrl::Get_Request(String apiUrl) { IdHTTP1->HTTPOptions = IdHTTP1->HTTPOptions >> hoInProcessAuth; IdHTTP1->HTTPOptions = IdHTTP1->HTTPOptions << hoInProcessAuth; String sResult = IdHTTP1->Get(apiUrl); reMsg->Lines->Add(sResult.Trim()); IdHTTP1->Disconnect(); } //--------------------------------------------------------------------------- //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void __fastcall TFrmCctvCamCtrl::Truen_BtnUpMouseDown(int command, String ptzSpeed) { String sCmdHtml = ""; // URL ="/httpapx/SendPTZ?action=sendptz&PTZ_CHANNEL=" + ch + "&PTZ_MOVE="; switch(command) { case 0: sCmdHtml.printf(L"%s/httpapi/SendPTZ?action=sendptz&PTZ_CHANNEL=1&PTZ_MOVE=home,%s&PTZ_TIMEOUT=5000", FStrmHttp.c_str(), ptzSpeed.c_str()); break; // HOME case 1: sCmdHtml.printf(L"%s/httpapi/SendPTZ?action=sendptz&PTZ_CHANNEL=1&PTZ_MOVE=up,%s&PTZ_TIMEOUT=5000", FStrmHttp.c_str(), ptzSpeed.c_str()); break; // Tilt Up case 2: sCmdHtml.printf(L"%s/httpapi/SendPTZ?action=sendptz&PTZ_CHANNEL=1&PTZ_MOVE=down,%s&PTZ_TIMEOUT=5000", FStrmHttp.c_str(), ptzSpeed.c_str()); break; // Tilt Down case 3: sCmdHtml.printf(L"%s/httpapi/SendPTZ?action=sendptz&PTZ_CHANNEL=1&PTZ_MOVE=left,%s&PTZ_TIMEOUT=5000", FStrmHttp.c_str(), ptzSpeed.c_str()); break; // Pan left case 4: sCmdHtml.printf(L"%s/httpapi/SendPTZ?action=sendptz&PTZ_CHANNEL=1&PTZ_MOVE=right,%s&PTZ_TIMEOUT=5000", FStrmHttp.c_str(), ptzSpeed.c_str()); break; // Pan right case 9: sCmdHtml.printf(L"%s/httpapi/SendPTZ?action=sendptz&PTZ_CHANNEL=1&PTZ_MOVE=zoomin,%s&PTZ_TIMEOUT=5000", FStrmHttp.c_str(), ptzSpeed.c_str()); break; // Zoom In case 10: sCmdHtml.printf(L"%s/httpapi/SendPTZ?action=sendptz&PTZ_CHANNEL=1&PTZ_MOVE=zoomout,%s&PTZ_TIMEOUT=5000", FStrmHttp.c_str(), ptzSpeed.c_str()); break; // Zoom Out case 12: sCmdHtml.printf(L"%s/httpapi/SendPTZ?action=sendptz&PTZ_CHANNEL=1&PTZ_MOVE=focusnear,%s&PTZ_TIMEOUT=5000", FStrmHttp.c_str(), ptzSpeed.c_str()); break; // Focus In case 13: sCmdHtml.printf(L"%s/httpapi/SendPTZ?action=sendptz&PTZ_CHANNEL=1&PTZ_MOVE=focusfar,%s&PTZ_TIMEOUT=5000", FStrmHttp.c_str(), ptzSpeed.c_str()); break; // Focus Out default: return; } Get_Request(sCmdHtml); } //--------------------------------------------------------------------------- void __fastcall TFrmCctvCamCtrl::Truen_BtnUpMouseUp(int command, String ptzSpeed) { String sCmdHtml = ""; // url ="/httpapx/SendPTZ?action=sendptz&PTZ_CHANNEL=" + ch + "&PTZ_MOVE="; sCmdHtml.printf(L"%s/httpapi/SendPTZ?action=sendptz&PTZ_CHANNEL=1&PTZ_MOVE=stop,%s&PTZ_TIMEOUT=5000", FStrmHttp.c_str(), ptzSpeed.c_str()); // stop Get_Request(sCmdHtml); } //--------------------------------------------------------------------------- //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void __fastcall TFrmCctvCamCtrl::Pelco_BtnUpMouseDown(int command, String ptzSpeed) { // not apply } //--------------------------------------------------------------------------- void __fastcall TFrmCctvCamCtrl::Pelco_BtnUpMouseUp(int command, String ptzSpeed) { // not apply } //--------------------------------------------------------------------------- //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void __fastcall TFrmCctvCamCtrl::ZenoSys_BtnUpMouseDown(int command, String ptzSpeed) { // command start TBytes cmd; cmd.Length = 8; cmd[0] = 0x10; cmd[1] = 0xFF; cmd[2] = 0x01; cmd[3] = 0x00; cmd[4] = 0x08; cmd[5] = 0x00; cmd[6] = 0x28; cmd[7] = 0x31; switch(command) { case 0: return; // HOME case 1: cmd[4] = 0x08; break; // Tilt Up case 2: cmd[4] = 0x10; break; // Tilt Down case 3: cmd[4] = 0x04; break; // Pan left case 4: cmd[4] = 0x02; break; // Pan right case 9: cmd[0] = 0x50; cmd[3] = 0x00; cmd[4] = 0x20; cmd[6] = 0xFF; break; // Zoom In case 10: cmd[0] = 0x50; cmd[3] = 0x00; cmd[4] = 0x08; cmd[6] = 0xFF; break; // Zoom Out case 12: cmd[0] = 0x50; cmd[3] = 0x00; cmd[4] = 0x80; cmd[6] = 0xFF; break; // Focus In case 13: cmd[0] = 0x50; cmd[3] = 0x01; cmd[4] = 0x00; cmd[6] = 0xFF; break; // Focus Out default: return; } ZenoSys_Request(cmd); } //--------------------------------------------------------------------------- void __fastcall TFrmCctvCamCtrl::ZenoSys_BtnUpMouseUp(int command, String ptzSpeed) { // command stop TBytes cmd; cmd.Length = 8; cmd[0] = 0x10; cmd[1] = 0xFF; cmd[2] = 0x01; cmd[3] = 0x00; cmd[4] = 0x00; cmd[5] = 0x00; cmd[6] = 0x00; cmd[7] = 0x01; switch(command) { case 0: return; // HOME case 1: // Tilt Up case 2: // Tilt Down case 3: // Pan left case 4: // Pan right break; case 9: // Zoom In case 10: // Zoom Out cmd[0] = 0x50; cmd[6] = 0xFF; break; case 12: // Focus In case 13: // Focus Out cmd[0] = 0x50; cmd[4] = 0x08; cmd[6] = 0xFF; cmd[7] = 0x31; break; default: return; } ZenoSys_Request(cmd); } //--------------------------------------------------------------------------- #include void __fastcall TFrmCctvCamCtrl::ZenoSys_Request(TBytes controlData) { String apiUrl = ""; apiUrl.printf(L"%s/cgi-bin/admin/uartctrl.cgi", FStrmHttp.c_str()); TIdEncoderMIME* encoder = new TIdEncoderMIME(NULL); TMemoryStream* requestStream = NULL; TStringStream* responseStream = NULL; try { try { AnsiString auth = encoder->EncodeString(FStrmUser + ":" + FStrmPswd); IdHTTP2->Request->Clear(); IdHTTP2->ReadTimeout = 5000; IdHTTP2->ConnectTimeout = 5000; IdHTTP2->AllowCookies = false; IdHTTP2->Request->CustomHeaders->Clear(); IdHTTP2->Request->CustomHeaders->Add("Authorization: Basic " + auth); IdHTTP2->Request->CustomHeaders->Add("Accept-Encoding: identity"); //IdHTTP2->Request->CustomHeaders->Add("Content-Length: " + String(controlData.Length)); IdHTTP2->Request->BasicAuthentication = false; IdHTTP2->Request->ContentType = "application/octet-stream"; IdHTTP2->Request->Accept = "text/html, */*"; IdHTTP2->Request->UserAgent = "Mozilla/3.0"; // ¿äû µ¥ÀÌÅÍ Áغñ requestStream = new TMemoryStream(); requestStream->WriteBuffer(&controlData[0], controlData.Length); // ÀÀ´ä ¹ÞÀ» ½ºÆ®¸² responseStream = new TStringStream(); // POST ¿äû IdHTTP2->Post(apiUrl, requestStream, responseStream); } catch (const Exception& e) { reMsg->Lines->Add(e.Message.Trim()); } } __finally { if (encoder != NULL) delete encoder; if (requestStream != NULL) delete requestStream; if (responseStream != NULL) delete responseStream; IdHTTP2->Disconnect(); } #if 0 IdHTTP1->HTTPOptions = IdHTTP1->HTTPOptions >> hoInProcessAuth; IdHTTP1->HTTPOptions = IdHTTP1->HTTPOptions << hoInProcessAuth; String sResult = IdHTTP1->Get(sCmdHtml); reMsg->Lines->Add(sResult.Trim()); IdHTTP1->Disconnect(); #endif } //--------------------------------------------------------------------------- //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void __fastcall TFrmCctvCamCtrl::BtnUpMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { // PTZ Control Start if (!FStrmPlay) return; if (!FSelCtlr) return; if (FSelCtlr->CCTV_CTLR_IP.Trim() == "") return; String sPTZSpeed = String(PTZSpeed->Position); TImageBtn *pBtn = (TImageBtn*)Sender; try { int cctvType = FSelCtlr->CCTV_TYPE.Trim().ToIntDef(0); switch(cctvType) { case 1: // ´Ù±â´É Á¦¾î±â Ptz_BtnUpMouseDown(pBtn->Tag, sPTZSpeed); break; case 2: // Truen Truen_BtnUpMouseDown(pBtn->Tag, sPTZSpeed); break; case 3: // Pelco Pelco_BtnUpMouseDown(pBtn->Tag, sPTZSpeed); break; case 4: // Á¦³ë½Ã½º ZenoSys_BtnUpMouseDown(pBtn->Tag, sPTZSpeed); break; default: break; } } catch(...) {} } //--------------------------------------------------------------------------- void __fastcall TFrmCctvCamCtrl::BtnUpMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { // PTZ Control Stop if (!FStrmPlay) return; if (!FSelCtlr) return; if (FSelCtlr->CCTV_CTLR_IP.Trim() == "") return; String sPTZSpeed = String(PTZSpeed->Position); TImageBtn *pBtn = (TImageBtn*)Sender; try { int cctvType = FSelCtlr->CCTV_TYPE.Trim().ToIntDef(0); switch(cctvType) { case 1: // ´Ù±â´É Á¦¾î±â Ptz_BtnUpMouseUp(pBtn->Tag, sPTZSpeed); break; case 2: // Truen // Truen Truen_BtnUpMouseUp(pBtn->Tag, sPTZSpeed); break; case 3: // Pelco Pelco_BtnUpMouseUp(pBtn->Tag, sPTZSpeed); break; case 4: // Á¦³ë½Ã½º ZenoSys_BtnUpMouseUp(pBtn->Tag, sPTZSpeed); break; default: break; } } catch(...) {} } //--------------------------------------------------------------------------- void __fastcall TFrmCctvCamCtrl::EdPresetNameKeyPress(TObject *Sender, wchar_t &Key) { if (Key == VK_SPACE) { Key = 0; } } //---------------------------------------------------------------------------