VMSM100MF.cpp 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986
  1. /****************************************************************************
  2. * @source :
  3. * @description :
  4. ****************************************************************************
  5. * DATE AUTHOR DESCRIPTION
  6. * --------------------------------------------------------------------------
  7. * 2016/07/10 shjung 최초작성
  8. *
  9. ****************************************************************************/
  10. //---------------------------------------------------------------------------
  11. #include <vcl.h>
  12. #include "ITSSkinF.h"
  13. #include "ITSUtilF.h"
  14. #include "AppGlobalF.h"
  15. #pragma hdrstop
  16. #include "VMSM100MF.h"
  17. //---------------------------------------------------------------------------
  18. #pragma package(smart_init)
  19. #pragma link "cxButtons"
  20. #pragma link "cxCalendar"
  21. #pragma link "cxContainer"
  22. #pragma link "cxControls"
  23. #pragma link "cxDropDownEdit"
  24. #pragma link "cxEdit"
  25. #pragma link "cxGraphics"
  26. #pragma link "cxGroupBox"
  27. #pragma link "cxLabel"
  28. #pragma link "cxLookAndFeelPainters"
  29. #pragma link "cxLookAndFeels"
  30. #pragma link "cxMaskEdit"
  31. #pragma link "cxPC"
  32. #pragma link "cxPCdxBarPopupMenu"
  33. #pragma link "cxSpinEdit"
  34. #pragma link "cxSplitter"
  35. #pragma link "cxTextEdit"
  36. #pragma link "cxTimeEdit"
  37. #pragma link "dxSkinBlack"
  38. #pragma link "dxSkinBlue"
  39. #pragma link "dxSkinCaramel"
  40. #pragma link "dxSkinCoffee"
  41. #pragma link "dxSkinDarkRoom"
  42. #pragma link "dxSkinDarkSide"
  43. #pragma link "dxSkinFoggy"
  44. #pragma link "dxSkinGlassOceans"
  45. #pragma link "dxSkiniMaginary"
  46. #pragma link "dxSkinLilian"
  47. #pragma link "dxSkinLiquidSky"
  48. #pragma link "dxSkinLondonLiquidSky"
  49. #pragma link "dxSkinMcSkin"
  50. #pragma link "dxSkinMoneyTwins"
  51. #pragma link "dxSkinOffice2007Black"
  52. #pragma link "dxSkinOffice2007Blue"
  53. #pragma link "dxSkinOffice2007Green"
  54. #pragma link "dxSkinOffice2007Pink"
  55. #pragma link "dxSkinOffice2007Silver"
  56. #pragma link "dxSkinOffice2010Black"
  57. #pragma link "dxSkinOffice2010Blue"
  58. #pragma link "dxSkinOffice2010Silver"
  59. #pragma link "dxSkinsCore"
  60. #pragma link "dxSkinscxPCPainter"
  61. #pragma link "dxSkinSeven"
  62. #pragma link "dxSkinSharp"
  63. #pragma link "dxSkinSilver"
  64. #pragma link "dxSkinStardust"
  65. #pragma link "cxRadioGroup"
  66. #pragma link "cxClasses"
  67. #pragma link "cxCustomData"
  68. #pragma link "cxData"
  69. #pragma link "cxDataStorage"
  70. #pragma link "cxDBData"
  71. #pragma link "cxFilter"
  72. #pragma link "cxGrid"
  73. #pragma link "cxGridCustomTableView"
  74. #pragma link "cxGridCustomView"
  75. #pragma link "cxGridDBTableView"
  76. #pragma link "cxGridLevel"
  77. #pragma link "cxGridTableView"
  78. #pragma link "cxStyles"
  79. #pragma link "cxCheckBox"
  80. #pragma link "FRAME_VmsListF"
  81. #pragma resource "*.dfm"
  82. TVMSM100M *VMSM100M = NULL;
  83. //---------------------------------------------------------------------------
  84. __fastcall TVMSM100M::TVMSM100M(TComponent* Owner)
  85. : TForm(Owner)
  86. {
  87. ITSSkin_Load(this);
  88. CMM_LoadForm(g_sFormsDir, this);
  89. BtnSaveAll->Caption = "Apply All VMS";
  90. BtnSaveAll->Hint = "Apply the same value to the entire VMS.";
  91. FUpdate= false;
  92. //FTitle = "VMS 기본정보 관리";
  93. FTitle = Caption;
  94. MapStart = false;
  95. #if 0
  96. FRAMEGisMap1->FlashCallbackFunc = TVMSM100M_FlashCall;
  97. FRAMEGisMap1->DrawMode = 1; //구간정보표출
  98. FRAMEGisMap1->ImgPan->Visible = true;
  99. FRAMEGisMap1->ImgZoomIn->Visible = true;
  100. FRAMEGisMap1->ImgZoomOut->Visible = true;
  101. FRAMEGisMap1->ImgSel->Visible = true;
  102. FRAMEGisMap1->ImgStnd->Visible = true;
  103. FRAMEGisMap1->ImgRefresh->Visible = true;
  104. FRAMEGisMap1->LbDef->Caption = "(선택메뉴를 클릭하여 위치를 선택합니다.)";
  105. FRAMEGisMap1->LbDef->Hint = FRAMEGisMap1->LbDef->Caption;
  106. FRAMEGisMap1->LbDef->Visible = true;
  107. #endif
  108. //FRAMEVmsList1->Column02->Visible = false;
  109. FRAMEVmsList1->PnlTop->Visible = false;
  110. FRAMEVmsList1->PnlBottom->Visible = false;
  111. FRAMEVmsList1->ColumnSel->Visible = false;
  112. FRAMEVmsList1->Column05->Visible = true;
  113. FRAMEVmsList1->Column06->Visible = true;
  114. FRAMEVmsList1->Column07->Visible = true;
  115. FRAMEVmsList1->Column08->Visible = true;
  116. FRAMEVmsList1->Column09->Visible = true;
  117. FRAMEVmsList1->Column10->Visible = true;
  118. FRAMEVmsList1->Column13->Visible = true;
  119. m_pGDC = FRAMEVmsList1->TvList->DataController;
  120. EditMode = false;
  121. }
  122. //---------------------------------------------------------------------------
  123. /*
  124. * 닫기버튼 이나 x버튼 클릭시 공통으로 처리하는 로직이들어간다..
  125. * Form과 DataModule class를 delete시킨다.
  126. * arguments
  127. *
  128. * return
  129. * void
  130. */
  131. void __fastcall TVMSM100M::CommClose()
  132. {
  133. try
  134. {
  135. CMM_SaveForm(g_sFormsDir, this);
  136. }
  137. catch(...)
  138. {
  139. }
  140. }
  141. //---------------------------------------------------------------------------
  142. /*
  143. * Form을 보여줄때 호출되는 event 메서드이다.
  144. * arguments
  145. * Sender : event handler 객체
  146. * return
  147. * void
  148. */
  149. void __fastcall TVMSM100M::FormShow(TObject *Sender)
  150. {
  151. Refresh();
  152. APP_FillCode(CbUsagType, "VUT");
  153. APP_FillCode(CbType, "VMP");
  154. try
  155. {
  156. VmsManager->FLists.Lock();
  157. FOR_STL(TVmsCtlr*, pObj, VmsManager->FLists)
  158. {
  159. if (pObj->DEL_YN == "Y") continue;
  160. pObj->FData3 = NULL;
  161. }
  162. }
  163. __finally
  164. {
  165. VmsManager->FLists.UnLock();
  166. }
  167. FormInit();
  168. ChangeEditMode(1);
  169. TmrShow->Enabled = true;
  170. }
  171. //---------------------------------------------------------------------------
  172. /*
  173. * form 초기화
  174. *
  175. * arguments
  176. *
  177. * return
  178. * void
  179. */
  180. void __fastcall TVMSM100M::FormInit()
  181. {
  182. EdNmbr->Text = "";
  183. EdId->Text = "";
  184. EdVmsId->Text = "";
  185. EdVmsNm->Text = "";
  186. SeMaxPhase->Value = 10;
  187. CbUsagType->ItemIndex = 0;
  188. CbType->ItemIndex = 0;
  189. SePosX->Value = 0;
  190. SePosY->Value = 0;
  191. EdCtlrIp->Text = "";
  192. EdCmncPort->Text = "";
  193. EdWebCamIp->Text = "";
  194. EdWebCamPort->Text = "";
  195. EdWebCamId->Text = "";
  196. EdWebCamPswd->Text = "";
  197. EdWebCamStrm->Text = "";
  198. cxTimeOn->Clear();
  199. cxTimeOff->Clear();
  200. cxTimeOn->EditValue = Now().FormatString("hh:nn");
  201. cxTimeOn->EditValue = "00:00";
  202. cxTimeOff->EditValue = Now().FormatString("hh:nn");
  203. cxTimeOff->EditValue = "00:00";
  204. FNewDb = false;
  205. }
  206. //---------------------------------------------------------------------------
  207. /*
  208. * Form이 Show되고 난 후 최초 1회 수행되는 타이머 이벤트
  209. * arguments
  210. * Sender : event handler 객체
  211. * return
  212. * void
  213. */
  214. void __fastcall TVMSM100M::TmrShowTimer(TObject *Sender)
  215. {
  216. TmrShow->Enabled = false;
  217. #if 0
  218. FRAMEGisMap1->LoadTraffic = false;
  219. FRAMEGisMap1->LinkLevel = 2;
  220. FRAMEGisMap1->LoadGisMap();
  221. #else
  222. //FRAMEGoogleMap1->LinkLevel = 1;
  223. //FRAMEGoogleMap1->LoadGisMap();
  224. MapStart = true;
  225. #endif
  226. FRAMEVmsList1->UpdateList();
  227. UpdateVmsIcon();
  228. }
  229. //---------------------------------------------------------------------------
  230. /*
  231. * Close 버튼 클릭 이벤트 핸들러
  232. * arguments
  233. * Sender : event handler 객체
  234. * return
  235. * void
  236. */
  237. void __fastcall TVMSM100M::BtnCloseClick(TObject *Sender)
  238. {
  239. Close();
  240. }
  241. //---------------------------------------------------------------------------
  242. void __fastcall TVMSM100M::FormClose(TObject *Sender, TCloseAction &Action)
  243. {
  244. CommClose();
  245. VMSM100M = NULL;
  246. Action = caFree;
  247. }
  248. //---------------------------------------------------------------------------
  249. void __fastcall TVMSM100M::FormCloseQuery(TObject *Sender, bool &CanClose)
  250. {
  251. if (FUpdate)
  252. {
  253. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_14, 0);
  254. }
  255. FRAMEVmsList1->OnCloseQuery(CanClose);
  256. }
  257. //---------------------------------------------------------------------------
  258. void __fastcall TVMSM100M::DisplayInfo(TVmsCtlr* AObj, bool AMoveVms/*=false*/)
  259. {
  260. FormInit();
  261. if (!AObj) return;
  262. #if 0
  263. if (AMoveVms)
  264. {
  265. FSelMkr = FindObjectMarker(String(AObj->VMS_CTLR_NMBR));
  266. if (FSelMkr)
  267. {
  268. FSelMkr->Icon = g_AppCfg.icon.SVMS;
  269. FSelMkr->CenterMapTo();
  270. }
  271. }
  272. #endif
  273. EdNmbr->Text = String(AObj->VMS_CTLR_NMBR);
  274. EdId->Text = AObj->VMS_ID;
  275. EdVmsId->Text = AObj->VMS_CTLR_ID;
  276. EdVmsNm->Text = AObj->VMS_NM;
  277. APP_SetCode(CbUsagType, AObj->VMS_USAG_TYPE_CD);
  278. APP_SetCode(CbType, AObj->VMS_TYPE_CD);
  279. SePosX->Value = AObj->X_CRDN;
  280. SePosY->Value = AObj->Y_CRDN;
  281. EdCtlrIp->Text = AObj->VMS_CTLR_IP;
  282. EdCmncPort->Text = AObj->VMS_CMNC_PORT;
  283. EdWebCamIp->Text = AObj->WEB_CMRA_IP;
  284. EdWebCamPort->Text = AObj->WEB_CMRA_PORT;
  285. EdWebCamId->Text = AObj->WEB_CMRA_ID;
  286. EdWebCamPswd->Text = AObj->WEB_CMRA_PWD;
  287. EdWebCamStrm->Text = AObj->STRM_SESN_NM;
  288. SeMaxPhase->Value = AObj->VMS_MAX_PHSE_NUM;
  289. cxTimeOn->Clear();
  290. cxTimeOn->EditValue = Now().FormatString("hh:nn");
  291. cxTimeOn->EditValue = "00:00";
  292. cxTimeOff->Clear();
  293. cxTimeOff->EditValue = Now().FormatString("hh:nn");
  294. cxTimeOff->EditValue = "00:00";
  295. try
  296. {
  297. if (AObj->PANL_ON_TIME.Length() == 4) // 전팡관ON시각
  298. {
  299. String sPowerOnTime = AObj->PANL_ON_TIME;
  300. sPowerOnTime.Insert(":", 3);
  301. cxTimeOn->EditValue = sPowerOnTime;
  302. }
  303. }
  304. catch(Exception &e)
  305. {
  306. }
  307. try
  308. {
  309. if (AObj->PANL_OFF_TIME.Length() == 4) // 전광판OFF시각
  310. {
  311. String sPowerOffTime = AObj->PANL_OFF_TIME;
  312. sPowerOffTime.Insert(":", 3);
  313. cxTimeOff->EditValue = sPowerOffTime;
  314. }
  315. }
  316. catch(Exception &e)
  317. {
  318. }
  319. // FRAMEGisMap1->SelectObjectByPos(SePosX->Value, SePosY->Value, true);
  320. ChangeEditMode(3);
  321. }
  322. //---------------------------------------------------------------------------
  323. void __fastcall TVMSM100M::SelListData()
  324. {
  325. }
  326. //---------------------------------------------------------------------------
  327. void __fastcall TVMSM100M::UpdateVmsIcon()
  328. {
  329. }
  330. //---------------------------------------------------------------------------
  331. void __fastcall TVMSM100M::BtnEditClick(TObject *Sender)
  332. {
  333. if (BtnEdit->Caption == MSG903)
  334. {
  335. ChangeEditMode(0);
  336. FNewDb = false;
  337. }
  338. else
  339. {
  340. String sId = EdId->Text;
  341. ChangeEditMode(1);
  342. TVmsCtlr *pObj = VmsManager->FLists.Find(sId);
  343. if (pObj)
  344. {
  345. CMM_SetGridRow(FRAMEVmsList1->CxList, FRAMEVmsList1->TvList, sId, FRAMEVmsList1->Column01->Index);
  346. DisplayInfo(pObj);
  347. }
  348. }
  349. }
  350. //---------------------------------------------------------------------------
  351. void __fastcall TVMSM100M::ChangeEditMode(int AEdit)
  352. {
  353. bool bEnabled = false;
  354. switch(AEdit)
  355. {
  356. case 0: //편집버튼클릭
  357. {
  358. BtnEdit->Enabled = true;
  359. BtnInsert->Enabled = false;
  360. BtnDelete->Enabled = false;
  361. BtnSave->Enabled = true;
  362. BtnEdit->Caption = MSG901;
  363. BtnEdit->Hint = MSG902;
  364. EditMode = true;
  365. }
  366. break;
  367. case 1: //편집[취소]버튼클릭
  368. {
  369. FormInit(); //화면을 모두 지운다.
  370. BtnEdit->Enabled = false;
  371. BtnInsert->Enabled = true;
  372. BtnDelete->Enabled = false;
  373. BtnSave->Enabled = false;
  374. BtnEdit->Caption = MSG903;
  375. BtnEdit->Hint = MSG904;
  376. //bEnabled = true;
  377. EditMode = false;
  378. }
  379. break;
  380. case 2: //추가
  381. {
  382. BtnEdit->Enabled = true;
  383. BtnInsert->Enabled = false;
  384. BtnDelete->Enabled = false;
  385. BtnSave->Enabled = true;
  386. BtnEdit->Caption = MSG901;
  387. BtnEdit->Hint = MSG902;
  388. EditMode = true;
  389. }
  390. break;
  391. case 3: //수정모드
  392. {
  393. BtnEdit->Enabled = true;
  394. BtnInsert->Enabled = true;
  395. BtnDelete->Enabled = true;
  396. BtnSave->Enabled = false;
  397. BtnEdit->Caption = MSG903;
  398. BtnEdit->Hint = MSG904;
  399. bEnabled = true;
  400. EditMode = false;
  401. }
  402. break;
  403. }
  404. if (AEdit == 0 || AEdit == 2)
  405. {
  406. FRAMEVmsList1->CxList->Enabled = false;
  407. }
  408. else
  409. {
  410. FRAMEVmsList1->CxList->Enabled = true;
  411. }
  412. PnlEdit->Enabled = EditMode;
  413. #if 0
  414. EdVmsId->Enabled = bEnabled;
  415. EdVmsNm->Enabled = bEnabled;
  416. CbUsagType->Enabled = bEnabled;
  417. CbType->Enabled = bEnabled;
  418. SePosX->Enabled = bEnabled;
  419. SePosY->Enabled = bEnabled;
  420. EdCtlrIp->Enabled = bEnabled;
  421. EdWebCamIp->Enabled = bEnabled;
  422. EdWebCamPort->Enabled = bEnabled;
  423. EdWebCamId->Enabled = bEnabled;
  424. EdWebCamPswd->Enabled = bEnabled;
  425. EdWebCamStrm->Enabled = bEnabled;
  426. cxTimeOn->Enabled = bEnabled;
  427. cxTimeOff->Enabled = bEnabled;
  428. #endif
  429. #if 0
  430. EdId->Properties->ReadOnly = bEnabled;
  431. EdRseId->Properties->ReadOnly = bEnabled;
  432. EdRoadSpotId->Properties->ReadOnly = bEnabled;
  433. EdLogCnncId->Properties->ReadOnly = bEnabled;
  434. EdLogCnncPwd->Properties->ReadOnly = bEnabled;
  435. EdIstlLctnNm->Properties->ReadOnly = bEnabled;
  436. SePosX->Properties->ReadOnly = bEnabled;
  437. SePosY->Properties->ReadOnly = bEnabled;
  438. EdIP->Properties->ReadOnly = bEnabled;
  439. EdPort->Properties->ReadOnly = bEnabled;
  440. CbMnfcCmpyCd->Properties->ReadOnly = bEnabled;
  441. SeCLCT_ABNR_BASI->Properties->ReadOnly = bEnabled;
  442. #endif
  443. }
  444. //---------------------------------------------------------------------------
  445. void __fastcall TVMSM100M::BtnInsertClick(TObject *Sender)
  446. {
  447. FormInit();
  448. //신규아이디를 얻어와서 화면을 초기화한다.
  449. int nNmbr, nId;
  450. if (!VmsManager->GetNextVmsId(nNmbr, nId))
  451. {
  452. Application->MessageBox(MSG501, FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  453. return;
  454. }
  455. EdNmbr->Text = String(nNmbr);
  456. EdId->Text = String(nId);
  457. //SePosX->Value = FNewMkr->Position->Lat;
  458. //SePosY->Value = FNewMkr->Position->Lng;
  459. ChangeEditMode(2);
  460. FNewDb = true;
  461. }
  462. //---------------------------------------------------------------------------
  463. void __fastcall TVMSM100M::BtnDeleteClick(TObject *Sender)
  464. {
  465. #if 0
  466. if (!FRAMEGisMap1->MapStart) return;
  467. #endif
  468. int nIdx = m_pGDC->FocusedRecordIndex;
  469. if (nIdx < 0) return;
  470. String sId = EdNmbr->Text;
  471. if (sId.IsEmpty())
  472. {
  473. Application->MessageBox(MSG502, FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  474. return;
  475. }
  476. String sMsg;
  477. sMsg = MSG503 + sId;
  478. sMsg+= MSG504;
  479. if (Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES) return;
  480. TVmsCtlr *pObj = VmsManager->FLists.Find(sId);
  481. if (pObj)
  482. {
  483. if (VmsManager->DeleteVms(pObj))
  484. {
  485. pObj->DEL_YN = "Y";
  486. FRAMEVmsList1->UpdateList();
  487. }
  488. FUpdate = true;
  489. Application->MessageBox(MSG505, FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  490. FormInit();
  491. ChangeEditMode(1);
  492. //UpdateVmsIcon();
  493. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_14, 0);
  494. }
  495. }
  496. //---------------------------------------------------------------------------
  497. void __fastcall TVMSM100M::BtnSaveClick(TObject *Sender)
  498. {
  499. if (EdNmbr->Text.IsEmpty() ||
  500. EdId->Text.Trim().IsEmpty() ||
  501. EdVmsId->Text.Trim().IsEmpty() ||
  502. EdVmsNm->Text.Trim().IsEmpty() ||
  503. SePosX->Value == 0 ||
  504. SePosY->Value == 0 ||
  505. CbUsagType->Text.IsEmpty() ||
  506. CbType->Text.IsEmpty() ||
  507. EdCtlrIp->Text.IsEmpty())
  508. {
  509. Application->MessageBox(MSG506, FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  510. return;
  511. }
  512. String sNmbr = EdNmbr->Text;
  513. String sId = EdId->Text;
  514. int nNmbr = sNmbr.ToInt();
  515. if (!ITSUtil_CheckIpAddress(EdCtlrIp->Text.Trim()))
  516. {
  517. Application->MessageBox(MSG507, FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  518. return;
  519. }
  520. if (EdWebCamIp->Text.Trim() != "")
  521. {
  522. if (!ITSUtil_CheckIpAddress(EdCtlrIp->Text.Trim()))
  523. {
  524. Application->MessageBox(MSG508, FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  525. return;
  526. }
  527. }
  528. String sVmsId = EdVmsId->Text.Trim();
  529. VmsManager->FLists.Lock();
  530. FOR_STL(TVmsCtlr*, pTmpObj, VmsManager->FLists)
  531. {
  532. if (pTmpObj->DEL_YN == "Y") continue;
  533. if (pTmpObj->VMS_CTLR_NMBR == nNmbr) continue; //자기자신
  534. if (pTmpObj->VMS_CTLR_ID == sVmsId)
  535. {
  536. Application->MessageBox(MSG509, FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  537. return;
  538. }
  539. }
  540. VmsManager->FLists.UnLock();
  541. TVmsCtlr *pObj;
  542. if (FNewDb)
  543. pObj = new TVmsCtlr();
  544. else
  545. pObj = VmsManager->FLists.Find(sNmbr);
  546. if (pObj)
  547. {
  548. pObj->VMS_CTLR_NMBR = nNmbr;
  549. pObj->VMS_ID = sId;
  550. pObj->VMS_CTLR_ID = sVmsId;
  551. pObj->VMS_NM = EdVmsNm->Text.Trim();
  552. pObj->VMS_USAG_TYPE_CD = APP_GetCode(CbUsagType);
  553. pObj->VMS_TYPE_CD = APP_GetCode(CbType);
  554. pObj->X_CRDN = SePosX->Value;
  555. pObj->Y_CRDN = SePosY->Value;
  556. pObj->VMS_CTLR_IP = EdCtlrIp->Text;
  557. pObj->VMS_CMNC_PORT = EdCmncPort->Text;
  558. if (pObj->VMS_CMNC_PORT.Trim() == "") pObj->VMS_CMNC_PORT = "0";
  559. pObj->PANL_ON_TIME = cxTimeOn->Time.FormatString("HHNN");
  560. pObj->PANL_OFF_TIME = cxTimeOff->Time.FormatString("HHNN");
  561. pObj->WEB_CMRA_IP = EdWebCamIp->Text;
  562. pObj->WEB_CMRA_PORT = EdWebCamPort->Text.ToIntDef(0);
  563. pObj->WEB_CMRA_ID = EdWebCamId->Text;
  564. pObj->WEB_CMRA_PWD = EdWebCamPswd->Text;
  565. pObj->STRM_SESN_NM = EdWebCamStrm->Text;
  566. pObj->VMS_MAX_PHSE_NUM = SeMaxPhase->Value;
  567. pObj->Completed = true;
  568. pObj->MEM_DEL = "N";
  569. bool bResult;
  570. if (FNewDb)
  571. {
  572. pObj->DEL_YN = "N";
  573. pObj->FRST_REGR_NMBR = g_pLOGIN->sUserId;
  574. pObj->FRST_RGST_DT = Now().FormatString("yyyymmddhhnnss");
  575. pObj->VMS_MAX_PHSE_NUM = 16; //VMS 최대 표출면 개수
  576. pObj->VMS_PHSE_CHNG_CYCL = 5; //VMS 표출면 변경 주기(계획된 메시지의 동작시간(초))
  577. pObj->VMS_CMNC_ERR_BASS_VAL = 127; //VMS 통신 오류 기본 값(모듈 전원이 꺼지는 온도값(℃))
  578. pObj->FAN_MTNS_TMPR = 35; //팬동작온도
  579. pObj->HETR_MTNS_TMPR = 0; //히터동작온도
  580. pObj->VMS_MODL_ERR_RATE = 20; //모듈장애율(Options)
  581. bResult = VmsManager->InsertVms(pObj);
  582. if (bResult)
  583. {
  584. VmsManager->FLists.Push(sNmbr, pObj);
  585. }
  586. }
  587. else
  588. {
  589. pObj->LAST_CRPR_NMBR = g_pLOGIN->sUserId;
  590. pObj->LAST_CRCT_DT = Now().FormatString("yyyymmddhhnnss");
  591. bResult = VmsManager->UpdateVms(pObj);
  592. }
  593. if (bResult)
  594. {
  595. Application->MessageBox(MSG510, FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  596. FUpdate = true;
  597. FRAMEVmsList1->UpdateList();
  598. UpdateVmsIcon();
  599. CMM_SetGridRow(FRAMEVmsList1->CxList, FRAMEVmsList1->TvList, sNmbr, FRAMEVmsList1->Column01->Index);
  600. DisplayInfo(pObj);
  601. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_14, 0);
  602. }
  603. }
  604. }
  605. //---------------------------------------------------------------------------
  606. void __fastcall TVMSM100M::FRAMEVmsList1TvListCellDblClick(TcxCustomGridTableView *Sender,
  607. TcxGridTableDataCellViewInfo *ACellViewInfo, TMouseButton AButton,
  608. TShiftState AShift, bool &AHandled)
  609. {
  610. if (!ACellViewInfo) return;
  611. int nRow = FRAMEVmsList1->TvList->DataController->FocusedRecordIndex;
  612. if( nRow <= -1 )
  613. return;
  614. int nMemPtr = FRAMEVmsList1->TvList->DataController->Values[nRow][FRAMEVmsList1->Column99->Index];
  615. TVmsCtlr* pObj = (TVmsCtlr*)nMemPtr;
  616. DisplayInfo(pObj, true);
  617. }
  618. //---------------------------------------------------------------------------
  619. void __fastcall TVMSM100M::EdWebCamPortKeyPress(TObject *Sender, wchar_t &Key)
  620. {
  621. if (Key > '9' || Key < '0')
  622. {
  623. if (Key != VK_BACK && Key != VK_TAB && Key != '-')
  624. Key = 0;
  625. }
  626. }
  627. //---------------------------------------------------------------------------
  628. void __fastcall TVMSM100M::BtnSaveAllClick(TObject *Sender)
  629. {
  630. String sMsg;
  631. sMsg = "";
  632. sMsg+= MSG511;
  633. if (Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES) return;
  634. TVmsCtlr* pObj = NULL;
  635. try
  636. {
  637. pObj = new TVmsCtlr();
  638. pObj->PANL_ON_TIME = cxTimeOn->Time.FormatString("HHNN");
  639. pObj->PANL_OFF_TIME = cxTimeOff->Time.FormatString("HHNN");
  640. pObj->LAST_CRPR_NMBR = g_pLOGIN->sUserId;
  641. pObj->LAST_CRCT_DT = Now().FormatString("yyyymmddhhnnss");
  642. if (VmsManager->UpdateCtlrInfo(pObj))
  643. {
  644. FUpdate = true;
  645. VmsManager->FLists.Lock();
  646. FOR_STL(TVmsCtlr*, pTmpObj, VmsManager->FLists)
  647. {
  648. if (pTmpObj->DEL_YN == "Y") continue;
  649. pTmpObj->PANL_ON_TIME = pObj->PANL_ON_TIME;
  650. pTmpObj->PANL_OFF_TIME = pObj->PANL_OFF_TIME;
  651. pTmpObj->LAST_CRPR_NMBR = pObj->LAST_CRPR_NMBR;
  652. pTmpObj->LAST_CRCT_DT = pObj->LAST_CRCT_DT;
  653. }
  654. VmsManager->FLists.UnLock();
  655. Application->MessageBox(MSG512, FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  656. }
  657. }
  658. __finally
  659. {
  660. if (pObj)
  661. {
  662. delete pObj;
  663. pObj = NULL;
  664. }
  665. }
  666. }
  667. //---------------------------------------------------------------------------
  668. void __fastcall TVMSM100M::FRAMEVmsList1TvListFocusedRecordChanged(TcxCustomGridTableView *Sender,
  669. TcxCustomGridRecord *APrevFocusedRecord, TcxCustomGridRecord *AFocusedRecord,
  670. bool ANewItemRecordFocusingChanged)
  671. {
  672. if (!MapStart) return;
  673. if (!AFocusedRecord) return;
  674. int nRow = FRAMEVmsList1->TvList->DataController->FocusedRecordIndex;
  675. if( nRow <= -1 )
  676. return;
  677. int nMemPtr = FRAMEVmsList1->TvList->DataController->Values[nRow][FRAMEVmsList1->Column99->Index];
  678. TVmsCtlr* pObj = (TVmsCtlr*)nMemPtr;
  679. DisplayInfo(pObj, true);
  680. }
  681. //---------------------------------------------------------------------------
  682. void __fastcall TVMSM100M::SeMaxPhasePropertiesChange(TObject *Sender)
  683. {
  684. if (((TcxSpinEdit*)Sender)->Value < ((TcxSpinEdit*)Sender)->Properties->MinValue)
  685. ((TcxSpinEdit*)Sender)->Value = ((TcxSpinEdit*)Sender)->Properties->MinValue;
  686. else if(((TcxSpinEdit*)Sender)->Value > ((TcxSpinEdit*)Sender)->Properties->MaxValue &&
  687. ((TcxSpinEdit*)Sender)->Properties->MaxValue)
  688. ((TcxSpinEdit*)Sender)->Value = ((TcxSpinEdit*)Sender)->Properties->MaxValue;
  689. }
  690. //---------------------------------------------------------------------------
  691. void __fastcall TVMSM100M::MakeVmsWebCamHtml_ICSVIEW(TVmsCtlr *AObj)
  692. {
  693. FILE *AFd = NULL;
  694. String sVmsDir = g_sAppDir + "VMS\\";
  695. try
  696. {
  697. AnsiString sVmsHtml;
  698. sVmsHtml.printf("%s%d.html", AnsiString(sVmsDir).c_str(), AObj->VMS_CTLR_NMBR);
  699. if ((AFd = fopen(sVmsHtml.c_str(), "w")) == NULL)
  700. {
  701. return;
  702. }
  703. fprintf(AFd, "<html xmlns=\"http://www.w3.org/1999/xhtml\"\n");
  704. fprintf(AFd, " xmlns:v=\"urn:schemas-microsoft-com:vml\"\n");
  705. fprintf(AFd, " style=\"padding:0px; margin:0px; border:1px\">\n");
  706. fprintf(AFd, "<head>\n");
  707. fprintf(AFd, "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n");
  708. fprintf(AFd, "<title>%s</title>\n", AnsiString(AObj->WEB_CMRA_IP).c_str());
  709. fprintf(AFd, "<meta name=\"Author\" content=\"\">\n");
  710. fprintf(AFd, "<meta name=\"Keywords\" content=\"\">\n");
  711. fprintf(AFd, "<meta name=\"Description\" content=\"\"> \n");
  712. fprintf(AFd, "<style>\n");
  713. fprintf(AFd, "html, body {width:100%; height:100%; margin:0; padding:0;}\n");
  714. fprintf(AFd, "</style>\n");
  715. fprintf(AFd, "<script language=\"JavaScript\">\n");
  716. fprintf(AFd, "<!--\n");
  717. fprintf(AFd, "function window_onunload() {\n");
  718. fprintf(AFd, " IcsView1.Stop();\n");
  719. fprintf(AFd, "}\n");
  720. fprintf(AFd, "function window_onload() {\n");
  721. fprintf(AFd, " IcsView1.ShowTitle=false;\n");
  722. fprintf(AFd, " IcsView1.ShowStatusBar=false;\n");
  723. //fprintf(AFd, " IcsView1.Username='%s';\n", AnsiString(pObj->WEB_CMRA_ID).c_str());
  724. //fprintf(AFd, " IcsView1.Password='%s';\n", AnsiString(pObj->WEB_CMRA_PWD).c_str());
  725. fprintf(AFd, " IcsView1.UseTCP=true;\n");
  726. fprintf(AFd, " IcsView1.UseRtspOverHttp=false;\n");
  727. fprintf(AFd, " IcsView1.RtspOverHttpPort=80;\n");
  728. fprintf(AFd, " IcsView1.Play('%s', 0);\n", AnsiString(AObj->WEB_CMRA_IP).c_str());
  729. fprintf(AFd, "}\n");
  730. fprintf(AFd, "//-->\n");
  731. fprintf(AFd, "</script>\n");
  732. fprintf(AFd, "</head>\n");
  733. fprintf(AFd, "<body onload=\"window_onload()\" onunload=\"window_onunload()\" bgcolor=black scroll=no>\n");
  734. fprintf(AFd, " <div id=\"view1\" style=\"border-style:none;position:absolute;width:100%;height:100%;\">\n");
  735. fprintf(AFd, " <object id=\"IcsView1\" name=\"view_1\"\n");
  736. fprintf(AFd, " codebase=http://www.icantek.com/viewer/activex/icsview.cab#Version=3,8,2,3\n");
  737. fprintf(AFd, " classid=\"clsid:563DF2AD-1EB7-4C84-8DA8-52A0A134E30E\"\n");
  738. fprintf(AFd, " width=\"100%\" height=\"100%\">\n");
  739. fprintf(AFd, " <param name=\"_Version\" value=\"65539\">\n");
  740. fprintf(AFd, " <param name=\"_ExtentX\" value=\"8467\">\n");
  741. fprintf(AFd, " <param name=\"_ExtentY\" value=\"6350\">\n");
  742. fprintf(AFd, " <param name=\"_StockProps\" value=\"0\">\n");
  743. fprintf(AFd, " <param name=\"Mute\" value=\"0\">\n");
  744. fprintf(AFd, " <param name=\"Brightness\" value=\"0\">\n");
  745. fprintf(AFd, " <param name=\"Contrast\" value=\"0\">\n");
  746. fprintf(AFd, " <param name=\"Rotated\" value=\"0\">\n");
  747. fprintf(AFd, " <param name=\"UseTCP\" value=\"0\">\n");
  748. fprintf(AFd, " <param name=\"UseRtspOverHttp\" value=\"0\">\n");
  749. fprintf(AFd, " <param name=\"RtspPort\" value=\"554\">\n");
  750. fprintf(AFd, " <param name=\"RtspOverHttpPort\" value=\"80\">\n");
  751. fprintf(AFd, " <param name=\"ToolTipText\" value=\"choose\">\n");
  752. fprintf(AFd, " </object>\n");
  753. fprintf(AFd, " </div>\n");
  754. fprintf(AFd, "</body>\n");
  755. fprintf(AFd, "</html>\n");
  756. fclose(AFd);
  757. }
  758. catch(Exception &e)
  759. {
  760. }
  761. }
  762. //---------------------------------------------------------------------------
  763. void __fastcall TVMSM100M::MakeVmsWebCamHtml_STWEB(TVmsCtlr *AObj)
  764. {
  765. FILE *AFd = NULL;
  766. String sVmsDir = g_sAppDir + "VMS\\";
  767. try
  768. {
  769. AnsiString sVmsHtml;
  770. sVmsHtml.printf("%s%d.html", AnsiString(sVmsDir).c_str(), AObj->VMS_CTLR_NMBR);
  771. if ((AFd = fopen(sVmsHtml.c_str(), "w")) == NULL)
  772. {
  773. return;
  774. }
  775. fprintf(AFd, "<html xmlns=\"http://www.w3.org/1999/xhtml\"\n");
  776. fprintf(AFd, " xmlns:v=\"urn:schemas-microsoft-com:vml\"\n");
  777. fprintf(AFd, " style=\"padding:0px; margin:0px; border:1px\">\n");
  778. fprintf(AFd, "<head>\n");
  779. fprintf(AFd, "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n");
  780. fprintf(AFd, "<title>%s</title>\n", AnsiString(AObj->WEB_CMRA_IP).c_str());
  781. fprintf(AFd, "<meta name=\"Author\" content=\"\">\n");
  782. fprintf(AFd, "<meta name=\"Keywords\" content=\"\">\n");
  783. fprintf(AFd, "<meta name=\"Description\" content=\"\">\n");
  784. fprintf(AFd, "<style>\n");
  785. fprintf(AFd, "html, body {width:100%; height:100%; margin:0; padding:0;}\n");
  786. fprintf(AFd, "</style>\n");
  787. fprintf(AFd, "<script language=\"JavaScript\">\n");
  788. fprintf(AFd, "<!--\n");
  789. fprintf(AFd, "var SISOPlugin = null;\n");
  790. fprintf(AFd, "function window_onunload() {\n");
  791. fprintf(AFd, " SISOPlugin.Stop();\n");
  792. fprintf(AFd, "}\n");
  793. fprintf(AFd, "function window_onload() {\n");
  794. fprintf(AFd, " SISOPlugin = document.getElementById(\"STWebViwer1\");\n");
  795. fprintf(AFd, " var userName = \"%s\";\n", AnsiString(AObj->WEB_CMRA_ID).c_str());
  796. fprintf(AFd, " var userPW = \"%s\";\n", AnsiString(AObj->WEB_CMRA_PWD).c_str());
  797. fprintf(AFd, " if (userName != \"\") {\n");
  798. fprintf(AFd, " SISOPlugin.SetSecurityEnhancement();\n");
  799. fprintf(AFd, " }\n");
  800. fprintf(AFd, " SISOPlugin.LivePlay('%s', 4520, 1, userName, userPW);\n", AnsiString(AObj->WEB_CMRA_IP).c_str());
  801. fprintf(AFd, "}\n");
  802. fprintf(AFd, "//-->\n");
  803. fprintf(AFd, "</script>\n");
  804. fprintf(AFd, "</head>\n");
  805. fprintf(AFd, "<body onload=\"window_onload()\" onunload=\"window_onunload()\" bgcolor=black scroll=no>\n");
  806. fprintf(AFd, " <div id=\"view1\" style=\"border-style:none;position:absolute;width:100%;height:100%;\">\n");
  807. fprintf(AFd, " <object id=\"STWebViwer1\" name=\"STWebViwer1\"\n");
  808. fprintf(AFd, " classid=\"clsid:58930875-5F98-4151-B894-A7A3EA94ABC8\"\n");
  809. fprintf(AFd, " width=\"100%\" height=\"100%\">\n");
  810. fprintf(AFd, " </object>\n");
  811. fprintf(AFd, " </div>\n");
  812. fprintf(AFd, "</body>\n");
  813. fprintf(AFd, "</html>\n");
  814. fclose(AFd);
  815. }
  816. catch(Exception &e)
  817. {
  818. }
  819. }
  820. //---------------------------------------------------------------------------
  821. void __fastcall TVMSM100M::LblCaptionDblClick(TObject *Sender)
  822. {
  823. String sVmsDir = g_sAppDir + "VMS\\";
  824. ForceDirectories(sVmsDir.c_str());
  825. try
  826. {
  827. VmsManager->FLists.Lock();
  828. FOR_STL(TVmsCtlr*, pObj, VmsManager->FLists)
  829. {
  830. if (pObj->DEL_YN == "Y") continue;
  831. if (pObj->STRM_SESN_NM.Trim() == "icsview")
  832. MakeVmsWebCamHtml_ICSVIEW(pObj);
  833. else
  834. if (pObj->STRM_SESN_NM.Trim() == "stweb")
  835. MakeVmsWebCamHtml_STWEB(pObj);
  836. }
  837. }
  838. __finally
  839. {
  840. VmsManager->FLists.UnLock();
  841. }
  842. }
  843. //---------------------------------------------------------------------------
  844. void __fastcall TVMSM100M::cxButton1Click(TObject *Sender)
  845. {
  846. if (Application->MessageBox(L"VMS 웹카메라 뷰어 파일을 생성하시겠습니까?\r\n기존 파일을 삭제한 후 새롭게 생성합니다.",
  847. L"VMS 웹카메라 뷰어 파일 생성 확인", MB_YESNO|MB_ICONQUESTION) != IDYES)
  848. {
  849. return;
  850. }
  851. LblCaptionDblClick(Sender);
  852. Application->MessageBox(L"VMS 웹카메라 뷰어 파일 생성 하였습니다.",
  853. L"VMS 웹카메라 뷰어 파일 생성 확인", MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  854. }
  855. //---------------------------------------------------------------------------