FrmWebCamCtrlF.cpp 41 KB

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