FrmWebCamCtrlF.cpp 42 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #include "AppGlobalF.h"
  4. #include "ITSSkinF.h"
  5. #include "ITSUtilF.h"
  6. #include "ITSLangTransF.h"
  7. #include "FrmInitializeF.h"
  8. #include "DMDbF.h"
  9. #pragma hdrstop
  10. #include "FrmWebCamCtrlF.h"
  11. //---------------------------------------------------------------------------
  12. #pragma package(smart_init)
  13. #pragma link "cxButtons"
  14. #pragma link "cxCalc"
  15. #pragma link "cxCheckBox"
  16. #pragma link "cxClasses"
  17. #pragma link "cxContainer"
  18. #pragma link "cxControls"
  19. #pragma link "cxCustomData"
  20. #pragma link "cxData"
  21. #pragma link "cxDataStorage"
  22. #pragma link "cxEdit"
  23. #pragma link "cxFilter"
  24. #pragma link "cxGraphics"
  25. #pragma link "cxGrid"
  26. #pragma link "cxGridBandedTableView"
  27. #pragma link "cxGridCustomTableView"
  28. #pragma link "cxGridCustomView"
  29. #pragma link "cxGridLevel"
  30. #pragma link "cxGridTableView"
  31. #pragma link "cxGroupBox"
  32. #pragma link "cxLabel"
  33. #pragma link "cxLookAndFeelPainters"
  34. #pragma link "cxLookAndFeels"
  35. #pragma link "cxMaskEdit"
  36. #pragma link "cxPC"
  37. #pragma link "cxPCdxBarPopupMenu"
  38. #pragma link "cxSpinEdit"
  39. #pragma link "cxStyles"
  40. #pragma link "cxTextEdit"
  41. #pragma link "dxSkinBlue"
  42. #pragma link "dxSkinsCore"
  43. #pragma link "dxSkinscxPCPainter"
  44. #pragma link "FFBaseComponent"
  45. #pragma link "FFBasePlay"
  46. #pragma link "FFPlay"
  47. #pragma link "FRAME_WCamStateListF"
  48. #pragma link "IdBaseComponent"
  49. #pragma link "IdComponent"
  50. #pragma link "IdIcmpClient"
  51. #pragma link "IdRawBase"
  52. #pragma link "IdRawClient"
  53. #pragma link "ImageBtn"
  54. #pragma link "dxSkinBlack"
  55. #pragma link "dxSkinsForm"
  56. #pragma link "dxSkinMcSkin"
  57. #pragma link "IdHTTP"
  58. #pragma link "IdTCPClient"
  59. #pragma link "IdTCPConnection"
  60. #pragma link "AcesTechXPlayer2Lib_OCX"
  61. #pragma resource "*.dfm"
  62. TFrmWebCamCtrl *FrmWebCamCtrl = NULL;
  63. //{* Information Bar *}
  64. #define CAP_CAMERA_NAME 0x01
  65. #define CAP_TIME 0x02
  66. #define CAP_CHANNEL 0x04
  67. #define CAP_SIZE 0x08
  68. #define CAP_EVENT 0x10
  69. #define CAP_FPSCHANGED 0x20
  70. //{* Pan/tilt/Zoom and Transparent controls *}
  71. #define CTL_FOCUS_CONT 0x2001
  72. #define CTL_PTZ_CONT 0x2002
  73. #define CTL_TRANSPARENT 0x7000
  74. #define CTL_TRANSPARENT_RS232 0x7001
  75. //{* OCXState for NVSMPEG4OCX *}
  76. #define GRAPH_NONE 0x00000000
  77. #define GRAPH_PREVIEW 0x00000001
  78. #define GRAPH_CAPTURE 0x00000002
  79. #define GRAPH_PREVIEWCAPTURE 0x00000003
  80. #define GRAPH_AUDIO_LISTEN 0x00000100
  81. #define GRAPH_AUDIO_CAPTURE 0x00000200
  82. #define GRAPH_AUDIO_LISTENCAPTURE 0x00000400
  83. #define GRAPH_STATE_RUNNING 0x80000000
  84. #define SB_PAN_LEFT 0x000000C4
  85. #define SB_PAN_RIGHT 0x0000003C
  86. #define SB_TILT_UP 0x00003C00
  87. #define SB_TILT_DOWN 0x0000C400
  88. #define SB_ZOOM_IN 0x003C0000
  89. #define SB_ZOOM_OUT 0x00C40000
  90. #define SB_FOCUS_IN 0x3C
  91. #define SB_FOCUS_OUT 0xC4
  92. enum { E_MJPG=0, E_MP4S, E_DX50, E_MPEG2, E_MPEG1, E_H264 };
  93. 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 };
  94. 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 };
  95. #define PRESET_SET 0x1020 // Unsigned 1 byte
  96. #define PRESET_MOVE 0x1021 // Unsigned 1 byte
  97. #define PRESET_CLEAR 0x1022 // Unsigned 1 byte
  98. #define LICENSE_KEY "FSXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX"
  99. #define FFPLAY 0
  100. #define ACES 1
  101. //---------------------------------------------------------------------------
  102. __fastcall TFrmWebCamCtrl::TFrmWebCamCtrl(TComponent* Owner)
  103. : TForm(Owner)
  104. {
  105. //::CoInitialize(NULL);
  106. LangTrans->Translate(this, ITSDb_GetConnection());
  107. ITSSkin_Load(this);
  108. LoadLocalSkin();
  109. CMM_LoadForm(g_sFormsDir, this);
  110. FSelCtlr = NULL;
  111. FRAMEWCamStateList1->PnlTop->Visible = false;
  112. FRAMEWCamStateList1->PnlBottom->Visible = false;
  113. FRAMEWCamStateList1->TvList->OptionsView->Footer = false;
  114. //FRAMEWCamStateList1->Col04->Visible = false;
  115. FRAMEWCamStateList1->Col05->Visible = false;
  116. FRAMEWCamStateList1->Col06->Visible = true;
  117. FRAMEWCamStateList1->ColumnSel->Visible = false;
  118. PgControl->ActivePageIndex = 0;
  119. FSelIds = new TStringList();
  120. FTitle = Caption;
  121. //TabPreset->Visible = false;
  122. //TabPreset->TabVisible = false;
  123. FStrmPlay = false;
  124. FStrmHandle = 0;
  125. #if FFPLAY
  126. AcesTechXPlayer21->Visible = false;
  127. String sAVILibDir = g_sAppDir + "LibAV";
  128. FFPlayer1->SetLicenseKey(LICENSE_KEY);
  129. FFPlayer1->DisableFPUExceptions();
  130. if (!FFPlayer1->LoadAVLib(sAVILibDir))
  131. {
  132. reMsg->Lines->Add("영상표출 라이브러리 초기화 실패.");
  133. #if 0
  134. if (g_AppCfg.sLang != "kr") Application->MessageBox(L"Stream display library load failed.", L"Stream display fail", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  135. else Application->MessageBox(L"영상표출 라이브러리를 로드하지 못하였습니다.", L"영상표출 오류", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  136. #endif
  137. }
  138. #endif
  139. PgCam->Properties->HideTabs = true;
  140. PnlCamera->ParentColor = false;
  141. FTmrShow = true;
  142. }
  143. //---------------------------------------------------------------------------
  144. void __fastcall TFrmWebCamCtrl::CommClose()
  145. {
  146. try
  147. {
  148. SAFE_DELETE(FSelIds);
  149. CMM_SaveForm(g_sFormsDir, this);
  150. CloseRtsp();
  151. //::CoUninitialize();
  152. }
  153. catch(...)
  154. {
  155. }
  156. }
  157. //---------------------------------------------------------------------------
  158. void __fastcall TFrmWebCamCtrl::FormShow(TObject *Sender)
  159. {
  160. Refresh();
  161. TmrShow->Enabled = FTmrShow;
  162. }
  163. //---------------------------------------------------------------------------
  164. void __fastcall TFrmWebCamCtrl::FormActivate(TObject *Sender)
  165. {
  166. ActivateForm(true);
  167. }
  168. //---------------------------------------------------------------------------
  169. void __fastcall TFrmWebCamCtrl::FormDeactivate(TObject *Sender)
  170. {
  171. ActivateForm(false);
  172. }
  173. //---------------------------------------------------------------------------
  174. void __fastcall TFrmWebCamCtrl::LoadLocalSkin()
  175. {
  176. PnlCamera->ParentColor = false;
  177. PnlCamera->Color = clBlack;
  178. Refresh();
  179. }
  180. //---------------------------------------------------------------------------
  181. void __fastcall TFrmWebCamCtrl::TmrShowTimer(TObject *Sender)
  182. {
  183. TmrShow->Enabled = false;
  184. if (!WCamCtlrManager)
  185. {
  186. WCamCtlrManager = new TWCamCtlrManager();
  187. }
  188. FrmInitialize = new TFrmInitialize(this);
  189. FrmInitialize->ShowModal();
  190. FrmInitialize = NULL;
  191. FRAMEWCamStateList1->UpdateList();
  192. FRAMEWCamStateList1->CxList->Enabled = false;
  193. UpdatePingList();
  194. FRAMEWCamStateList1->CxList->Enabled = true;
  195. BtnStatRefresh->Enabled = true;
  196. TmrRefresh->Enabled = true;
  197. }
  198. //---------------------------------------------------------------------------
  199. void __fastcall TFrmWebCamCtrl::FormClose(TObject *Sender, TCloseAction &Action)
  200. {
  201. try {
  202. CommClose();
  203. FrmWebCamCtrl = NULL;
  204. Action = caFree;
  205. } catch(...) {}
  206. }
  207. //---------------------------------------------------------------------------
  208. void __fastcall TFrmWebCamCtrl::OnMainFormMessage(TMessage &Msg)
  209. {
  210. }
  211. //---------------------------------------------------------------------------
  212. void __fastcall TFrmWebCamCtrl::OnCctvStateRefreshMessage(TMessage &Msg)
  213. {
  214. FRAMEWCamStateList1->RefreshStatus();
  215. RefreshPingList();
  216. }
  217. //---------------------------------------------------------------------------
  218. void __fastcall TFrmWebCamCtrl::ActivateForm(bool AActivate)
  219. {
  220. if (AActivate) FRAMEWCamStateList1->RefreshStatus();
  221. }
  222. //---------------------------------------------------------------------------
  223. void __fastcall TFrmWebCamCtrl::DisplayInfo()
  224. {
  225. ClearPreset();
  226. FSelCtlr = NULL;
  227. PnlCctv->Caption = " " + lblSelCctv->Caption + " -";//" Select CCTV: -";
  228. TcxGridBandedTableView *TvList = FRAMEWCamStateList1->TvList;
  229. TcxDataController *pGDC = TvList->DataController;
  230. int nSelIdx = CMM_GetRecordIndex(TvList);
  231. if (nSelIdx < 0) return;
  232. String CTLR_NMBR = VarToStr(pGDC->Values[nSelIdx][FRAMEWCamStateList1->Col01->Index]);
  233. int nMemPtr = (int)pGDC->Values[nSelIdx][FRAMEWCamStateList1->Col99->Index];
  234. FSelCtlr = (TWCamCtlr*)nMemPtr;
  235. if (!FSelCtlr) return;
  236. PnlCctv->Caption = " " + lblSelCctv->Caption + " [" + FSelCtlr->WCAM_CTLR_ID + "] " + FSelCtlr->WCAM_NM;
  237. PnlCamConrtol->Enabled = false;
  238. PnlPreset->Enabled = false;
  239. try
  240. {
  241. OpenRtsp();
  242. InitPreset();
  243. //PnlCamConrtol->Enabled = true;
  244. //PnlPreset->Enabled = true;
  245. #if ACES
  246. if (FSelCtlr->STATE.Comm != (BYTE)wcam_normal)
  247. {
  248. PnlCamConrtol->Enabled = false;
  249. PnlPreset->Enabled = false;
  250. }
  251. #endif
  252. }
  253. catch(Exception &e)
  254. {
  255. }
  256. BtnWebCamUrl->Enabled = true;
  257. }
  258. //---------------------------------------------------------------------------
  259. bool __fastcall TFrmWebCamCtrl::OpenRtsp()
  260. {
  261. if (!FSelCtlr) return false;
  262. try
  263. {
  264. reMsg->Lines->Clear();
  265. CloseRtsp();
  266. #if 1
  267. FStrmAddr = FSelCtlr->FULL_STRM_ADDR.Trim();
  268. if (FStrmAddr == "") FStrmAddr = FSelCtlr->STRM_SESN_NM.Trim();
  269. #else
  270. FStrmAddr = FSelCtlr->STRM_SESN_NM.Trim();
  271. #endif
  272. if (FStrmAddr != "")
  273. {
  274. #if FFPLAY
  275. FFPlayer1->AspectRatio = -1;//ChkFullScreen->Checked ? -1 : 0;
  276. FFPlayer1->TryOpen(FStrmAddr, PnlCamera->Handle);
  277. #endif
  278. #if ACES
  279. AcesTechXPlayer21->URL = FStrmAddr;
  280. FStrmHandle = AcesTechXPlayer21->ConnectAsync();
  281. if (FStrmHandle > 0)
  282. {
  283. PnlCamConrtol->Enabled = true;
  284. PnlPreset->Enabled = true;
  285. }
  286. #endif
  287. FStrmUser = FSelCtlr->CMRA_ID;
  288. FStrmPswd = FSelCtlr->CMRA_PSWD;
  289. FStrmHttp = "http://" + FSelCtlr->WCAM_CTLR_IP;
  290. FStrmPlay = true;
  291. }
  292. }
  293. catch(Exception &e)
  294. {
  295. }
  296. return true;
  297. }
  298. //---------------------------------------------------------------------------
  299. void __fastcall TFrmWebCamCtrl::CloseRtsp()
  300. {
  301. if (!FStrmPlay) return;
  302. try
  303. {
  304. #if FFPLAY
  305. if (FFPlayer1->ScreenHandle != NULL)
  306. {
  307. FFPlayer1->Stop(true);
  308. PostMessage(FFPlayer1->ScreenHandle, CM_INVALIDATE, 0, 0);
  309. UpdateWindow(FFPlayer1->ScreenHandle);
  310. //FFPlayer1->ScreenHandle = NULL;
  311. }
  312. #endif
  313. #if ACES
  314. if (FStrmHandle > 0)
  315. {
  316. AcesTechXPlayer21->Close();
  317. }
  318. #endif
  319. }
  320. catch(Exception &e)
  321. {
  322. }
  323. PnlCamConrtol->Enabled = false;
  324. PnlPreset->Enabled = false;
  325. FStrmPlay = false;
  326. }
  327. //---------------------------------------------------------------------------
  328. void __fastcall TFrmWebCamCtrl::BtnAllSelectClick(TObject *Sender)
  329. {
  330. TcxButton *pBtn = (TcxButton*)Sender;
  331. if (PgControl->Properties->ActivePage != TabPing)
  332. CMM_CheckAllListItem(FRAMEWCamStateList1->TvList, FRAMEWCamStateList1->ColumnSel->Index, pBtn->Tag);
  333. else
  334. CMM_CheckAllListItem(TvPing, ColumnSel->Index, pBtn->Tag);
  335. }
  336. //---------------------------------------------------------------------------
  337. void __fastcall TFrmWebCamCtrl::ClearCheckList()
  338. {
  339. #if 0
  340. TcxGridBandedTableView *TvList = FRAMEWCamStateList1->TvList;
  341. TcxDataController *pGDC = TvList->DataController;
  342. try
  343. {
  344. TvList->BeginUpdate();
  345. pGDC->BeginUpdate();
  346. int nRows = pGDC->RecordCount;
  347. for (int ii = 0; ii < nRows; ii++)
  348. {
  349. pGDC->Values[ii][FRAMEWCamStateList1->ColumnSel->Index] = false;
  350. }
  351. }
  352. __finally
  353. {
  354. pGDC->EndUpdate();
  355. TvList->EndUpdate();
  356. }
  357. #endif
  358. }
  359. //---------------------------------------------------------------------------
  360. void __fastcall TFrmWebCamCtrl::FRAMEWCamStateList1TvListCellDblClick(TcxCustomGridTableView *Sender,
  361. TcxGridTableDataCellViewInfo *ACellViewInfo, TMouseButton AButton,
  362. TShiftState AShift, bool &AHandled)
  363. {
  364. if (!ACellViewInfo) return;
  365. ClearCheckList();
  366. TcxGridBandedTableView *TvList = FRAMEWCamStateList1->TvList;
  367. TcxDataController *pGDC = TvList->DataController;
  368. int nSelIdx = CMM_GetRecordIndex(TvList);
  369. if (nSelIdx < 0) return;
  370. pGDC->Values[nSelIdx][FRAMEWCamStateList1->ColumnSel->Index] = true;
  371. DisplayInfo();
  372. }
  373. //---------------------------------------------------------------------------
  374. int __fastcall TFrmWebCamCtrl::GetSelListItems(bool ACommCheck/*=true*/)
  375. {
  376. TcxGridBandedTableView *TvList = FRAMEWCamStateList1->TvList;
  377. TcxDataController *pGDC = TvList->DataController;
  378. FSelIds->Clear();
  379. try
  380. {
  381. bool bSelected;
  382. int nRows = TvList->ViewData->RecordCount;
  383. TvList->BeginUpdate();
  384. for (int ii = 0; ii < nRows; ii++)
  385. {
  386. TcxCustomGridRow* ARow = TvList->ViewData->Rows[ii];
  387. int nMemPtr = (int)ARow->Values[FRAMEWCamStateList1->Col99->Index];
  388. TWCamCtlr *pCctv = (TWCamCtlr*)nMemPtr;
  389. if (!pCctv) continue;
  390. bSelected = (bool)ARow->Values[FRAMEWCamStateList1->ColumnSel->Index];
  391. if (bSelected)
  392. {
  393. String CTLR_NMBR = ARow->Values[FRAMEWCamStateList1->Col01->Index];
  394. if (ACommCheck)
  395. {
  396. if (pCctv->STATE.Comm == wcam_normal)
  397. {
  398. FSelIds->Add(CTLR_NMBR);
  399. }
  400. }
  401. else
  402. {
  403. FSelIds->Add(CTLR_NMBR);
  404. }
  405. }
  406. }
  407. }
  408. __finally
  409. {
  410. TvList->EndUpdate();
  411. }
  412. return FSelIds->Count;
  413. }
  414. //---------------------------------------------------------------------------
  415. void __fastcall TFrmWebCamCtrl::BtnWebCamUrlClick(TObject *Sender)
  416. {
  417. if (FSelCtlr)
  418. {
  419. if (FSelCtlr->WCAM_CTLR_IP.Trim() != "")
  420. {
  421. String sUrl = "http://" + FSelCtlr->WCAM_CTLR_IP.Trim();
  422. ShellExecute(NULL, NULL, sUrl.c_str(), NULL, NULL, 0);
  423. }
  424. }
  425. }
  426. //---------------------------------------------------------------------------
  427. void __fastcall TFrmWebCamCtrl::PgControlPageChanging(TObject *Sender, TcxTabSheet *NewPage,
  428. bool &AllowChange)
  429. {
  430. if (NewPage == TabPing)
  431. {
  432. BtnAllSelect->Visible = false;
  433. BtnAllClear->Visible = false;
  434. BtnReverse->Visible = false;
  435. }
  436. else
  437. {
  438. #if 0
  439. if (BtnAllSelect->Visible == false) BtnAllSelect->Visible = true;;
  440. if (BtnAllClear->Visible == false) BtnAllClear->Visible = true;;
  441. if (BtnReverse->Visible == false) BtnReverse->Visible = true;;
  442. #endif
  443. }
  444. }
  445. //---------------------------------------------------------------------------
  446. void __fastcall TFrmWebCamCtrl::UpdatePingList()
  447. {
  448. CMM_ClearGridTableView(TvPing);
  449. int ii, jj;
  450. int nCols = 0;
  451. TcxDataController *pGDC = TvPing->DataController;
  452. WCamCtlrManager->FLists.Lock();
  453. try
  454. {
  455. int nRow;
  456. TvPing->BeginUpdate();
  457. pGDC->BeginUpdate();
  458. FOR_STL(TWCamCtlr*, pObj, WCamCtlrManager->FLists)
  459. {
  460. if (pObj->DEL_YN == "Y") continue;
  461. nRow = pGDC->AppendRecord();
  462. if (pObj->STATE.Comm == wcam_normal) pGDC->Values[nRow][ColumnSel->Index] = false;
  463. else pGDC->Values[nRow][ColumnSel->Index] = true;
  464. pGDC->Values[nRow][Col01->Index] = String(pObj->WCAM_CTLR_NMBR);
  465. pGDC->Values[nRow][Col02->Index] = pObj->WCAM_CTLR_ID;
  466. pGDC->Values[nRow][Col03->Index] = pObj->WCAM_NM;
  467. pGDC->Values[nRow][Col04->Index] = pObj->STATE.Comm == wcam_normal ? FrmLang->lblComm0->Caption : FrmLang->lblComm1->Caption;
  468. pGDC->Values[nRow][Col05->Index] = pObj->WCAM_CTLR_IP;
  469. pGDC->Values[nRow][Col06->Index] = "-";
  470. pGDC->Values[nRow][Col07->Index] = "-";
  471. pGDC->Values[nRow][Col08->Index] = "-";
  472. pGDC->Values[nRow][Col09->Index] = pObj->WCAM_CTLR_IP;
  473. pGDC->Values[nRow][Col10->Index] = "-";
  474. pGDC->Values[nRow][Col11->Index] = "-";
  475. pGDC->Values[nRow][Col12->Index] = "-";
  476. pGDC->Values[nRow][Col99->Index] = (int)pObj;
  477. }
  478. }
  479. __finally
  480. {
  481. WCamCtlrManager->FLists.UnLock();
  482. pGDC->EndUpdate();
  483. TvPing->EndUpdate();
  484. }
  485. }
  486. //---------------------------------------------------------------------------
  487. void __fastcall TFrmWebCamCtrl::RefreshPingList(bool AInit/*=false*/)
  488. {
  489. TcxDataController *pGDC = TvPing->DataController;
  490. try
  491. {
  492. TvPing->BeginUpdate();
  493. pGDC->BeginUpdate();
  494. int nRows = pGDC->RecordCount;
  495. for(int nRow = 0; nRow < nRows; nRow++)
  496. {
  497. int nMemPtr = TvPing->DataController->Values[nRow][Col99->Index];
  498. TWCamCtlr *pObj = (TWCamCtlr*)nMemPtr;
  499. if (!pObj) continue;
  500. if (AInit == false && PgControl->Properties->ActivePage != TabPing)
  501. {
  502. if (pObj->STATE.Comm == cctv_normal) pGDC->Values[nRow][ColumnSel->Index] = false;
  503. else pGDC->Values[nRow][ColumnSel->Index] = true;
  504. }
  505. if (AInit)
  506. {
  507. pGDC->Values[nRow][Col06->Index] = "-";
  508. pGDC->Values[nRow][Col07->Index] = "-";
  509. pGDC->Values[nRow][Col08->Index] = "-";
  510. pGDC->Values[nRow][Col10->Index] = "-";
  511. pGDC->Values[nRow][Col11->Index] = "-";
  512. pGDC->Values[nRow][Col12->Index] = "-";
  513. }
  514. pGDC->Values[nRow][Col04->Index] = pObj->STATE.Comm == wcam_normal ? FrmLang->lblComm0->Caption : FrmLang->lblComm1->Caption;
  515. }
  516. }
  517. __finally
  518. {
  519. pGDC->EndUpdate();
  520. TvPing->EndUpdate();
  521. }
  522. }
  523. //---------------------------------------------------------------------------
  524. void __fastcall TFrmWebCamCtrl::PingNetwork(String AIp, int APort)
  525. {
  526. try
  527. {
  528. IdIcmpClient1->Host = AIp;
  529. IdIcmpClient1->Port = EdPingPort->Value/*512*/;
  530. IdIcmpClient1->ReceiveTimeout = EdPingTimeout->Value;
  531. IdIcmpClient1->Ping(IdIcmpClient1->Host, IdIcmpClient1->Port);
  532. }
  533. catch (Exception &e)
  534. {
  535. Application->ShowException(&e);
  536. }
  537. catch(...)
  538. {
  539. ShowMessage("Ping error[Unknown]");
  540. }
  541. }
  542. //---------------------------------------------------------------------------
  543. void __fastcall TFrmWebCamCtrl::BtnNwkPingClick(TObject *Sender)
  544. {
  545. TWaitCursor waitCrs;
  546. TcxDataController *pGDC = TvPing->DataController;
  547. int nRows = pGDC->RecordCount;
  548. String sMsg;
  549. int nSelCnt = CMM_GetCheckCount(TvPing, ColumnSel->Index);
  550. if (0 == nSelCnt)
  551. {
  552. sMsg = cxLabel14->Caption;
  553. Application->MessageBox(sMsg.c_str(), L"Web Camera Network Ping Test", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  554. CxPing->SetFocus();
  555. return;
  556. }
  557. RefreshPingList(true);
  558. PnlPing->Enabled = false;
  559. String sSvrIp;
  560. int nSvrPort;
  561. bool bPing;
  562. for (int ii = 0; ii < nRows; ii++)
  563. {
  564. bPing = pGDC->Values[ii][ColumnSel->Index];
  565. if (!bPing) continue;
  566. //pGDC->Values[ii][ColPingMon->Index] = Now().FormatString("yyyy-mm-dd hh:mm:ss");
  567. FPingType = 1;
  568. sSvrIp = pGDC->Values[ii][Col05->Index];
  569. if (sSvrIp == NULL || sSvrIp.IsEmpty())
  570. {
  571. continue;
  572. }
  573. pGDC->Values[ii][Col06->Index] = "?";
  574. pGDC->Values[ii][Col07->Index] = "?";
  575. pGDC->Values[ii][Col08->Index] = "?";
  576. nSvrPort = 0;
  577. FPingTimeout = false;
  578. PingNetwork(sSvrIp.Trim(), nSvrPort);
  579. if (FPingTimeout)
  580. {
  581. pGDC->Values[ii][Col08->Index] = "Time out";
  582. }
  583. Application->ProcessMessages();
  584. FPingType = 2;
  585. sSvrIp = pGDC->Values[ii][Col09->Index];
  586. if (sSvrIp == NULL || sSvrIp.IsEmpty())
  587. {
  588. continue;
  589. }
  590. pGDC->Values[ii][Col10->Index] = "?";
  591. pGDC->Values[ii][Col11->Index] = "?";
  592. pGDC->Values[ii][Col12->Index] = "?";
  593. nSvrPort = 0;
  594. FPingTimeout = false;
  595. PingNetwork(sSvrIp.Trim(), nSvrPort);
  596. if (FPingTimeout)
  597. {
  598. pGDC->Values[ii][Col12->Index] = "Time out";
  599. }
  600. Application->ProcessMessages();
  601. }
  602. PnlPing->Enabled = true;
  603. }
  604. //---------------------------------------------------------------------------
  605. void __fastcall TFrmWebCamCtrl::BtnNwkPingClearClick(TObject *Sender)
  606. {
  607. RefreshPingList(true);
  608. }
  609. //---------------------------------------------------------------------------
  610. void __fastcall TFrmWebCamCtrl::Col04CustomDrawCell(TcxCustomGridTableView *Sender, TcxCanvas *ACanvas,
  611. TcxGridTableDataCellViewInfo *AViewInfo, bool &ADone)
  612. {
  613. try
  614. {
  615. TColor tColor;
  616. String sStatus = AViewInfo->GridRecord->DisplayTexts[AViewInfo->Item->Index];
  617. tColor = ACanvas->Brush->Color;
  618. if (sStatus.Pos("-")) tColor = clGray;
  619. else if (sStatus.Pos(FrmLang->lblComm1->Caption.Trim())) tColor = clRed;
  620. else tColor = clLime;
  621. ACanvas->SetBrushColor(tColor);
  622. ACanvas->Font->Color = clBlack;
  623. }
  624. catch(Exception &e)
  625. {
  626. }
  627. }
  628. //---------------------------------------------------------------------------
  629. void __fastcall TFrmWebCamCtrl::IdIcmpClient1Reply(TComponent *ASender, const TReplyStatus *AReplyStatus)
  630. {
  631. try
  632. {
  633. String sRcvIp = AReplyStatus->FromIpAddress;
  634. int nRcvPort= IdIcmpClient1->Port;
  635. if (rsTimeOut == AReplyStatus->ReplyStatusType || sRcvIp == "0.0.0.0")
  636. {
  637. FPingTimeout = true;
  638. return;
  639. }
  640. TcxDataController *pGDC = TvPing->DataController;
  641. int nRows = pGDC->RecordCount;
  642. String sSvrIp;
  643. for (int ii = 0; ii < nRows; ii++)
  644. {
  645. if (FPingType == 1)
  646. sSvrIp = pGDC->Values[ii][Col05->Index];
  647. else
  648. sSvrIp = pGDC->Values[ii][Col09->Index];
  649. int nSvrPort = 0;
  650. if (sSvrIp.Trim() == sRcvIp && nRcvPort == nSvrPort)
  651. {
  652. if (FPingType == 1)
  653. {
  654. if (AReplyStatus->MsRoundTripTime > 100)
  655. {
  656. pGDC->Values[ii][Col08->Index] = "Delayed";
  657. }
  658. else
  659. {
  660. pGDC->Values[ii][Col08->Index] = "Normal";
  661. }
  662. pGDC->Values[ii][Col06->Index] = String(AReplyStatus->MsRoundTripTime) + " ";
  663. pGDC->Values[ii][Col07->Index] = String(AReplyStatus->TimeToLive) + " ";
  664. }
  665. else
  666. {
  667. if (AReplyStatus->MsRoundTripTime > 100)
  668. {
  669. pGDC->Values[ii][Col12->Index] = "Delayed";
  670. }
  671. else
  672. {
  673. pGDC->Values[ii][Col12->Index] = "Normal";
  674. }
  675. pGDC->Values[ii][Col10->Index] = String(AReplyStatus->MsRoundTripTime) + " ";
  676. pGDC->Values[ii][Col11->Index] = String(AReplyStatus->TimeToLive) + " ";
  677. }
  678. break;
  679. }
  680. }
  681. }
  682. catch(Exception &e)
  683. {
  684. }
  685. }
  686. //---------------------------------------------------------------------------
  687. void __fastcall TFrmWebCamCtrl::Col08CustomDrawCell(TcxCustomGridTableView *Sender, TcxCanvas *ACanvas,
  688. TcxGridTableDataCellViewInfo *AViewInfo, bool &ADone)
  689. {
  690. try
  691. {
  692. int iIndex = AViewInfo->Item->Index;
  693. ACanvas->Canvas->Brush->Style = bsSolid;
  694. String val = AViewInfo->GridRecord->DisplayTexts[iIndex];
  695. ACanvas->Canvas->Font->Color = clBlack;
  696. if (val == "Normal") ACanvas->Canvas->Brush->Color = clLime;
  697. else if (val == "Delayed") ACanvas->Canvas->Brush->Color = clRed;
  698. else if (val == "Time out") ACanvas->Canvas->Brush->Color = clRed;
  699. else ACanvas->Canvas->Brush->Color = clSilver;
  700. } catch(...) {}
  701. }
  702. //---------------------------------------------------------------------------
  703. void __fastcall TFrmWebCamCtrl::TvPingCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo,
  704. TMouseButton AButton, TShiftState AShift,
  705. bool &AHandled)
  706. {
  707. if (!ACellViewInfo) return;
  708. TcxGridDataController *pGDC = TvPing->DataController;
  709. int nRow = pGDC->FocusedRecordIndex;
  710. if( nRow <= -1 )
  711. return;
  712. if (ACellViewInfo->Item->Index == Col05->Index ||
  713. ACellViewInfo->Item->Index == Col09->Index)
  714. {
  715. String sSvrIp = pGDC->Values[nRow][ACellViewInfo->Item->Index];
  716. ITSUtil_NetworkPing(sSvrIp);
  717. }
  718. }
  719. //---------------------------------------------------------------------------
  720. void __fastcall TFrmWebCamCtrl::BtnSaveImgFileClick(TObject *Sender)
  721. {
  722. #if 0
  723. String sSaveFileName;
  724. if (!FSelCtlr || XNVTViewerCtrl1->OCXState == GRAPH_NONE)
  725. {
  726. String sMsg = cxLabel1->Caption;
  727. Application->MessageBox(sMsg.c_str(), L"Save Snap Shot", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  728. return;
  729. }
  730. sSaveFileName.printf(L"%s\\%d_%s.bmp", g_sTempDir.c_str(), FSelCtlr->WCAM_CTLR_NMBR, Now().FormatString("yyyymmddhhnnss").c_str());
  731. if (XNVTViewerCtrl1->FileSnapShot(sSaveFileName.c_str()))
  732. {
  733. Application->MessageBox(sSaveFileName.c_str(), L"Save Snap Shot Success", MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  734. }
  735. else
  736. {
  737. Application->MessageBox(cxLabel2->Caption.c_str(), L"Save Snap Shot Fail", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  738. }
  739. #endif
  740. }
  741. //---------------------------------------------------------------------------
  742. void __fastcall TFrmWebCamCtrl::ClearPreset()
  743. {
  744. CMM_ClearGridTableView(TvPreset);
  745. SePresetNo->Value = 1;
  746. EdPresetName->Text = "";
  747. ChkCctvPresetDef->Checked = false;
  748. //PnlPreset->Enabled = false;
  749. }
  750. //---------------------------------------------------------------------------
  751. void __fastcall TFrmWebCamCtrl::InitPreset()
  752. {
  753. if (!FSelCtlr) return;
  754. ClearPreset();
  755. TcxDataController* pGDC = TvPreset->DataController;
  756. TvPreset->BeginUpdate();
  757. try
  758. {
  759. FSelCtlr->FLists.Lock();
  760. try
  761. {
  762. FOR_STL(TWCamPset*, pObj, FSelCtlr->FLists)
  763. {
  764. if (pObj->DEL_YN == "Y") continue;
  765. int nRow = pGDC->AppendRecord();
  766. pGDC->Values[nRow][ColPresetNo->Index] = String(pObj->PSET_NMBR);
  767. pGDC->Values[nRow][ColPresetName->Index] = pObj->PSET_NM;
  768. pGDC->Values[nRow][ColPresetPan->Index] = String(pObj->PAN);
  769. pGDC->Values[nRow][ColPresetTilt->Index] = String(pObj->TILT);
  770. pGDC->Values[nRow][ColPresetZoom->Index] = String(pObj->ZOOM);
  771. pGDC->Values[nRow][ColPresetFocus->Index] = String(pObj->FOCS);
  772. pGDC->Values[nRow][ColPresetAngle->Index] = "";
  773. pGDC->Values[nRow][ColPresetDefault->Index] = pObj->DFLT_YN;
  774. }
  775. }
  776. __finally
  777. {
  778. FSelCtlr->FLists.UnLock();
  779. }
  780. }
  781. __finally
  782. {
  783. TvPreset->EndUpdate();
  784. PnlPreset->Enabled = true;
  785. BtnCctvPresetDel->Enabled = false;
  786. }
  787. }
  788. //---------------------------------------------------------------------------
  789. void __fastcall TFrmWebCamCtrl::BtnCctvPresetClick(TObject *Sender)
  790. {
  791. //프리셋 이동
  792. if (!FStrmPlay) return;
  793. if (!FSelCtlr) return;
  794. if (FSelCtlr->WCAM_CTLR_IP.Trim() == "") return;
  795. String sPTZSpeed = String(PTZSpeed->Position);
  796. try
  797. {
  798. String sCmdHtml = "";
  799. int nPresetNo = SePresetNo->Value;
  800. // 프리셋 정보 요청
  801. // /stw-cgi/ptzconfig.cgi?msubmenu=preset&action=view
  802. // 채널0 번 프리셋 정보 요청
  803. // /stw-cgi/ptzconfig.cgi?msubmenu=preset&action=view&Channel=0
  804. // 홈설정
  805. // /stw-cgi/ptzconfig.cgi?msubmenu=home&action=set
  806. // /stw-cgi/ptzcontrol.cgi?msubmenu=preset&action=control&PresetName=PresetName1 ==> 프리셋명으로 이동
  807. sCmdHtml.printf(L"%s/stw-cgi/ptzcontrol.cgi?msubmenu=preset&action=control&Preset=%d", FStrmHttp.c_str(), nPresetNo);
  808. if (sCmdHtml == "") return;
  809. IdHTTP1->HTTPOptions = IdHTTP1->HTTPOptions >> hoInProcessAuth;
  810. IdHTTP1->HTTPOptions = IdHTTP1->HTTPOptions << hoInProcessAuth;
  811. String sResult = IdHTTP1->Get(sCmdHtml);
  812. reMsg->Lines->Add(sResult);
  813. IdHTTP1->Disconnect();
  814. }
  815. catch(...) {}
  816. }
  817. //---------------------------------------------------------------------------
  818. void __fastcall TFrmWebCamCtrl::BtnCctvPresetSetClick(TObject *Sender)
  819. {
  820. if (!FStrmPlay) return;
  821. if (!FSelCtlr) return;
  822. if (FSelCtlr->WCAM_CTLR_IP.Trim() == "") return;
  823. int nPresetNo = SePresetNo->Value;
  824. String sPresetNm = EdPresetName->Text.Trim();
  825. String sDefault = ChkCctvPresetDef->Checked ? "Y" : "N";
  826. if (sPresetNm == "")
  827. {
  828. String sMsg;
  829. sMsg = cxLabel3->Caption;//"프리셋 명을 입력하세요..";
  830. Application->MessageBox(sMsg.c_str(), cxLabel4->Caption.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  831. EdPresetName->SetFocus();
  832. }
  833. // Adding ‘Preset 1’ with the name ‘preset001’
  834. // /stw-cgi/ptzconfig.cgi?msubmenu=preset&action=add&Preset=1&Name=preset001
  835. // Adding ‘Preset 3’ with the name ‘preset003’ to Channel 0
  836. // /stw-cgi/ptzconfig.cgi?msubmenu=preset&action=add&Channel=0&Preset=3&Name=Preset003
  837. // Removing presets 1 and 3
  838. // /stw-cgi/ptzconfig.cgi?msubmenu=preset&action=remove&Channel=0&Preset=1,3
  839. // Removing all presets at once
  840. // /stw-cgi/ptzconfig.cgi?msubmenu=preset&action=remove&Channel=0&Preset=All
  841. String sCmdHtml = "";
  842. sPresetNm = StringReplace(sPresetNm, " ", "", TReplaceFlags() << rfReplaceAll);
  843. String sUtfPresetNm = TIdURI::ParamsEncode(sPresetNm);
  844. sCmdHtml.printf(L"%s/stw-cgi/ptzconfig.cgi?msubmenu=preset&action=add&Preset=1&Name=%s", FStrmHttp.c_str(), sUtfPresetNm.c_str());
  845. if (sCmdHtml == "") return;
  846. IdHTTP1->HTTPOptions = IdHTTP1->HTTPOptions >> hoInProcessAuth;
  847. IdHTTP1->HTTPOptions = IdHTTP1->HTTPOptions << hoInProcessAuth;
  848. String sResult = IdHTTP1->Get(sCmdHtml);
  849. reMsg->Lines->Add(sResult);
  850. IdHTTP1->Disconnect();
  851. if (sResult.Trim() != "OK") return;
  852. if (sDefault == "Y")
  853. {
  854. sCmdHtml = "";
  855. sCmdHtml.printf(L"%s/stw-cgi/ptzconfig.cgi?msubmenu=home&action=set", FStrmHttp.c_str());
  856. if (sCmdHtml == "") return;
  857. IdHTTP1->HTTPOptions = IdHTTP1->HTTPOptions >> hoInProcessAuth;
  858. IdHTTP1->HTTPOptions = IdHTTP1->HTTPOptions << hoInProcessAuth;
  859. String sResult = IdHTTP1->Get(sCmdHtml);
  860. reMsg->Lines->Add(sResult);
  861. IdHTTP1->Disconnect();
  862. if (sResult.Trim() != "OK")
  863. {
  864. sDefault = "N";
  865. }
  866. }
  867. if (!DMDb->Connect())
  868. {
  869. if (g_AppCfg.sLang != "kr")
  870. {
  871. Application->MessageBox(L"Database connection failed.\r\n\r\nPlease restart the program.",
  872. L"Database connection error !!!",
  873. MB_OK|MB_ICONERROR);
  874. }
  875. else
  876. {
  877. Application->MessageBox(L"데이터베이스 연결에 실패하였습니다.\r\n\r\n프로그램을 다시 시작하십시요.",
  878. L"데이터베이스 연결 오류!!!",
  879. MB_OK|MB_ICONERROR);
  880. }
  881. return;
  882. }
  883. TWCamPset *pSet = FSelCtlr->FLists.Find(nPresetNo);
  884. if (!pSet)
  885. {
  886. pSet = new TWCamPset();
  887. pSet->WCAM_CTLR_NMBR = FSelCtlr->WCAM_CTLR_NMBR;
  888. pSet->PSET_NMBR = nPresetNo;
  889. FSelCtlr->FLists.Push(pSet->PSET_NMBR, pSet);
  890. }
  891. pSet->PSET_NM = sPresetNm;
  892. pSet->DFLT_YN = sDefault;
  893. pSet->DEL_YN = "N";
  894. WCamCtlrManager->SavePreSet(FSelCtlr, DMDb->GetConnection());
  895. InitPreset();
  896. SePresetNo->Value = nPresetNo;
  897. EdPresetName->Text = sPresetNm;
  898. ChkCctvPresetDef->Checked = sDefault == "Y" ? true : false;
  899. BtnCctvPresetDel->Enabled = true;
  900. DMDb->Close();;
  901. }
  902. //---------------------------------------------------------------------------
  903. void __fastcall TFrmWebCamCtrl::BtnCctvPresetDelClick(TObject *Sender)
  904. {
  905. //프리셋 삭제
  906. if (!FStrmPlay) return;
  907. if (!FSelCtlr) return;
  908. if (FSelCtlr->WCAM_CTLR_IP.Trim() == "") return;
  909. int nPresetNo = SePresetNo->Value;
  910. String sCmdHtml = "";
  911. sCmdHtml.printf(L"%s/stw-cgi/ptzconfig.cgi?msubmenu=preset&action=remove&Channel=0&Preset=%d", FStrmHttp.c_str(), nPresetNo);
  912. if (sCmdHtml == "") return;
  913. IdHTTP1->HTTPOptions = IdHTTP1->HTTPOptions >> hoInProcessAuth;
  914. IdHTTP1->HTTPOptions = IdHTTP1->HTTPOptions << hoInProcessAuth;
  915. String sResult = IdHTTP1->Get(sCmdHtml);
  916. reMsg->Lines->Add(sResult);
  917. IdHTTP1->Disconnect();
  918. if (sResult.Trim() != "OK") return;
  919. if (!DMDb->Connect())
  920. {
  921. if (g_AppCfg.sLang != "kr")
  922. {
  923. Application->MessageBox(L"Database connection failed.\r\n\r\nPlease restart the program.",
  924. L"Database connection error !!!",
  925. MB_OK|MB_ICONERROR);
  926. }
  927. else
  928. {
  929. Application->MessageBox(L"데이터베이스 연결에 실패하였습니다.\r\n\r\n프로그램을 다시 시작하십시요.",
  930. L"데이터베이스 연결 오류!!!",
  931. MB_OK|MB_ICONERROR);
  932. }
  933. return;
  934. }
  935. TWCamPset *pSet = FSelCtlr->FLists.Find(nPresetNo);
  936. if (!pSet)
  937. {
  938. DMDb->Close();;
  939. return;
  940. }
  941. pSet->PSET_NM = "";
  942. pSet->DEL_YN = "Y";
  943. WCamCtlrManager->SavePreSet(FSelCtlr, DMDb->GetConnection());
  944. InitPreset();
  945. DMDb->Close();;
  946. }
  947. //---------------------------------------------------------------------------
  948. void __fastcall TFrmWebCamCtrl::TvPresetCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo,
  949. TMouseButton AButton, TShiftState AShift, bool &AHandled)
  950. {
  951. if (!ACellViewInfo) return;
  952. int nRow = TvPreset->DataController->FocusedRecordIndex;
  953. if( nRow <= -1 )
  954. return;
  955. String sPresetNo = TvPreset->DataController->Values[nRow][ColPresetNo->Index];
  956. String sPresetNm = TvPreset->DataController->Values[nRow][ColPresetName->Index];
  957. String sDefault = TvPreset->DataController->Values[nRow][ColPresetDefault->Index];
  958. ChkCctvPresetDef->Checked = sDefault == "Y" ? true : false;
  959. SePresetNo->Value = sPresetNo.ToIntDef(1);
  960. EdPresetName->Text = sPresetNm;
  961. BtnCctvPresetDel->Enabled = true;
  962. }
  963. //---------------------------------------------------------------------------
  964. void __fastcall TFrmWebCamCtrl::SePresetNoPropertiesEditValueChanged(TObject *Sender)
  965. {
  966. if (FSelCtlr)
  967. {
  968. int nPresetNo = SePresetNo->Value;
  969. TWCamPset* pSet = FSelCtlr->FLists.Find(nPresetNo);
  970. if (pSet) BtnCctvPresetDel->Enabled = true;
  971. else BtnCctvPresetDel->Enabled = false;
  972. }
  973. }
  974. //---------------------------------------------------------------------------
  975. void __fastcall TFrmWebCamCtrl::reMsgDblClick(TObject *Sender)
  976. {
  977. reMsg->Lines->Clear();
  978. }
  979. //---------------------------------------------------------------------------
  980. void __fastcall TFrmWebCamCtrl::FFPlayer1State(TObject *Sender, TPlayState APlayState)
  981. {
  982. switch(APlayState)
  983. {
  984. case Ffbasecomponent::psPlay:
  985. reMsg->Lines->Add("Play...");
  986. PnlCamConrtol->Enabled = true;
  987. PnlPreset->Enabled = true;
  988. break;
  989. case Ffbasecomponent::psResume: reMsg->Lines->Add("Resume."); break;
  990. case Ffbasecomponent::psPause: reMsg->Lines->Add("Pause.."); break;
  991. case Ffbasecomponent::psStep: reMsg->Lines->Add("Step..."); break;
  992. case Ffbasecomponent::psStop:
  993. if (FFPlayer1->ScreenHandle != NULL)
  994. {
  995. PostMessage(FFPlayer1->ScreenHandle, CM_INVALIDATE, 0, 0);
  996. UpdateWindow(FFPlayer1->ScreenHandle);
  997. //FFPlayer1->ScreenHandle = NULL;
  998. }
  999. reMsg->Lines->Add("Stop...");
  1000. break;
  1001. case Ffbasecomponent::psEnd:
  1002. {
  1003. FFPlayer1->Stop(true);
  1004. PostMessage(FFPlayer1->ScreenHandle, CM_INVALIDATE, 0, 0);
  1005. UpdateWindow(FFPlayer1->ScreenHandle);
  1006. //FFPlayer1->ScreenHandle = NULL;
  1007. FStrmPlay = false;
  1008. }
  1009. reMsg->Lines->Add("End...");
  1010. break;
  1011. }
  1012. }
  1013. //---------------------------------------------------------------------------
  1014. void __fastcall TFrmWebCamCtrl::BtnStatRefreshClick(TObject *Sender)
  1015. {
  1016. TmrRefresh->Enabled = false;
  1017. BtnStatRefresh->Enabled = false;
  1018. if (!DMDb->Connect())
  1019. {
  1020. if (g_AppCfg.sLang != "kr")
  1021. {
  1022. Application->MessageBox(L"Database connection failed.\r\n\r\nPlease restart the program.",
  1023. L"Database connection error !!!",
  1024. MB_OK|MB_ICONERROR);
  1025. }
  1026. else
  1027. {
  1028. Application->MessageBox(L"데이터베이스 연결에 실패하였습니다.\r\n\r\n프로그램을 다시 시작하십시요.",
  1029. L"데이터베이스 연결 오류!!!",
  1030. MB_OK|MB_ICONERROR);
  1031. }
  1032. BtnStatRefresh->Enabled = true;
  1033. TmrRefresh->Enabled = true;
  1034. return;
  1035. }
  1036. WCamCtlrManager->LoadStatusFromDb(DMDb->GetConnection());
  1037. FRAMEWCamStateList1->RefreshStatus();
  1038. RefreshPingList();
  1039. DMDb->Close();;
  1040. BtnStatRefresh->Enabled = true;
  1041. TmrRefresh->Enabled = true;
  1042. }
  1043. //---------------------------------------------------------------------------
  1044. void __fastcall TFrmWebCamCtrl::TmrRefreshTimer(TObject *Sender)
  1045. {
  1046. BtnStatRefreshClick(NULL);
  1047. }
  1048. //---------------------------------------------------------------------------
  1049. void __fastcall TFrmWebCamCtrl::IdHTTP1Authorization(TObject *Sender, TIdAuthentication *Authentication, bool &Handled)
  1050. {
  1051. #if 1
  1052. IdHTTP1->Request->Username = FStrmUser;
  1053. IdHTTP1->Request->Password = FStrmPswd;
  1054. #endif
  1055. Authentication->Username = FStrmUser;
  1056. Authentication->Password = FStrmPswd;
  1057. TIdDigestAuthentication *pAuth1 = (TIdDigestAuthentication*)IdHTTP1->Request->Authentication;
  1058. TIdDigestAuthentication *pAuth2 = (TIdDigestAuthentication*)Authentication;
  1059. pAuth1->Uri = IdHTTP1->Request->URL;
  1060. pAuth2->Method = "GET";
  1061. Handled = true;
  1062. }
  1063. //---------------------------------------------------------------------------
  1064. void __fastcall TFrmWebCamCtrl::BtnUpMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
  1065. {
  1066. // PANControl
  1067. if (!FStrmPlay) return;
  1068. if (!FSelCtlr) return;
  1069. if (FSelCtlr->WCAM_CTLR_IP.Trim() == "") return;
  1070. String sPTZSpeed = String(PTZSpeed->Position);
  1071. try
  1072. {
  1073. String sCmdHtml = "";
  1074. TImageBtn *pBtn = (TImageBtn*)Sender;
  1075. switch(pBtn->Tag)
  1076. {
  1077. case 0: sCmdHtml.printf(L"%s/stw-cgi/ptzcontrol.cgi?msubmenu=home&action=control&Channel=0", FStrmHttp.c_str()); break; // HOME
  1078. case 1: sCmdHtml.printf(L"%s/stw-cgi/ptzcontrol.cgi?msubmenu=continuous&action=control&Tilt=5&Duration=1", FStrmHttp.c_str()); break; // Tilt Up
  1079. case 2: sCmdHtml.printf(L"%s/stw-cgi/ptzcontrol.cgi?msubmenu=continuous&action=control&Tilt=-5&Duration=1", FStrmHttp.c_str()); break; // Tilt Down
  1080. case 3: sCmdHtml.printf(L"%s/stw-cgi/ptzcontrol.cgi?msubmenu=continuous&action=control&Pan=5", FStrmHttp.c_str()); break; // Pan left
  1081. case 4: sCmdHtml.printf(L"%s/stw-cgi/ptzcontrol.cgi?msubmenu=continuous&action=control&Pan=-5", FStrmHttp.c_str()); break; // Pan right
  1082. case 9: sCmdHtml.printf(L"%s/stw-cgi/ptzcontrol.cgi?msubmenu=continuous&action=control&Zoom=3", FStrmHttp.c_str()); break; // Zoom In
  1083. case 10: sCmdHtml.printf(L"%s/stw-cgi/ptzcontrol.cgi?msubmenu=continuous&action=control&Zoom=-3", FStrmHttp.c_str()); break; // Zoom Out
  1084. case 12: sCmdHtml.printf(L"%s/stw-cgi/ptzcontrol.cgi?msubmenu=continuous&action=control&Focus=Near", FStrmHttp.c_str()); break; // Focus In
  1085. case 13: sCmdHtml.printf(L"%s/stw-cgi/ptzcontrol.cgi?msubmenu=continuous&action=control&Focus=Far", FStrmHttp.c_str()); break; // Focus Out
  1086. default: return;
  1087. }
  1088. if (sCmdHtml == "") return;
  1089. IdHTTP1->HTTPOptions = IdHTTP1->HTTPOptions >> hoInProcessAuth;
  1090. IdHTTP1->HTTPOptions = IdHTTP1->HTTPOptions << hoInProcessAuth;
  1091. String sResult = IdHTTP1->Get(sCmdHtml);
  1092. reMsg->Lines->Add(sResult);
  1093. IdHTTP1->Disconnect();
  1094. }
  1095. catch(...) {}
  1096. }
  1097. //---------------------------------------------------------------------------
  1098. void __fastcall TFrmWebCamCtrl::BtnUpMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
  1099. {
  1100. // PANControl Stop
  1101. if (!FStrmPlay) return;
  1102. if (!FSelCtlr) return;
  1103. if (FSelCtlr->WCAM_CTLR_IP.Trim() == "") return;
  1104. String sPTZSpeed = String(PTZSpeed->Position);
  1105. try
  1106. {
  1107. String sCmdHtml = "";
  1108. TImageBtn *pBtn = (TImageBtn*)Sender;
  1109. switch(pBtn->Tag)
  1110. {
  1111. case 1: // Tilt Up
  1112. case 2: // Tilt Down
  1113. sCmdHtml.printf(L"%s/stw-cgi/ptzcontrol.cgi?msubmenu=continuous&action=control&Tilt=0&Duration=1", FStrmHttp.c_str());
  1114. break;
  1115. case 3: // Pan left
  1116. case 4: // Pan right
  1117. sCmdHtml.printf(L"%s/stw-cgi/ptzcontrol.cgi?msubmenu=continuous&action=control&Pan=0", FStrmHttp.c_str());
  1118. break;
  1119. case 9: // Zoom In
  1120. case 10: // Zoom Out
  1121. sCmdHtml.printf(L"%s/stw-cgi/ptzcontrol.cgi?msubmenu=continuous&action=control&Zoom=0", FStrmHttp.c_str());
  1122. break;
  1123. case 12: // Focus In
  1124. case 13: // Focus Out
  1125. sCmdHtml.printf(L"%s/stw-cgi/ptzcontrol.cgi?msubmenu=continuous&action=control&Focus=Stop", FStrmHttp.c_str());
  1126. break;
  1127. default: return;
  1128. }
  1129. if (sCmdHtml == "") return;
  1130. IdHTTP1->HTTPOptions = IdHTTP1->HTTPOptions >> hoInProcessAuth;
  1131. IdHTTP1->HTTPOptions = IdHTTP1->HTTPOptions << hoInProcessAuth;
  1132. String sResult = IdHTTP1->Get(sCmdHtml);
  1133. reMsg->Lines->Add(sResult);
  1134. IdHTTP1->Disconnect();
  1135. }
  1136. catch(...) {}
  1137. }
  1138. //---------------------------------------------------------------------------
  1139. void __fastcall TFrmWebCamCtrl::EdPresetNameKeyPress(TObject *Sender, wchar_t &Key)
  1140. {
  1141. if (Key == VK_SPACE)
  1142. {
  1143. Key = 0;
  1144. }
  1145. }
  1146. //---------------------------------------------------------------------------