FrmVmsRemoteCtrlF.cpp 40 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #include "AppGlobalF.h"
  4. #include "ITSSkinF.h"
  5. #include "ITSUtilF.h"
  6. #include "CenterCommF.h"
  7. #pragma hdrstop
  8. #include "FrmVmsRemoteCtrlF.h"
  9. //---------------------------------------------------------------------------
  10. #pragma package(smart_init)
  11. #pragma link "cxContainer"
  12. #pragma link "cxControls"
  13. #pragma link "cxEdit"
  14. #pragma link "cxGraphics"
  15. #pragma link "cxGroupBox"
  16. #pragma link "cxLabel"
  17. #pragma link "cxLookAndFeelPainters"
  18. #pragma link "cxLookAndFeels"
  19. #pragma link "cxPC"
  20. #pragma link "cxPCdxBarPopupMenu"
  21. #pragma link "cxSplitter"
  22. #pragma link "dxSkinBlack"
  23. #pragma link "dxSkinBlue"
  24. #pragma link "dxSkinCaramel"
  25. #pragma link "dxSkinCoffee"
  26. #pragma link "dxSkinDarkRoom"
  27. #pragma link "dxSkinDarkSide"
  28. #pragma link "dxSkinFoggy"
  29. #pragma link "dxSkinGlassOceans"
  30. #pragma link "dxSkiniMaginary"
  31. #pragma link "dxSkinLilian"
  32. #pragma link "dxSkinLiquidSky"
  33. #pragma link "dxSkinLondonLiquidSky"
  34. #pragma link "dxSkinMcSkin"
  35. #pragma link "dxSkinMoneyTwins"
  36. #pragma link "dxSkinOffice2007Black"
  37. #pragma link "dxSkinOffice2007Blue"
  38. #pragma link "dxSkinOffice2007Green"
  39. #pragma link "dxSkinOffice2007Pink"
  40. #pragma link "dxSkinOffice2007Silver"
  41. #pragma link "dxSkinOffice2010Black"
  42. #pragma link "dxSkinOffice2010Blue"
  43. #pragma link "dxSkinOffice2010Silver"
  44. #pragma link "dxSkinsCore"
  45. #pragma link "dxSkinscxPCPainter"
  46. #pragma link "dxSkinSeven"
  47. #pragma link "dxSkinSharp"
  48. #pragma link "dxSkinSilver"
  49. #pragma link "dxSkinStardust"
  50. #pragma link "cxClasses"
  51. #pragma link "cxCustomData"
  52. #pragma link "cxData"
  53. #pragma link "cxDataStorage"
  54. #pragma link "cxFilter"
  55. #pragma link "cxGrid"
  56. #pragma link "cxGridCustomTableView"
  57. #pragma link "cxGridCustomView"
  58. #pragma link "cxGridLevel"
  59. #pragma link "cxGridTableView"
  60. #pragma link "cxStyles"
  61. #pragma link "cxTextEdit"
  62. #pragma link "cxGridCardView"
  63. #pragma link "cxGridCustomLayoutView"
  64. #pragma link "cxCheckBox"
  65. #pragma link "cxDropDownEdit"
  66. #pragma link "cxImage"
  67. #pragma link "cxButtons"
  68. #pragma link "cxCalc"
  69. #pragma link "cxGridBandedTableView"
  70. #pragma link "FRAME_VmsStateF"
  71. #pragma link "FRAME_VmsStateF"
  72. #pragma link "FRAME_VmsMsgListF"
  73. #pragma link "ImageBtn"
  74. #pragma link "cxMaskEdit"
  75. #pragma link "cxRadioGroup"
  76. #pragma link "cxSpinEdit"
  77. #pragma link "cxTimeEdit"
  78. #pragma link "IdBaseComponent"
  79. #pragma link "IdComponent"
  80. #pragma link "IdIcmpClient"
  81. #pragma link "IdRawBase"
  82. #pragma link "IdRawClient"
  83. #pragma link "FFBaseComponent"
  84. #pragma link "FFBasePlay"
  85. #pragma link "FFPlay"
  86. #pragma link "IdHTTP"
  87. #pragma link "IdTCPClient"
  88. #pragma link "IdTCPConnection"
  89. #pragma link "cxHint"
  90. #pragma link "dxCustomHint"
  91. #pragma link "dxScreenTip"
  92. #pragma link "dxSkinsForm"
  93. #pragma link "dxGDIPlusClasses"
  94. #pragma resource "*.dfm"
  95. TFrmVmsRemoteCtrl *FrmVmsRemoteCtrl = NULL;
  96. #define LICENSE_KEY "FSXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX"
  97. //---------------------------------------------------------------------------
  98. __fastcall TFrmVmsRemoteCtrl::TFrmVmsRemoteCtrl(TComponent* Owner)
  99. : TForm(Owner)
  100. {
  101. //CMM_SetFormPosition(g_AppCfg.bSaveForm);
  102. ITSSkin_Initialize(Application, g_AppCfg.sLang);
  103. ITSSkin_Caption(false);
  104. ITSSkin_Load(this);
  105. //CMM_LoadForm(g_sFormsDir, this);
  106. SetColorScheme(g_AppCfg.sSkinName);
  107. LoadLocalSkin();
  108. //if (FormStyle != fsMDIChild) CMM_LoadForm(g_sFormsDir, this);
  109. FPalyerForm = NULL;
  110. FSelVmsObj = NULL;
  111. TvList->OptionsView->GroupByBox = false;
  112. TvList->OptionsView->Footer = false;
  113. ColumnSel->Visible = true;
  114. TsOperMode->TabVisible = false;
  115. PgControl->ActivePage = TsControl;
  116. #if 0
  117. cxTabSheet5->TabVisible = false;
  118. cxTabSheet5->Visible = false;
  119. cxTabSheet1->TabVisible = false;
  120. cxTabSheet1->Visible = false;
  121. cxTabSheet6->TabVisible = false;
  122. cxTabSheet6->Visible = false;
  123. #endif
  124. FVmsIds = new TStringList();
  125. FTitle = Caption;//"VMS 제어";
  126. FCtrlTab = NULL;
  127. FStrmPlay = false;
  128. reMsg->Lines->Clear();
  129. String sAVILibDir = g_sAppDir + "LibAV";
  130. FFPlayer1->SetLicenseKey(LICENSE_KEY);
  131. FFPlayer1->DisableFPUExceptions();
  132. if (!FFPlayer1->LoadAVLib(sAVILibDir))
  133. {
  134. reMsg->Lines->Add("영상표출 라이브러리 초기화 실패.");
  135. #if 0
  136. if (g_AppCfg.sLang != "kr") Application->MessageBox(L"Stream display library load failed.", L"Stream display fail", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  137. else Application->MessageBox(L"영상표출 라이브러리를 로드하지 못하였습니다.", L"영상표출 오류", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  138. #endif
  139. }
  140. reMsg->Lines->Clear();
  141. }
  142. //---------------------------------------------------------------------------
  143. void __fastcall TFrmVmsRemoteCtrl::SetColorScheme(String ASkinName)
  144. {
  145. dxSkinController1->SkinName = ASkinName;
  146. dxSkinController1->Refresh();
  147. }
  148. //---------------------------------------------------------------------------
  149. void __fastcall TFrmVmsRemoteCtrl::CommClose()
  150. {
  151. try
  152. {
  153. WebCamStop();
  154. SAFE_DELETE(FVmsIds);
  155. //if (FormStyle != fsMDIChild) CMM_SaveForm(g_sFormsDir, this);
  156. FStrmPlay = false;
  157. CComm_Terminate();
  158. ITSSkin_Term();
  159. //CMM_SaveForm(g_sFormsDir, this);
  160. }
  161. catch(...)
  162. {
  163. }
  164. }
  165. //---------------------------------------------------------------------------
  166. void __fastcall TFrmVmsRemoteCtrl::FormShow(TObject *Sender)
  167. {
  168. Refresh();
  169. #if 0
  170. InitDbLoading();
  171. UpdateList();
  172. TvList->ApplyBestFit(NULL, true, false);
  173. #endif
  174. CxList->Enabled = false;
  175. TmrShow->Enabled = true;
  176. }
  177. //---------------------------------------------------------------------------
  178. void __fastcall TFrmVmsRemoteCtrl::InitDbLoading()
  179. {
  180. Application->ProcessMessages();
  181. if (SysCodeManager == NULL) {
  182. SysCodeManager = new TSysCodeManager();
  183. }
  184. SysCodeManager->LoadFromDb();
  185. if (!VmsCtlrManager) {
  186. VmsCtlrManager = new TVmsCtlrManager();
  187. }
  188. VmsCtlrManager->LoadVmsModlSize();
  189. VmsCtlrManager->LoadFromDb();
  190. VmsCtlrManager->LoadStatusFromDb();
  191. VmsCtlrManager->LoadParaFromDb();
  192. if (!CenterCommManager) {
  193. CenterCommManager = new TCenterCommManager();
  194. }
  195. CenterCommManager->LoadFromDb(g_AppCfg.PRCS_ID);
  196. FCommCtrlTarget = CenterCommManager->FLists.Find("71"); // VMS 제어
  197. APP_FillCode(CbOPER_MODE, "VMS_OPER_MODE_CD"); //VMS운영모드
  198. APP_FillCode(CbRPRS_STTS, "RPRSV_STTS_CD"); //대표상태 (코드구분=RPRSV_STTS_CD)
  199. APP_FillCode(CbCMNC_STTS, "CMNC_STTS_CD"); //통신상태 (코드구분=CMNC_STTS_CD)
  200. APP_FillCode(CbPS_STTS, "PS_STTS_CD"); //전원상태 (코드구분=PS_STTS_CD)
  201. APP_FillCode(CbFAN_STTS, "FAN_STTS_CD"); //팬상태 (코드구분=FAN_STTS_CD)
  202. APP_FillCode(CbHTER_STTS, "HTER_STTS_CD"); //히터상태 (코드구분=HTER_STTS_CD)
  203. APP_FillCode(CbDOOR_STTS, "DOOR_OPEN_STTS_CD"); //문상태(코드구분=DOOR_OPEN_STTS_CD)
  204. APP_FillCode(CbLUMI_MODE, "LUMI_MODE_CD"); //휘도모드(코드구분=LUMI_MODE_CD)
  205. APP_FillCode(CbFAN_MODE, "FAN_MODE_CD"); //팬모드(코드구분=FAN_MODE_CD)
  206. }
  207. //---------------------------------------------------------------------------
  208. void __fastcall TFrmVmsRemoteCtrl::UpdateList()
  209. {
  210. CMM_ClearGridTableView(TvList);
  211. int ii, jj;
  212. int nCols = 0;
  213. TcxDataController *pGDC = TvList->DataController;
  214. TvList->BeginUpdate();
  215. pGDC->BeginUpdate();
  216. VmsCtlrManager->FLists.Lock();
  217. try
  218. {
  219. int nRow;
  220. FOR_STL(TVmsCtlr*, pObj, VmsCtlrManager->FLists) {
  221. if (pObj->USE_YN != "Y") continue;
  222. nRow = pGDC->AppendRecord();
  223. pGDC->Values[nRow][ColumnSel->Index] = false;
  224. pGDC->Values[nRow][ColVMS_CTLR_ID->Index] = pObj->VMS_CTLR_ID;
  225. pGDC->Values[nRow][ColVMS_NM->Index] = pObj->VMS_NM;
  226. pGDC->Values[nRow][ColVMS_MODL_KIND_NM->Index] = pObj->VMS_MODL_KIND_NM;
  227. pGDC->Values[nRow][ColOPER_MODE->Index] = APP_GetCodeName(CbOPER_MODE, pObj->OPER_MODE);
  228. pGDC->Values[nRow][ColLAST_DT_FMT->Index] = pObj->Stts->LAST_DT_FMT;
  229. pGDC->Values[nRow][ColRPRS_STTS->Index] = APP_GetCodeName(CbRPRS_STTS, pObj->Stts->RPRS_STTS);
  230. pGDC->Values[nRow][ColCMNC_STTS->Index] = APP_GetCodeName(CbCMNC_STTS, pObj->Stts->CMNC_STTS);
  231. pGDC->Values[nRow][ColPS_STTS->Index] = APP_GetCodeName(CbPS_STTS, pObj->Stts->PS_STTS);
  232. pGDC->Values[nRow][ColFAN_STTS->Index] = APP_GetCodeName(CbFAN_STTS, pObj->Stts->FAN_STTS);
  233. pGDC->Values[nRow][ColHTER_STTS->Index] = APP_GetCodeName(CbHTER_STTS, pObj->Stts->HTER_STTS);
  234. pGDC->Values[nRow][ColDOOR_STTS->Index] = APP_GetCodeName(CbDOOR_STTS, pObj->Stts->DOOR_STTS);
  235. pGDC->Values[nRow][ColRSET_YN->Index] = pObj->Stts->RSET_YN;
  236. pGDC->Values[nRow][ColTEMP->Index] = pObj->Stts->TEMP;
  237. pGDC->Values[nRow][ColHUM->Index] = pObj->Stts->HUM;
  238. pGDC->Values[nRow][ColBOX_TEMP->Index] = pObj->Stts->BOX_TEMP;
  239. pGDC->Values[nRow][Col99->Index] = (int)pObj;
  240. }
  241. }
  242. __finally
  243. {
  244. VmsCtlrManager->FLists.UnLock();
  245. pGDC->EndUpdate();
  246. TvList->EndUpdate();
  247. }
  248. }
  249. //---------------------------------------------------------------------------
  250. void __fastcall TFrmVmsRemoteCtrl::RefreshStatusInfo()
  251. {
  252. TcxDataController *pGDC = TvList->DataController;
  253. try
  254. {
  255. TvList->BeginUpdate();
  256. pGDC->BeginUpdate();
  257. int nRows = pGDC->RecordCount;
  258. for(int nRow = 0; nRow < nRows; nRow++)
  259. {
  260. int nMemPtr = TvList->DataController->Values[nRow][Col99->Index];
  261. TVmsCtlr *pObj = (TVmsCtlr*)nMemPtr;
  262. if (!pObj) continue;
  263. pGDC->Values[nRow][ColOPER_MODE->Index] = APP_GetCodeName(CbOPER_MODE, pObj->OPER_MODE);
  264. pGDC->Values[nRow][ColLAST_DT_FMT->Index] = pObj->Stts->LAST_DT_FMT;
  265. pGDC->Values[nRow][ColRPRS_STTS->Index] = APP_GetCodeName(CbRPRS_STTS, pObj->Stts->RPRS_STTS);
  266. pGDC->Values[nRow][ColCMNC_STTS->Index] = APP_GetCodeName(CbCMNC_STTS, pObj->Stts->CMNC_STTS);
  267. pGDC->Values[nRow][ColPS_STTS->Index] = APP_GetCodeName(CbPS_STTS, pObj->Stts->PS_STTS);
  268. pGDC->Values[nRow][ColFAN_STTS->Index] = APP_GetCodeName(CbFAN_STTS, pObj->Stts->FAN_STTS);
  269. pGDC->Values[nRow][ColHTER_STTS->Index] = APP_GetCodeName(CbHTER_STTS, pObj->Stts->HTER_STTS);
  270. pGDC->Values[nRow][ColDOOR_STTS->Index] = APP_GetCodeName(CbDOOR_STTS, pObj->Stts->DOOR_STTS);
  271. pGDC->Values[nRow][ColRSET_YN->Index] = pObj->Stts->RSET_YN;
  272. pGDC->Values[nRow][ColTEMP->Index] = pObj->Stts->TEMP;
  273. pGDC->Values[nRow][ColHUM->Index] = pObj->Stts->HUM;
  274. pGDC->Values[nRow][ColBOX_TEMP->Index] = pObj->Stts->BOX_TEMP;
  275. }
  276. }
  277. __finally
  278. {
  279. pGDC->EndUpdate();
  280. TvList->EndUpdate();
  281. //CxList->LayoutChanged();
  282. }
  283. }
  284. //---------------------------------------------------------------------------
  285. void __fastcall TFrmVmsRemoteCtrl::LoadLocalSkin()
  286. {
  287. PnlVmsCam->ParentColor = false;
  288. PnlVmsCam->Color = clBlack;
  289. PnlRtspStream->ParentColor = false;
  290. PnlRtspStream->Color = clBlack;
  291. Refresh();
  292. }
  293. //---------------------------------------------------------------------------
  294. void __fastcall TFrmVmsRemoteCtrl::TmrShowTimer(TObject *Sender)
  295. {
  296. TmrShow->Enabled = false;
  297. InitDbLoading();
  298. UpdateList();
  299. //TvList->ApplyBestFit(NULL, true, false);
  300. CxList->Enabled = true;
  301. RefreshStatusInfo();
  302. int nResult = CComm_Initialize((long)Handle, g_AppCfg.PRCS_ID, "P04010", 0);
  303. }
  304. //---------------------------------------------------------------------------
  305. void __fastcall TFrmVmsRemoteCtrl::FormClose(TObject *Sender, TCloseAction &Action)
  306. {
  307. try {
  308. CommClose();
  309. FrmVmsRemoteCtrl = NULL;
  310. Action = caFree;
  311. } catch(...) {}
  312. }
  313. //---------------------------------------------------------------------------
  314. void __fastcall TFrmVmsRemoteCtrl::OnVmsStateRefreshMessage(TMessage &Msg)
  315. {
  316. RefreshStatusInfo();
  317. }
  318. //---------------------------------------------------------------------------
  319. void __fastcall TFrmVmsRemoteCtrl::DisplayInfo()
  320. {
  321. FSelVmsObj = NULL;
  322. PnlVms->Caption = " 선택 VMS: -";
  323. TcxDataController *pGDC = TvList->DataController;
  324. int nSelIdx = CMM_GetRecordIndex(TvList);
  325. if (nSelIdx < 0) return;
  326. String sVmsCtlrId = VarToStr(pGDC->Values[nSelIdx][ColVMS_CTLR_ID->Index]);
  327. int nMemPtr = (int)pGDC->Values[nSelIdx][Col99->Index];
  328. FSelVmsObj = (TVmsCtlr*)nMemPtr;
  329. if (!FSelVmsObj) return;
  330. PnlVms->Caption = " 선택 VMS: [" + FSelVmsObj->VMS_CTLR_ID + "] " + FSelVmsObj->VMS_NM;
  331. try {
  332. if (FSelVmsObj->Para->IsLoading) {
  333. SeCurrBrgh->Value = FSelVmsObj->Para->CUR_LUMI;
  334. SeWeekBrgh->Value = FSelVmsObj->Para->DAY_LUMI;
  335. SeNghtBrgh->Value = FSelVmsObj->Para->NGHT_LUMI;
  336. }
  337. }
  338. catch(Exception &e) {
  339. }
  340. try
  341. {
  342. reMsg->Lines->Clear();
  343. WebCamPlay((FSelVmsObj->VMS_CTLR_ID));
  344. }
  345. catch(Exception &e)
  346. {
  347. }
  348. BtnWebCamUrl->Enabled = true;
  349. }
  350. //---------------------------------------------------------------------------
  351. void __fastcall TFrmVmsRemoteCtrl::ClearCheckList()
  352. {
  353. TcxDataController *pGDC = TvList->DataController;
  354. try
  355. {
  356. TvList->BeginUpdate();
  357. pGDC->BeginUpdate();
  358. int nRows = pGDC->RecordCount;
  359. for (int ii = 0; ii < nRows; ii++)
  360. {
  361. pGDC->Values[ii][ColumnSel->Index] = false;
  362. }
  363. }
  364. __finally
  365. {
  366. pGDC->EndUpdate();
  367. TvList->EndUpdate();
  368. }
  369. }
  370. //---------------------------------------------------------------------------
  371. void __fastcall TFrmVmsRemoteCtrl::TvListCellDblClick(TcxCustomGridTableView *Sender,
  372. TcxGridTableDataCellViewInfo *ACellViewInfo, TMouseButton AButton,
  373. TShiftState AShift, bool &AHandled)
  374. {
  375. if (!ACellViewInfo) return;
  376. ClearCheckList();
  377. TcxDataController *pGDC = TvList->DataController;
  378. int nSelIdx = CMM_GetRecordIndex(TvList);
  379. if (nSelIdx < 0) return;
  380. pGDC->Values[nSelIdx][ColumnSel->Index] = true;
  381. DisplayInfo();
  382. }
  383. //---------------------------------------------------------------------------
  384. void __fastcall TFrmVmsRemoteCtrl::Se01PropertiesChange(TObject *Sender)
  385. {
  386. if (((TcxSpinEdit*)Sender)->Value < ((TcxSpinEdit*)Sender)->Properties->MinValue)
  387. ((TcxSpinEdit*)Sender)->Value = ((TcxSpinEdit*)Sender)->Properties->MinValue;
  388. else if(((TcxSpinEdit*)Sender)->Value > ((TcxSpinEdit*)Sender)->Properties->MaxValue &&
  389. ((TcxSpinEdit*)Sender)->Properties->MaxValue)
  390. ((TcxSpinEdit*)Sender)->Value = ((TcxSpinEdit*)Sender)->Properties->MaxValue;
  391. }
  392. //---------------------------------------------------------------------------
  393. bool __fastcall TFrmVmsRemoteCtrl::GetSelListItems(bool ACommCheck/*=true*/)
  394. {
  395. String sMsg;
  396. TcxDataController *pGDC = TvList->DataController;
  397. FVmsIds->Clear();
  398. if (FCommCtrlTarget == NULL) {
  399. sMsg = "VMS 원격제어\r\nVMS 원격제어 서버에 대한 정보가 없습니다.\r\n관리자에게 확인 후에 작업을 진행 하세요.\r\n원격제어 명령을 전송할 수 없습니다.";
  400. Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  401. return false;
  402. }
  403. try
  404. {
  405. bool bSelected;
  406. int nRows = TvList->ViewData->RecordCount;
  407. TvList->BeginUpdate();
  408. for (int ii = 0; ii < nRows; ii++)
  409. {
  410. TcxCustomGridRow* ARow = TvList->ViewData->Rows[ii];
  411. int nMemPtr = (int)ARow->Values[Col99->Index];
  412. TVmsCtlr *pVms = (TVmsCtlr*)nMemPtr;
  413. if (!pVms) continue;
  414. bSelected = (bool)ARow->Values[ColumnSel->Index];
  415. if (bSelected)
  416. {
  417. String sVmsCtlrId = ARow->Values[ColVMS_CTLR_ID->Index]; //VMS번호
  418. if (ACommCheck)
  419. {
  420. #if 0
  421. if (pVms->STATE.Comm == vms_comm_normal)
  422. {
  423. FVmsIds->Add(sVmsCtlrId);
  424. }
  425. #endif
  426. }
  427. else
  428. {
  429. FVmsIds->Add(sVmsCtlrId);
  430. }
  431. }
  432. }
  433. }
  434. __finally
  435. {
  436. TvList->EndUpdate();
  437. }
  438. if (FVmsIds->Count <= 0) {
  439. sMsg = "VMS 원격제어\r\nVVMS가 선택되지 않았습니다.\r\nVMS 목록에서 VMS를 선택하십시요.";
  440. Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  441. CxList->SetFocus();
  442. return false;
  443. }
  444. return true;
  445. }
  446. //---------------------------------------------------------------------------
  447. bool __fastcall TFrmVmsRemoteCtrl::UpdateVmsParam(String AVmsNmbr, void *pData)
  448. {
  449. return true;
  450. }
  451. //---------------------------------------------------------------------------
  452. void __fastcall TFrmVmsRemoteCtrl::BtnOnOffSetClick(TObject *Sender)
  453. {
  454. //전광판ON/OFF시각설정
  455. String sTitle = "전광판 ON/OFF 시각 설정";
  456. String sMsg = "";
  457. int nOkCnt = 0;
  458. int nSelCnt = GetSelListItems(false);
  459. if (0 == nSelCnt)
  460. {
  461. sMsg = "VMS가 선택되지 않았습니다.\r\nVMS 목록에서 VMS를 선택하십시요.";
  462. Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  463. CxList->SetFocus();
  464. return;
  465. }
  466. int nCmdIdx = 0;
  467. sMsg = "선택하신 VMS의 전광판 ON/OFF 시각을 설정 하시겠습니까?";
  468. if (Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_YESNO|MB_ICONWARNING|MB_APPLMODAL) != IDYES) return;
  469. String sQry;
  470. TADOQuery *pADO = NULL;
  471. sQry = "UPDATE TB_VMS_CTLR \r\n"
  472. " SET VMS_OFF_HM = :p02, \r\n"
  473. " VMS_OFF_HM = :p03 \r\n"
  474. " WHERE VMS_CTLR_ID = :p01 \r\n";
  475. String VMS_ON_HM = cxTimeOn->Time.FormatString("HHNN");
  476. String VMS_OFF_HM = cxTimeOff->Time.FormatString("HHNN");
  477. String LAST_CRPR_NMBR = g_AppCfg.OPER_ID;
  478. String LAST_CRCT_DT = Now().FormatString("yyyymmddhhnnss");
  479. try
  480. {
  481. try
  482. {
  483. pADO = new TADOQuery(NULL);
  484. pADO->Close();
  485. pADO->Connection = ITSDb_GetConnection();
  486. pADO->SQL->Clear();
  487. pADO->SQL->Text = sQry;
  488. for (int ii = 0; ii < nSelCnt; ii++)
  489. {
  490. String sVmsNmbr = FVmsIds->Strings[ii];
  491. pADO->Parameters->ParamByName("p01")->Value = sVmsNmbr;
  492. pADO->Parameters->ParamByName("p02")->Value = VMS_OFF_HM;
  493. pADO->Parameters->ParamByName("p03")->Value = VMS_OFF_HM;
  494. pADO->ExecSQL();
  495. nOkCnt++;
  496. TVmsCtlr *pObj = VmsCtlrManager->FLists.Find(sVmsNmbr);
  497. if (pObj)
  498. {
  499. pObj->VMS_ON_HM = VMS_OFF_HM;
  500. pObj->VMS_OFF_HM = VMS_OFF_HM;
  501. }
  502. }
  503. }
  504. catch(EDatabaseError &E)
  505. {
  506. DBERRORMSG("TVMS0500M::BtnOnOffSetClick", String(E.ClassName()), E.Message, sQry);
  507. throw Exception(String(E.ClassName()) + E.Message);
  508. }
  509. catch(Exception &e)
  510. {
  511. DBERRORMSG("TVMS0500M::BtnOnOffSetClick", String(e.ClassName()), e.Message, sQry);
  512. throw Exception(String(e.ClassName()) + e.Message);
  513. }
  514. }
  515. __finally
  516. {
  517. if (pADO)
  518. {
  519. pADO->Close();
  520. delete pADO;
  521. }
  522. }
  523. sMsg = String(nSelCnt) + " 개의 선택 VMS 중에 " + String(nOkCnt) + " 개의 VMS로 전광판 ON/OFF 시각 설정을 요청하였습니다.";
  524. Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  525. for (int ii = 0; ii < nSelCnt; ii++)
  526. {
  527. String sVmsNmbr = FVmsIds->Strings[ii];
  528. VmsCtlrManager->InsVmsControlHs(LAST_CRCT_DT, sVmsNmbr, "V05", VMS_OFF_HM+" "+VMS_OFF_HM, "1", LAST_CRPR_NMBR);
  529. }
  530. //RefreshStatus();
  531. }
  532. //---------------------------------------------------------------------------
  533. void __fastcall TFrmVmsRemoteCtrl::BtnModeControlClick(TObject *Sender)
  534. {
  535. //VMS 운영모드 변경
  536. String sTitle = "VMS 운영모드 변경";
  537. String sMsg = "";
  538. int nOkCnt = 0;
  539. int nSelCnt = GetSelListItems(false);
  540. if (0 == nSelCnt)
  541. {
  542. sMsg = "VMS가 선택되지 않았습니다.\r\nVMS 목록에서 VMS를 선택하십시요.";
  543. Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  544. CxList->SetFocus();
  545. return;
  546. }
  547. int nCmdIdx = 0;
  548. sMsg = "선택하신 VMS의 운영모드를 변경 하시겠습니까?";
  549. if (Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_YESNO|MB_ICONWARNING|MB_APPLMODAL) != IDYES) return;
  550. String OPER_MODE;
  551. if (RdbAuto->Checked)
  552. {
  553. OPER_MODE = "A";
  554. }
  555. else
  556. if (RdbFix->Checked)
  557. {
  558. OPER_MODE = "F";
  559. }
  560. else
  561. if (RdbBase->Checked)
  562. {
  563. OPER_MODE = "B";
  564. }
  565. String sQry;
  566. TADOQuery *pADO = NULL;
  567. sQry = "UPDATE TB_VMS_CTLR \r\n"
  568. " SET OPER_MODE = :p01 \r\n"
  569. " WHERE VMS_CTLR_ID = :p05 \r\n";
  570. String LAST_CRPR_NMBR = g_AppCfg.OPER_ID;
  571. String LAST_CRCT_DT = Now().FormatString("yyyymmddhhnnss");
  572. #if 0
  573. try
  574. {
  575. try
  576. {
  577. pADO = new TADOQuery(NULL);
  578. pADO->Close();
  579. pADO->Connection = ITSDb_GetConnection();
  580. pADO->SQL->Clear();
  581. pADO->SQL->Text = sQry;
  582. INT_VMS_MODE_REQ VmsMode;
  583. BYTE MsgSeq;
  584. memset(&VmsMode, 0x00, sizeof(VmsMode));
  585. MsgSeq = (BYTE)0x50;
  586. memcpy(VmsMode.CmdTime, AnsiString(LAST_CRCT_DT).c_str(), INT_VMS_MAX_DATETIME); /* 명령수행시각 */
  587. memcpy(VmsMode.OperId, AnsiString(LAST_CRPR_NMBR).c_str(), INT_VMS_MAX_OPER_ID); /* 운영자 ID */
  588. for (int ii = 0; ii < nSelCnt; ii++)
  589. {
  590. String sVmsNmbr = FVmsIds->Strings[ii];
  591. pADO->Parameters->ParamByName("p01")->Value = OPER_MODE;
  592. pADO->Parameters->ParamByName("p05")->Value = sVmsNmbr;
  593. pADO->ExecSQL();
  594. nOkCnt++;
  595. TVmsCtlr *pObj = VmsCtlrManager->FLists.Find(sVmsNmbr);
  596. if (pObj)
  597. {
  598. pObj->OPER_MODE = OPER_MODE;
  599. if (pObj->OPER_MODE == "A") pObj->STATE.OprMode = 'A';
  600. else if (pObj->OPER_MODE == "B") pObj->STATE.OprMode = 'B';
  601. else pObj->STATE.OprMode = 'F';
  602. }
  603. else continue;
  604. VmsMode.Unit[VmsMode.Count].VMS_CTLR_ID = sVmsNmbr.ToIntDef(0); /* VMS 제어기 번호 */
  605. if (OPER_MODE == "A") VmsMode.Unit[VmsMode.Count].Mode = 'A';
  606. else if (OPER_MODE == "B") VmsMode.Unit[VmsMode.Count].Mode = 'B';
  607. else VmsMode.Unit[VmsMode.Count].Mode = 'F';
  608. VmsMode.Count++;
  609. if (VmsMode.Count >= INT_VMS_MAX_MODE)
  610. {
  611. CComm_VmsModeReq(&VmsMode, MsgSeq);
  612. }
  613. }
  614. if (VmsMode.Count > 0)
  615. {
  616. CComm_VmsModeReq(&VmsMode, MsgSeq);
  617. }
  618. }
  619. catch(EDatabaseError &E)
  620. {
  621. DBERRORMSG("TVMS0500M::BtnModeControlClick", String(E.ClassName()), E.Message, sQry);
  622. throw Exception(String(E.ClassName()) + E.Message);
  623. }
  624. catch(Exception &e)
  625. {
  626. DBERRORMSG("TVMS0500M::BtnModeControlClick", String(e.ClassName()), e.Message, sQry);
  627. throw Exception(String(e.ClassName()) + e.Message);
  628. }
  629. }
  630. __finally
  631. {
  632. if (pADO)
  633. {
  634. pADO->Close();
  635. delete pADO;
  636. }
  637. }
  638. sMsg = String(nSelCnt) + " 개의 선택 VMS 중에 " + String(nOkCnt) + " 개의 VMS 운영모드를 변경하였습니다.";
  639. Application->MessageBox(sMsg.c_str(), sTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  640. for (int ii = 0; ii < nSelCnt; ii++)
  641. {
  642. String sVmsNmbr = FVmsIds->Strings[ii];
  643. VmsCtlrManager->InsVmsControlHs(LAST_CRCT_DT, sVmsNmbr, "V06", OPER_MODE, "1", LAST_CRPR_NMBR);
  644. }
  645. //RefreshStatus();
  646. #endif
  647. }
  648. //---------------------------------------------------------------------------
  649. void __fastcall TFrmVmsRemoteCtrl::BtnWebCamUrlClick(TObject *Sender)
  650. {
  651. #if 0
  652. if (FSelVmsObj)
  653. {
  654. if (FSelVmsObj->WEB_CMRA_IP.Trim() != "")
  655. {
  656. String sUrl = "http://" + FSelVmsObj->WEB_CMRA_IP.Trim();
  657. //if (FSelVmsObj->WEB_CMRA_PORT != "")
  658. //{
  659. // sUrl = sUrl + ":" + FSelVmsObj->WEB_CMRA_PORT;
  660. //}
  661. ShellExecute(NULL, NULL, sUrl.c_str(), NULL, NULL, 0);
  662. }
  663. }
  664. #endif
  665. }
  666. //---------------------------------------------------------------------------
  667. bool __fastcall TFrmVmsRemoteCtrl::UpdateVmsParam2(String AVmsNmbr, void *pData)
  668. {
  669. return true;
  670. }
  671. //---------------------------------------------------------------------------
  672. void __fastcall TFrmVmsRemoteCtrl::TmrCommandTimer(TObject *Sender)
  673. {
  674. TmrCommand->Enabled = false;
  675. }
  676. //---------------------------------------------------------------------------
  677. void __fastcall TFrmVmsRemoteCtrl::PgControlPageChanging(TObject *Sender, TcxTabSheet *NewPage,
  678. bool &AllowChange)
  679. {
  680. if (BtnAllSelect->Visible == false) BtnAllSelect->Visible = true;
  681. if (BtnAllClear->Visible == false) BtnAllClear->Visible = true;
  682. if (BtnReverse->Visible == false) BtnReverse->Visible = true;
  683. }
  684. //---------------------------------------------------------------------------
  685. void __fastcall TFrmVmsRemoteCtrl::Col08CustomDrawCell(TcxCustomGridTableView *Sender, TcxCanvas *ACanvas,
  686. TcxGridTableDataCellViewInfo *AViewInfo, bool &ADone)
  687. {
  688. try
  689. {
  690. int iIndex = AViewInfo->Item->Index;
  691. ACanvas->Canvas->Brush->Style = bsSolid;
  692. String val = AViewInfo->GridRecord->DisplayTexts[iIndex];
  693. ACanvas->Canvas->Font->Color = clBlack;
  694. if (val == "Normal") ACanvas->Canvas->Brush->Color = clLime;
  695. else if (val == "Delayed") ACanvas->Canvas->Brush->Color = clRed;
  696. else if (val == "Time out") ACanvas->Canvas->Brush->Color = clRed;
  697. else ACanvas->Canvas->Brush->Color = clSilver;
  698. } catch(...) {}
  699. }
  700. //---------------------------------------------------------------------------
  701. void __fastcall TFrmVmsRemoteCtrl::ErrorMsg(String AErrMsg)
  702. {
  703. LblErrMsg->Caption = AErrMsg;
  704. LblErrMsg->BringToFront();
  705. LblErrMsg->Transparent = true;
  706. LblErrMsg->Style->Font->Color = clWhite;
  707. LblErrMsg->Style->TextColor = clWhite;
  708. LblErrMsg->Visible = true;
  709. LblErrMsg->Refresh();
  710. LblErrMsg->BringToFront();
  711. }
  712. //---------------------------------------------------------------------------
  713. void __fastcall TFrmVmsRemoteCtrl::WebCamPlay(String AVmsNo)
  714. {
  715. if (LblErrMsg->Visible) LblErrMsg->Visible = false;
  716. reMsg->Lines->Clear();
  717. reMsg->Lines->Add("Connect...");
  718. WebCamStop();
  719. TVmsCtlr *pObj = VmsCtlrManager->FLists.Find(AVmsNo);
  720. if (!pObj) return;
  721. PnlRtspStream->Caption = "영상 연결 중...";
  722. PnlRtspStream->Refresh();
  723. try
  724. {
  725. FStrmAddr = pObj->VMS_RTSP_ADDR.Trim();
  726. if (FStrmAddr != "")
  727. {
  728. FFPlayer1->AspectRatio = ChkFullScreen->Checked ? -1 : 0;
  729. FFPlayer1->TryOpen(FStrmAddr, PnlRtspStream->Handle);
  730. //FStrmUser = pObj->WEB_CMRA_ID;
  731. //FStrmPswd = pObj->WEB_CMRA_PWD;
  732. FStrmHttp = FStrmAddr;
  733. FStrmPlay = true;
  734. }
  735. else
  736. {
  737. FStrmHttp = "";
  738. PnlRtspStream->Caption = "영상정보가 없습니다...";
  739. }
  740. }
  741. catch(Exception &e)
  742. {
  743. }
  744. }
  745. //---------------------------------------------------------------------------
  746. void __fastcall TFrmVmsRemoteCtrl::WebCamStop()
  747. {
  748. if (!FStrmPlay) return;
  749. try
  750. {
  751. if (FFPlayer1->ScreenHandle != NULL)
  752. {
  753. FFPlayer1->Stop(true);
  754. PostMessage(FFPlayer1->ScreenHandle, CM_INVALIDATE, 0, 0);
  755. UpdateWindow(FFPlayer1->ScreenHandle);
  756. //FFPlayer1->ScreenHandle = NULL;
  757. }
  758. }
  759. catch(Exception &e)
  760. {
  761. }
  762. PnlRtspStream->Caption = "Disconnected";
  763. PnlRtspStream->Refresh();
  764. FStrmPlay = false;
  765. }
  766. //---------------------------------------------------------------------------
  767. void __fastcall TFrmVmsRemoteCtrl::BtnModuleControlClick(TObject *Sender)
  768. {
  769. TcxButton *pBtnControl = (TcxButton*)Sender;
  770. if (!GetSelListItems(false)) {
  771. return;
  772. }
  773. String sMsg = "";
  774. sMsg = "VMS 원격제어 - 전광판 전원 제어\r\n선택하신 VMS에 전광판 전원 제어 명령을 전송하시겠습니까?\r\n(통신상태에 따라 명령이 실행되지 않을 수 있습니다.)";
  775. if (Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_YESNO|MB_ICONWARNING|MB_APPLMODAL) != IDYES) return;
  776. int result;
  777. int nOkCnt = 0;
  778. int nTotal = 0;
  779. int nSelCnt = FVmsIds->Count;
  780. for (int ii = 0; ii < nSelCnt; ii++)
  781. {
  782. String sVmsCtlrId = FVmsIds->Strings[ii];
  783. FOR_STL(TCommInfo*, pCommInfo, FCommCtrlTarget->FLists) {
  784. nTotal++;
  785. result = CComm_VmsReqPowerOnOff(pCommInfo->SRVR_IP, pCommInfo->CMNC_PORT, g_AppCfg.OPER_ID, sVmsCtlrId, pBtnControl->Tag == 1);
  786. if (VERR_NONE == result) {
  787. nOkCnt++;
  788. }
  789. Sleep(200);
  790. Application->ProcessMessages();
  791. }
  792. }
  793. sMsg = String(nSelCnt) + " 개의 선택 VMS 중에 " + String(nOkCnt) + " 개의 VMS로 전광판 전원 제어 명령을 요청하였습니다.";
  794. Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  795. }
  796. //---------------------------------------------------------------------------
  797. void __fastcall TFrmVmsRemoteCtrl::BtnResetClick(TObject *Sender)
  798. {
  799. TcxButton *pBtnControl = (TcxButton*)Sender;
  800. if (!GetSelListItems(false)) {
  801. return;
  802. }
  803. String sMsg = "";
  804. sMsg = "VMS 원격제어 - 제어기 리셋\r\n선택하신 VMS에 제어기 리셋 명령을 전송하시겠습니까?\r\n(통신상태에 따라 명령이 실행되지 않을 수 있습니다.)";
  805. if (Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_YESNO|MB_ICONWARNING|MB_APPLMODAL) != IDYES) return;
  806. int result;
  807. int nOkCnt = 0;
  808. int nTotal = 0;
  809. int nSelCnt = FVmsIds->Count;
  810. for (int ii = 0; ii < nSelCnt; ii++)
  811. {
  812. String sVmsCtlrId = FVmsIds->Strings[ii];
  813. FOR_STL(TCommInfo*, pCommInfo, FCommCtrlTarget->FLists) {
  814. nTotal++;
  815. result = CComm_VmsReqReset(pCommInfo->SRVR_IP, pCommInfo->CMNC_PORT, g_AppCfg.OPER_ID, sVmsCtlrId);
  816. if (VERR_NONE == result) {
  817. nOkCnt++;
  818. }
  819. Sleep(200);
  820. Application->ProcessMessages();
  821. }
  822. }
  823. sMsg = String(nSelCnt) + " 개의 선택 VMS 중에 " + String(nOkCnt) + " 개의 VMS로 제어기 리셋 명령을 요청하였습니다.";
  824. Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  825. }
  826. //---------------------------------------------------------------------------
  827. void __fastcall TFrmVmsRemoteCtrl::BtnBlankDisplayClick(TObject *Sender)
  828. {
  829. TcxButton *pBtnControl = (TcxButton*)Sender;
  830. if (!GetSelListItems(false)) {
  831. return;
  832. }
  833. String sMsg = "";
  834. sMsg = "VMS 원격제어 - 화면 삭제(빈화면표출)\r\n선택하신 VMS에 화면 삭제(빈화면표출) 명령을 전송하시겠습니까?\r\n(통신상태에 따라 명령이 실행되지 않을 수 있습니다.)";
  835. if (Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_YESNO|MB_ICONWARNING|MB_APPLMODAL) != IDYES) return;
  836. int result;
  837. int nOkCnt = 0;
  838. int nTotal = 0;
  839. int nSelCnt = FVmsIds->Count;
  840. for (int ii = 0; ii < nSelCnt; ii++)
  841. {
  842. String sVmsCtlrId = FVmsIds->Strings[ii];
  843. FOR_STL(TCommInfo*, pCommInfo, FCommCtrlTarget->FLists) {
  844. nTotal++;
  845. result = CComm_VmsReqBlank(pCommInfo->SRVR_IP, pCommInfo->CMNC_PORT, g_AppCfg.OPER_ID, sVmsCtlrId);
  846. if (VERR_NONE == result) {
  847. nOkCnt++;
  848. }
  849. Sleep(200);
  850. Application->ProcessMessages();
  851. }
  852. }
  853. sMsg = String(nSelCnt) + " 개의 선택 VMS 중에 " + String(nOkCnt) + " 개의 VMS로 화면 삭제(빈화면표출) 명령을 요청하였습니다.";
  854. Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  855. }
  856. //---------------------------------------------------------------------------
  857. void __fastcall TFrmVmsRemoteCtrl::BtnBrghControl0Click(TObject *Sender)
  858. {
  859. TcxButton *pBtnControl = (TcxButton*)Sender;
  860. if (!GetSelListItems(false)) {
  861. return;
  862. }
  863. int setValue = 0;
  864. String sCommand = "휘도설정(자동 모드)";
  865. if (pBtnControl->Tag == 0) {
  866. setValue = 0;
  867. sCommand = "휘도설정(자동 모드)";
  868. }
  869. else
  870. if (pBtnControl->Tag == 1) {
  871. setValue = SeWeekBrgh->Value;
  872. sCommand = "휘도설정(주간 모드) 밝기 " + String(setValue);
  873. }
  874. else if (pBtnControl->Tag == 2) {
  875. setValue = SeNghtBrgh->Value;
  876. sCommand = "휘도설정(야간 모드) 밝기 " + String(setValue);
  877. }
  878. else if (pBtnControl->Tag == 3) {
  879. setValue = SeUserBrgh->Value;
  880. sCommand = "휘도설정(수동 모드) 밝기 " + String(setValue);
  881. }
  882. String sMsg = "";
  883. sMsg = "VMS 원격제어 - " + sCommand + "\r\n선택하신 VMS에 " + sCommand + " 명령을 전송하시겠습니까?\r\n(통신상태에 따라 명령이 실행되지 않을 수 있습니다.)";
  884. if (Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_YESNO|MB_ICONWARNING|MB_APPLMODAL) != IDYES) return;
  885. int result;
  886. int nOkCnt = 0;
  887. int nTotal = 0;
  888. int nSelCnt = FVmsIds->Count;
  889. BYTE Value = (BYTE)(setValue & 0xFF);
  890. for (int ii = 0; ii < nSelCnt; ii++)
  891. {
  892. String sVmsCtlrId = FVmsIds->Strings[ii];
  893. FOR_STL(TCommInfo*, pCommInfo, FCommCtrlTarget->FLists) {
  894. nTotal++;
  895. result = CComm_VmsReqLumiSet(pCommInfo->SRVR_IP, pCommInfo->CMNC_PORT, g_AppCfg.OPER_ID, sVmsCtlrId, (BYTE)pBtnControl->Tag, Value);
  896. if (VERR_NONE == result) {
  897. nOkCnt++;
  898. }
  899. Sleep(200);
  900. Application->ProcessMessages();
  901. }
  902. }
  903. sMsg = String(nSelCnt) + " 개의 선택 VMS 중에 " + String(nOkCnt) + " 개의 VMS로 " + sCommand + " 명령을 요청하였습니다.";
  904. Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  905. }
  906. //---------------------------------------------------------------------------
  907. void __fastcall TFrmVmsRemoteCtrl::BtnModlErrRateClick(TObject *Sender)
  908. {
  909. TcxButton *pBtnControl = (TcxButton*)Sender;
  910. if (!GetSelListItems(false)) {
  911. return;
  912. }
  913. String sCommand = "모듈장애율설정";
  914. String sMsg = "";
  915. sMsg = "VMS 원격제어 - " + sCommand + "\r\n선택하신 VMS에 " + sCommand + " 명령을 전송하시겠습니까?\r\n(통신상태에 따라 명령이 실행되지 않을 수 있습니다.)";
  916. if (Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_YESNO|MB_ICONWARNING|MB_APPLMODAL) != IDYES) return;
  917. int result;
  918. int nOkCnt = 0;
  919. int nTotal = 0;
  920. int nSelCnt = FVmsIds->Count;
  921. for (int ii = 0; ii < nSelCnt; ii++)
  922. {
  923. String sVmsCtlrId = FVmsIds->Strings[ii];
  924. FOR_STL(TCommInfo*, pCommInfo, FCommCtrlTarget->FLists) {
  925. nTotal++;
  926. result = CComm_VmsReqModlErrRate(pCommInfo->SRVR_IP, pCommInfo->CMNC_PORT, g_AppCfg.OPER_ID, sVmsCtlrId, (BYTE)SeERR_MODL_RT->Value);
  927. if (VERR_NONE == result) {
  928. nOkCnt++;
  929. }
  930. Sleep(200);
  931. Application->ProcessMessages();
  932. }
  933. }
  934. sMsg = String(nSelCnt) + " 개의 선택 VMS 중에 " + String(nOkCnt) + " 개의 VMS로 " + sCommand + " 명령을 요청하였습니다.";
  935. Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  936. }
  937. //---------------------------------------------------------------------------
  938. void __fastcall TFrmVmsRemoteCtrl::BtnDfltScnrRunTmClick(TObject *Sender)
  939. {
  940. TcxButton *pBtnControl = (TcxButton*)Sender;
  941. if (!GetSelListItems(false)) {
  942. return;
  943. }
  944. String sCommand = "통신장애시간설정";
  945. String sMsg = "";
  946. sMsg = "VMS 원격제어 - " + sCommand + "\r\n선택하신 VMS에 " + sCommand + " 명령을 전송하시겠습니까?\r\n(통신상태에 따라 명령이 실행되지 않을 수 있습니다.)";
  947. if (Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_YESNO|MB_ICONWARNING|MB_APPLMODAL) != IDYES) return;
  948. int result;
  949. int nOkCnt = 0;
  950. int nTotal = 0;
  951. int nSelCnt = FVmsIds->Count;
  952. for (int ii = 0; ii < nSelCnt; ii++)
  953. {
  954. String sVmsCtlrId = FVmsIds->Strings[ii];
  955. FOR_STL(TCommInfo*, pCommInfo, FCommCtrlTarget->FLists) {
  956. nTotal++;
  957. result = CComm_VmsReqCmncErrMin(pCommInfo->SRVR_IP, pCommInfo->CMNC_PORT, g_AppCfg.OPER_ID, sVmsCtlrId, (BYTE)CbDFLT_SCNR_RUN_TM->ItemIndex);
  958. if (VERR_NONE == result) {
  959. nOkCnt++;
  960. }
  961. Sleep(200);
  962. Application->ProcessMessages();
  963. }
  964. }
  965. sMsg = String(nSelCnt) + " 개의 선택 VMS 중에 " + String(nOkCnt) + " 개의 VMS로 " + sCommand + " 명령을 요청하였습니다.";
  966. Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  967. }
  968. //---------------------------------------------------------------------------
  969. void __fastcall TFrmVmsRemoteCtrl::FFPlayer1State(TObject *Sender, TPlayState APlayState)
  970. {
  971. switch(APlayState)
  972. {
  973. case Ffbasecomponent::psPlay: reMsg->Lines->Add("Play..."); break;
  974. case Ffbasecomponent::psResume: reMsg->Lines->Add("Resume."); break;
  975. case Ffbasecomponent::psPause: reMsg->Lines->Add("Pause.."); break;
  976. case Ffbasecomponent::psStep: reMsg->Lines->Add("Step..."); break;
  977. case Ffbasecomponent::psStop:
  978. if (FFPlayer1->ScreenHandle != NULL)
  979. {
  980. PostMessage(FFPlayer1->ScreenHandle, CM_INVALIDATE, 0, 0);
  981. UpdateWindow(FFPlayer1->ScreenHandle);
  982. //FFPlayer1->ScreenHandle = NULL;
  983. }
  984. reMsg->Lines->Add("Stop...");
  985. break;
  986. case Ffbasecomponent::psEnd:
  987. {
  988. FFPlayer1->Stop(true);
  989. PostMessage(FFPlayer1->ScreenHandle, CM_INVALIDATE, 0, 0);
  990. UpdateWindow(FFPlayer1->ScreenHandle);
  991. //FFPlayer1->ScreenHandle = NULL;
  992. }
  993. reMsg->Lines->Add("End...");
  994. break;
  995. }
  996. }
  997. //---------------------------------------------------------------------------
  998. void __fastcall TFrmVmsRemoteCtrl::FFPlayer1OpenFailed(TObject *Sender)
  999. {
  1000. //ErrorMsg("웹카메라에 연결할 수 없습니다.");
  1001. //WebCamStop();
  1002. }
  1003. //---------------------------------------------------------------------------
  1004. void __fastcall TFrmVmsRemoteCtrl::ChkFullScreenClick(TObject *Sender)
  1005. {
  1006. FFPlayer1->AspectRatio = ChkFullScreen->Checked ? -1 : 0;
  1007. }
  1008. //---------------------------------------------------------------------------
  1009. void __fastcall TFrmVmsRemoteCtrl::BtnSearchClick(TObject *Sender)
  1010. {
  1011. VmsCtlrManager->LoadStatusFromDb();
  1012. VmsCtlrManager->LoadParaFromDb();
  1013. RefreshStatusInfo();
  1014. EdFocus->SetFocus();
  1015. }
  1016. //---------------------------------------------------------------------------
  1017. void __fastcall TFrmVmsRemoteCtrl::BtnAllSelectClick(TObject *Sender)
  1018. {
  1019. TcxButton *pBtn = (TcxButton*)Sender;
  1020. CMM_CheckAllListItem(TvList, ColumnSel->Index, pBtn->Tag);
  1021. }
  1022. //---------------------------------------------------------------------------
  1023. void __fastcall TFrmVmsRemoteCtrl::ColRPRS_STTSCustomDrawCell(TcxCustomGridTableView *Sender, TcxCanvas *ACanvas, TcxGridTableDataCellViewInfo *AViewInfo,
  1024. bool &ADone)
  1025. {
  1026. try
  1027. {
  1028. TColor tColor;
  1029. String sStatus = AViewInfo->GridRecord->DisplayTexts[AViewInfo->Item->Index];
  1030. tColor = ACanvas->Brush->Color;
  1031. if (sStatus.Pos("알수")) tColor = clGray;
  1032. else if (sStatus.Pos("일수")) tColor = clGray;
  1033. else if (sStatus.Pos("이상")) tColor = clRed;
  1034. else if (sStatus.Pos("오류")) tColor = clRed;
  1035. else if (sStatus.Pos("불량")) tColor = clRed;
  1036. else if (sStatus.Pos("비정상")) tColor = clRed;
  1037. else if (sStatus.Pos("장애")) tColor = clRed;
  1038. else if (sStatus.Pos("켜짐")) tColor = clYellow;
  1039. else if (sStatus.Pos("열림")) tColor = clRed;
  1040. else if (sStatus.Pos("동작")) tColor = clYellow;
  1041. else if (sStatus.Pos("가동")) tColor = clYellow;
  1042. else tColor = clLime; // 정상
  1043. ACanvas->SetBrushColor(tColor);
  1044. ACanvas->Font->Color = clBlack;
  1045. /*if (AViewInfo->GridRecord->Selected)
  1046. {
  1047. ACanvas->Font->Color = clBlack;
  1048. }*/
  1049. }
  1050. catch(Exception &e)
  1051. {
  1052. }
  1053. }
  1054. //---------------------------------------------------------------------------
  1055. void __fastcall TFrmVmsRemoteCtrl::CbDFLT_SCNR_RUN_TMClick(TObject *Sender)
  1056. {
  1057. BtnDfltScnrRunTm->SetFocus();
  1058. }
  1059. //---------------------------------------------------------------------------