CTVM200MF.cpp 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #include "ITSSkinF.h"
  4. #include "ITSUtilF.h"
  5. #include "AppGlobalF.h"
  6. #include "ITSLangTransF.h"
  7. #include "ITSMapF.h"
  8. #include "CDSCodeF.h"
  9. #include "CDSFacilityF.h"
  10. #include "CDSNodeF.h"
  11. #include "CDSLinkF.h"
  12. #include "CDSCctvCtlrF.h"
  13. #include "WindowMsgF.h"
  14. #include "ITS_OPLibF.h"
  15. #pragma hdrstop
  16. #include "CTVM200MF.h"
  17. //---------------------------------------------------------------------------
  18. #pragma package(smart_init)
  19. #pragma link "cxButtons"
  20. #pragma link "cxContainer"
  21. #pragma link "cxControls"
  22. #pragma link "cxDropDownEdit"
  23. #pragma link "cxEdit"
  24. #pragma link "cxGraphics"
  25. #pragma link "cxGroupBox"
  26. #pragma link "cxLabel"
  27. #pragma link "cxLookAndFeelPainters"
  28. #pragma link "cxLookAndFeels"
  29. #pragma link "cxMaskEdit"
  30. #pragma link "cxSpinEdit"
  31. #pragma link "cxSplitter"
  32. #pragma link "cxTextEdit"
  33. #pragma link "dxSkinBlue"
  34. #pragma link "dxSkinsCore"
  35. #pragma link "dxSkinBlack"
  36. #pragma link "dxSkinMcSkin"
  37. #pragma link "FRAME_CctvListF"
  38. #pragma link "cxButtonEdit"
  39. #pragma link "cxCheckBox"
  40. #pragma resource "*.dfm"
  41. TCTVM200M *CTVM200M = NULL;
  42. //---------------------------------------------------------------------------
  43. __fastcall TCTVM200M::TCTVM200M(TComponent* Owner)
  44. : TForm(Owner)
  45. {
  46. LangTrans->Translate(this, ITSDb_GetConnection());
  47. ITSSkin_Load(this);
  48. CMM_LoadForm(g_sFormsDir, this);
  49. FUpdate= false;
  50. FTitle = Caption;//"CCTV 기본정보 관리";
  51. FRAMECctvList1->PnlTop->Visible = false;
  52. FRAMECctvList1->PnlBottom->Visible = false;
  53. FRAMECctvList1->ColumnSel->Visible = false;
  54. FRAMECctvList1->Column04->Visible = false;
  55. FRAMECctvList1->Column06->Visible = false;
  56. FRAMECctvList1->Column06->Visible = false;
  57. FRAMECctvList1->Column06->Visible = false;
  58. FRAMECctvList1->Column14->Visible = true; //대체이미지
  59. FRAMECctvList1->Column13->Options->Editing = false;
  60. FRAMECctvList1->Column14->Options->Editing = false;
  61. m_pGDC = FRAMECctvList1->TvList->DataController;
  62. FLayerIdx = LyrTp_Cctv;
  63. EditMode = false;
  64. }
  65. //---------------------------------------------------------------------------
  66. void __fastcall TCTVM200M::CommClose()
  67. {
  68. try
  69. {
  70. CMM_SaveForm(g_sFormsDir, this);
  71. }
  72. catch(...)
  73. {
  74. }
  75. }
  76. //---------------------------------------------------------------------------
  77. void __fastcall TCTVM200M::FormShow(TObject *Sender)
  78. {
  79. Refresh();
  80. //APP_FillCode(CbType, "WCAM");
  81. CctvCtlrManager->FLists.Lock();
  82. try
  83. {
  84. FOR_STL(TCctvCtlr*, pObj, CctvCtlrManager->FLists)
  85. {
  86. if (pObj->DEL_YN == "Y") continue;
  87. pObj->FData3 = NULL;
  88. }
  89. }
  90. __finally
  91. {
  92. CctvCtlrManager->FLists.UnLock();
  93. }
  94. FormInit();
  95. ChangeEditMode(1);
  96. TmrShow->Enabled = true;
  97. }
  98. //---------------------------------------------------------------------------
  99. void __fastcall TCTVM200M::FormInit()
  100. {
  101. EdNmbr->Text = "";
  102. EdCtlrId->Text = "";
  103. EdCtlrNm->Text = "";
  104. ISTL_LCTN_NM->Text = "";
  105. ISTL_LCTN_ADDR->Text = "";
  106. SePosX->Value = 0;
  107. SePosY->Value = 0;
  108. EdCtlrIp->Text = "";
  109. EdCmncPort->Text = "0";
  110. Se_CCTV_CTLR_PORT->Value = 0;
  111. Se_TYPE->Value = 1;
  112. Ed_CCTV_ENCD_IP->Text = ""; //인코드 IP
  113. Ed_CCTV_CAPT_IP->Text = ""; //자막기 IP
  114. Ed_STRM_SESN_NM->Text = "";
  115. Ed_STRM_RTSP_ADDR->Text = "";
  116. Ed_STRM_RTMP_ADDR->Text = "";
  117. Ed_STRM_HTTP_ADDR->Text = "";
  118. Ed_INTR_RTMP_ADDR->Text = "";
  119. Ed_LINK_ID->Text = "";
  120. EdTmpLinkId->Text = "";
  121. ChkAll->Checked = false;
  122. EdImageFileName->Text = "";
  123. try {
  124. ImgDspl->Picture->Bitmap->FreeImage();
  125. ImgDspl->Picture->Bitmap = NULL;
  126. } catch(...) {}
  127. FNewDb = false;
  128. }
  129. //---------------------------------------------------------------------------
  130. void __fastcall TCTVM200M::TmrShowTimer(TObject *Sender)
  131. {
  132. TmrShow->Enabled = false;
  133. FRAMECctvList1->UpdateList();
  134. }
  135. //---------------------------------------------------------------------------
  136. void __fastcall TCTVM200M::BtnCloseClick(TObject *Sender)
  137. {
  138. Close();
  139. }
  140. //---------------------------------------------------------------------------
  141. void __fastcall TCTVM200M::FormClose(TObject *Sender, TCloseAction &Action)
  142. {
  143. CommClose();
  144. CTVM200M = NULL;
  145. Action = caFree;
  146. }
  147. //---------------------------------------------------------------------------
  148. void __fastcall TCTVM200M::FormCloseQuery(TObject *Sender, bool &CanClose)
  149. {
  150. if (FUpdate)
  151. {
  152. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_14, 0);
  153. }
  154. FRAMECctvList1->OnCloseQuery(CanClose);
  155. }
  156. //---------------------------------------------------------------------------
  157. void __fastcall TCTVM200M::DisplayInfo(TCctvCtlr* AObj, bool AMoveObj/*=true*/)
  158. {
  159. FormInit();
  160. if (!AObj) return;
  161. EdNmbr->Text = AObj->CTLR_NMBR;
  162. EdCtlrId->Text = AObj->CTLR_ID;
  163. EdCtlrNm->Text = AObj->NAME;
  164. ISTL_LCTN_NM->Text = AObj->ISTL_LCTN_NM;
  165. ISTL_LCTN_ADDR->Text = AObj->ISTL_LCTN_ADDR;
  166. SePosX->Value = AObj->X_CRDN;
  167. SePosY->Value = AObj->Y_CRDN;
  168. EdCtlrIp->Text = AObj->CTLR_IP;
  169. //EdCmncPort->Text = AObj->CTLR_PORT;
  170. Se_CCTV_CTLR_PORT->Value = AObj->CTLR_PORT;
  171. Se_TYPE->Value = AObj->CCTV_TYPE.ToIntDef(1);
  172. Ed_CCTV_ENCD_IP->Text = AObj->CCTV_ENCD_IP; //인코드 IP
  173. Ed_CCTV_CAPT_IP->Text = AObj->CCTV_CAPT_IP; //자막기 IP
  174. Ed_STRM_SESN_NM->Text = AObj->STRM_SESN_NM;
  175. Ed_STRM_RTSP_ADDR->Text = AObj->STRM_RTSP_ADDR;
  176. Ed_STRM_RTMP_ADDR->Text = AObj->STRM_RTMP_ADDR;
  177. Ed_STRM_HTTP_ADDR->Text = AObj->STRM_HTTP_ADDR;
  178. Ed_INTR_RTMP_ADDR->Text = AObj->INTR_RTMP_ADDR;
  179. Ed_LINK_ID->Text = AObj->LINK_ID;
  180. // FRAMEGisMap1->SelectObjectByPos(SePosX->Value, SePosY->Value, true);
  181. if (AObj->CCTV_SBST_DSPL_YN == "N")
  182. Cb_CCTV_SBST_DSPL_YN->ItemIndex = 0;
  183. else
  184. Cb_CCTV_SBST_DSPL_YN->ItemIndex = 1;
  185. ChangeEditMode(3);
  186. DisplayLink(AObj);
  187. SelDsplImage(AObj);
  188. }
  189. //---------------------------------------------------------------------------
  190. void __fastcall TCTVM200M::DisplayLink(TCctvCtlr* AObj)
  191. {
  192. if (!AObj) return;
  193. String sLinkId = AObj->LINK_ID;
  194. if (sLinkId != "")
  195. {
  196. sJs.printf(L"updateEditLink('%s', %d)", sLinkId.c_str(), 3);
  197. }
  198. }
  199. //---------------------------------------------------------------------------
  200. void __fastcall TCTVM200M::SelDsplImage(TCctvCtlr* AObj)
  201. {
  202. String sQry;
  203. sQry = "SELECT CCTV_SBST_DSPL_YN, CCTV_SBST_IMGN \r\n"
  204. " FROM TB_CCTV_CTLR \r\n"
  205. " WHERE CCTV_MNGM_NMBR = :p01 \r\n";
  206. try
  207. {
  208. pADO->Close();
  209. pADO->SQL->Clear();
  210. pADO->Connection = ITSDb_GetConnection();
  211. pADO->SQL->Text = sQry;
  212. pADO->Parameters->ParamByName("p01")->Value = AObj->CTLR_NMBR;
  213. pADO->Prepared = true;
  214. pADO->Open();
  215. }
  216. catch(EDatabaseError &E)
  217. {
  218. ShowMessage(String(E.ClassName()) + E.Message);
  219. return;
  220. }
  221. if (pADO->RecordCount == 0)
  222. {
  223. pADO->Close();
  224. return;
  225. }
  226. ForceDirectories(g_sTempDir);
  227. TADOBlobStream *BS;
  228. int nFileSize = 0;
  229. String sImgFile = g_sTempDir + "CCTVB_" + AObj->CTLR_NMBR + ".bmp";
  230. try {
  231. ImgDspl->Picture->Bitmap->FreeImage();
  232. ImgDspl->Picture->Bitmap = NULL;
  233. DeleteFile(sImgFile);
  234. } catch(...) {}
  235. String sDispBlob = "N";
  236. try
  237. {
  238. sDispBlob = pADO->FieldByName("CCTV_SBST_DSPL_YN")->AsString;
  239. BS = (TADOBlobStream *)pADO->CreateBlobStream(pADO->FieldByName("CCTV_SBST_IMGN"), bmRead);
  240. BS->SaveToFile(sImgFile);
  241. nFileSize = BS->Size;
  242. delete BS;
  243. pADO->Close();
  244. if (nFileSize)
  245. {
  246. try
  247. {
  248. ImgDspl->Picture->LoadFromFile(sImgFile);
  249. }
  250. catch(Exception &E)
  251. {
  252. ShowMessage(String(E.ClassName()) + E.Message);
  253. }
  254. }
  255. }
  256. catch(Exception &E)
  257. {
  258. delete BS;
  259. ShowMessage(String(E.ClassName()) + E.Message);
  260. }
  261. }
  262. //---------------------------------------------------------------------------
  263. void __fastcall TCTVM200M::UpdateIcon()
  264. {
  265. }
  266. //---------------------------------------------------------------------------
  267. void __fastcall TCTVM200M::BtnEditClick(TObject *Sender)
  268. {
  269. String sId = EdNmbr->Text;
  270. TCctvCtlr *pObj = CctvCtlrManager->FLists.Find(sId);
  271. FNewDb = false;
  272. if (BtnEdit->Caption == FrmLang->lblEdit->Caption)//"편집")
  273. {
  274. //편집모드 시작
  275. ChangeEditMode(0);
  276. if (pObj)
  277. {
  278. //시설물아이콘을 편집아이콘으로 변경
  279. //function editFacilityObject(ALyrIdx, ANmbr, AComm(0:오류-편집,1:정상), AEdit(편집모드:1-편집,0-편집취소))
  280. sJs.printf(L"editFacilityObject(%d, %s, 1, 1)", FLayerIdx, pObj->CTLR_NMBR.c_str());
  281. }
  282. }
  283. else
  284. {
  285. //편집모드 취소
  286. ChangeEditMode(1);
  287. if (pObj)
  288. {
  289. //원래 정보를 화면에 표출
  290. CMM_SetGridRow(FRAMECctvList1->CxList, FRAMECctvList1->TvList, sId, FRAMECctvList1->Column01->Index);
  291. DisplayInfo(pObj, false);
  292. #if 0
  293. //지도시설물아이콘을 원래아이콘으로 변경
  294. sJs.printf(L"editFacilityObject(%d, %s, 0, 0)", FLayerIdx, pObj->CTLR_NMBR.c_str());
  295. FRAMEOpenMap1->ExecScript(sJs);
  296. #else
  297. //추가 모드에서 취소하는 경우 지도에 신규로 추가한 객체를 찾아서 삭제해 주는것 보다
  298. //새롭게 다시 그리자
  299. UpdateIcon();
  300. #endif
  301. }
  302. else
  303. {
  304. //객체가 없는 경우는 추가 모드에서 취소한 경우임
  305. sJs.printf(L"removeFacilityObject(%d, %s)", FLayerIdx, sId.c_str());
  306. }
  307. }
  308. }
  309. //---------------------------------------------------------------------------
  310. void __fastcall TCTVM200M::ChangeEditMode(int AEdit)
  311. {
  312. bool bEnabled = false;
  313. switch(AEdit)
  314. {
  315. case 0: //편집버튼클릭
  316. {
  317. BtnEdit->Enabled = true;
  318. BtnInsert->Enabled = false;
  319. BtnDelete->Enabled = false;
  320. BtnSave->Enabled = true;
  321. BtnEdit->Caption = FrmLang->lblCancel->Caption;//"취소";
  322. BtnEdit->Hint = FrmLang->lblCancel->Hint;//데이터 편집 취소";
  323. EditMode = true;
  324. }
  325. break;
  326. case 1: //편집[취소]버튼클릭
  327. {
  328. FormInit(); //화면을 모두 지운다.
  329. BtnEdit->Enabled = false;
  330. BtnInsert->Enabled = true;
  331. BtnDelete->Enabled = false;
  332. BtnSave->Enabled = false;
  333. BtnEdit->Caption = FrmLang->lblEdit->Caption;//"편집";
  334. BtnEdit->Hint = FrmLang->lblEdit->Hint;//데이터 편집";
  335. //bEnabled = true;
  336. EditMode = false;
  337. }
  338. break;
  339. case 2: //추가
  340. {
  341. BtnEdit->Enabled = true;
  342. BtnInsert->Enabled = false;
  343. BtnDelete->Enabled = false;
  344. BtnSave->Enabled = true;
  345. BtnEdit->Caption = FrmLang->lblCancel->Caption;//"취소";
  346. BtnEdit->Hint = FrmLang->lblCancel->Hint;//데이터 편집 취소";
  347. EditMode = true;
  348. }
  349. break;
  350. case 3: //수정모드
  351. {
  352. BtnEdit->Enabled = true;
  353. BtnInsert->Enabled = true;
  354. BtnDelete->Enabled = true;
  355. BtnSave->Enabled = false;
  356. BtnEdit->Caption = FrmLang->lblEdit->Caption;//"편집";
  357. BtnEdit->Hint = FrmLang->lblEdit->Hint;//데이터 편집";
  358. bEnabled = true;
  359. EditMode = false;
  360. }
  361. break;
  362. }
  363. if (AEdit == 0 || AEdit == 2)
  364. {
  365. FRAMECctvList1->CxList->Enabled = false;
  366. }
  367. else
  368. {
  369. FRAMECctvList1->CxList->Enabled = true;
  370. }
  371. PnlEdit->Enabled = EditMode;
  372. }
  373. //---------------------------------------------------------------------------
  374. void __fastcall TCTVM200M::BtnInsertClick(TObject *Sender)
  375. {
  376. FormInit();
  377. //신규아이디를 얻어와서 화면을 초기화한다.
  378. int nNmbr, nId;
  379. if (!CctvCtlrManager->GetNextCctvId(nNmbr, nId))
  380. {
  381. Application->MessageBox(lblText1->Caption.c_str(),//L"새로운 CCTV 정보를 생성하지 못하였습니다.\r\n프로그램 종료후에 다시 시도해 보세요.",
  382. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  383. return;
  384. }
  385. EdNmbr->Text = String(nNmbr);
  386. ChangeEditMode(2);
  387. FNewDb = true;
  388. }
  389. //---------------------------------------------------------------------------
  390. void __fastcall TCTVM200M::BtnDeleteClick(TObject *Sender)
  391. {
  392. int nIdx = m_pGDC->FocusedRecordIndex;
  393. if (nIdx < 0) return;
  394. String sId = EdNmbr->Text;
  395. if (sId.IsEmpty())
  396. {
  397. Application->MessageBox(lblText2->Caption.c_str(),//L"삭제할 CCTV를 목록에서 선택하세요.\r\n목록에서 더블클릭하여 선택합니다.",
  398. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  399. return;
  400. }
  401. String sMsg;
  402. sMsg = lblText3->Caption + ": " + sId;//"CCTV번호: " + sId;
  403. sMsg+= "\r\n" + lblText4->Caption;//"선택하신 CCTV 정보를 삭제하시겠습니까?";
  404. if (Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES) return;
  405. TCctvCtlr *pObj = CctvCtlrManager->FLists.Find(sId);
  406. if (pObj)
  407. {
  408. if (CctvCtlrManager->DeleteCctv(pObj))
  409. {
  410. pObj->DEL_YN = "Y";
  411. FRAMECctvList1->UpdateList();
  412. UpdateIcon();
  413. }
  414. FUpdate = true;
  415. Application->MessageBox(lblText5->Caption.c_str(),//L"CCTV 정보삭제\r\nCCTV 정보를 삭제 하였습니다.",
  416. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  417. FormInit();
  418. ChangeEditMode(1);
  419. UpdateIcon();
  420. }
  421. }
  422. //---------------------------------------------------------------------------
  423. void __fastcall TCTVM200M::BtnSaveClick(TObject *Sender)
  424. {
  425. if (EdNmbr->Text.IsEmpty())
  426. {
  427. Application->MessageBox(L"목록에서 CCTV를 선택하세요.",
  428. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  429. return;
  430. }
  431. String sNmbr = EdNmbr->Text;
  432. TCctvCtlr *pObj = CctvCtlrManager->FLists.Find(sNmbr);
  433. if (!pObj)
  434. {
  435. Application->MessageBox(L"선택하신 CCTV정보를 확인할 수 없습니다.",
  436. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  437. return;
  438. }
  439. bool bResult = false;
  440. String CCTV_SBST_IMGN;
  441. String CCTV_SBST_DSPL_YN = Cb_CCTV_SBST_DSPL_YN->ItemIndex == 0 ? "N" : "Y";
  442. TMemoryStream *dataStream = new TMemoryStream();
  443. try
  444. {
  445. try
  446. {
  447. ImgDspl->Picture->Bitmap->SaveToStream(dataStream);
  448. if (CCTV_SBST_DSPL_YN == "Y" && dataStream->Size == 0)
  449. {
  450. Application->MessageBox(L"CCTV 영상 대체이미지 정보를 설정하셔야 합니다.",
  451. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  452. return;
  453. }
  454. if (ChkAll->Checked)
  455. {
  456. sNmbr = "";
  457. }
  458. bResult = UpdateDsplInfo(sNmbr, CCTV_SBST_DSPL_YN, dataStream);
  459. }
  460. catch(Exception &e)
  461. {
  462. }
  463. }
  464. __finally
  465. {
  466. if (dataStream) delete dataStream;
  467. dataStream = NULL;
  468. }
  469. if (bResult)
  470. {
  471. Application->MessageBox(L"CCTV 영상 대체이미지 정보저장\r\nCCTV 영상 대체이미지 정보를 저장 하였습니다.",
  472. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  473. FUpdate = true;
  474. if (ChkAll->Checked)
  475. {
  476. CctvCtlrManager->FLists.Lock();
  477. FOR_STL(TCctvCtlr*, pTmpObj, CctvCtlrManager->FLists)
  478. {
  479. pTmpObj->CCTV_SBST_DSPL_YN = CCTV_SBST_DSPL_YN;
  480. }
  481. CctvCtlrManager->FLists.UnLock();
  482. }
  483. else
  484. {
  485. pObj->CCTV_SBST_DSPL_YN = CCTV_SBST_DSPL_YN;
  486. }
  487. FRAMECctvList1->UpdateList();
  488. UpdateIcon();
  489. CMM_SetGridRow(FRAMECctvList1->CxList, FRAMECctvList1->TvList, sNmbr, FRAMECctvList1->Column01->Index);
  490. DisplayInfo(pObj, true);
  491. }
  492. }
  493. //---------------------------------------------------------------------------
  494. bool __fastcall TCTVM200M::UpdateDsplInfo(String ANmbr, String ADsplYn, TMemoryStream *dataStream)
  495. {
  496. String sQry;
  497. TADOQuery *pADO = NULL;
  498. if (dataStream->Size == 0)
  499. {
  500. sQry = "UPDATE TB_CCTV_CTLR \r\n"
  501. " SET CCTV_SBST_DSPL_YN = :p02, \r\n"
  502. " CCTV_SBST_IMGN = NULL \r\n";
  503. }
  504. else
  505. {
  506. sQry = "UPDATE TB_CCTV_CTLR \r\n"
  507. " SET CCTV_SBST_DSPL_YN = :p02, \r\n"
  508. " CCTV_SBST_IMGN = :p03 \r\n";
  509. }
  510. if (ANmbr != "")
  511. {
  512. sQry += " WHERE CCTV_MNGM_NMBR = :p01 \r\n";
  513. }
  514. try
  515. {
  516. try
  517. {
  518. pADO = new TADOQuery(NULL);
  519. pADO->Close();
  520. pADO->Connection = ITSDb_GetConnection();
  521. ITSDb_SQLText(pADO, sQry);
  522. if (ANmbr != "")
  523. {
  524. ITSDb_SQLBind(pADO, "p01", ANmbr);
  525. }
  526. ITSDb_SQLBind(pADO, "p02", ADsplYn);
  527. if (dataStream->Size != 0)
  528. {
  529. pADO->Parameters->ParamByName("p03")->LoadFromStream(dataStream, ftBlob);
  530. }
  531. pADO->ExecSQL();
  532. return true;
  533. }
  534. catch(EDatabaseError &E)
  535. {
  536. DBERRORMSG("UpdateDsplInfo", String(E.ClassName()), E.Message, sQry);
  537. throw Exception(String(E.ClassName()) + E.Message);
  538. }
  539. catch(Exception &e)
  540. {
  541. DBERRORMSG("UpdateDsplInfo", String(e.ClassName()), e.Message, sQry);
  542. throw Exception(String(e.ClassName()) + e.Message);
  543. }
  544. }
  545. __finally
  546. {
  547. if (pADO)
  548. {
  549. pADO->Close();
  550. delete pADO;
  551. }
  552. }
  553. return true;
  554. }
  555. //---------------------------------------------------------------------------
  556. void __fastcall TCTVM200M::Ed_CMRA_PORTKeyPress(TObject *Sender, wchar_t &Key)
  557. {
  558. if (Key > '9' || Key < '0')
  559. {
  560. if (Key != VK_BACK && Key != VK_TAB && Key != '-')
  561. Key = 0;
  562. }
  563. }
  564. //---------------------------------------------------------------------------
  565. void __fastcall TCTVM200M::Se_CMRA_CHNLPropertiesChange(TObject *Sender)
  566. {
  567. if (((TcxSpinEdit*)Sender)->Value < ((TcxSpinEdit*)Sender)->Properties->MinValue)
  568. ((TcxSpinEdit*)Sender)->Value = ((TcxSpinEdit*)Sender)->Properties->MinValue;
  569. else if(((TcxSpinEdit*)Sender)->Value > ((TcxSpinEdit*)Sender)->Properties->MaxValue &&
  570. ((TcxSpinEdit*)Sender)->Properties->MaxValue)
  571. ((TcxSpinEdit*)Sender)->Value = ((TcxSpinEdit*)Sender)->Properties->MaxValue;
  572. }
  573. //---------------------------------------------------------------------------
  574. void __fastcall TCTVM200M::UpdateEditLink()
  575. {
  576. TItsNode* pNode;
  577. String STRT_NM;
  578. String END_NM;
  579. try
  580. {
  581. ItsLinkManager->FLists.Lock();
  582. try
  583. {
  584. FOR_STL(TItsLink*, pLink, ItsLinkManager->FLists)
  585. {
  586. if (pLink->DEL_YN == "Y") continue;
  587. #if 0
  588. pVrtx = pLink->Vrtxs.Find(nZoom);
  589. if (!pVrtx) continue;
  590. pNode = ItsNodeManager->FLists.Find(pLink->F_NODE_ID);
  591. if (pNode) STRT_NM = pNode->NODE_NAME; else STRT_NM = " ";
  592. pNode = ItsNodeManager->FLists.Find(pLink->T_NODE_ID);
  593. if (pNode) END_NM = pNode->NODE_NAME; else END_NM = " ";
  594. sJs.printf(L"addEditLink('%s', '%s', '%s', '%s', '%s', '%s')",
  595. pLink->LINK_ID.c_str(),
  596. pLink->ROAD_NAME.c_str(),
  597. STRT_NM.c_str(),
  598. END_NM.c_str(),
  599. pVrtx->X_CRDN_ARR.c_str(),
  600. pVrtx->Y_CRDN_ARR.c_str());
  601. #else
  602. if (pLink->IsVertex)
  603. {
  604. pNode = ItsNodeManager->FLists.Find(pLink->F_NODE_ID);
  605. if (pNode) STRT_NM = pNode->NODE_NAME; else STRT_NM = " ";
  606. pNode = ItsNodeManager->FLists.Find(pLink->T_NODE_ID);
  607. if (pNode) END_NM = pNode->NODE_NAME; else END_NM = " ";
  608. sJs.printf(L"addEditLink('%s', '%s', '%s', '%s', '%s', '%s')",
  609. pLink->LINK_ID.c_str(),
  610. pLink->ROAD_NAME.c_str(),
  611. STRT_NM.c_str(),
  612. END_NM.c_str(),
  613. pLink->X_CRDN_ARR.c_str(),
  614. pLink->Y_CRDN_ARR.c_str());
  615. }
  616. #endif
  617. }
  618. }
  619. __finally
  620. {
  621. ItsLinkManager->FLists.UnLock();
  622. }
  623. }
  624. catch(...)
  625. {
  626. }
  627. }
  628. //---------------------------------------------------------------------------
  629. void __fastcall TCTVM200M::FRAMECctvList1TvListCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo,
  630. TMouseButton AButton, TShiftState AShift, bool &AHandled)
  631. {
  632. if (!ACellViewInfo) return;
  633. int nRow = FRAMECctvList1->TvList->DataController->FocusedRecordIndex;
  634. if( nRow <= -1 )
  635. return;
  636. int nMemPtr = FRAMECctvList1->TvList->DataController->Values[nRow][FRAMECctvList1->Column99->Index];
  637. TCctvCtlr* pObj = (TCctvCtlr*)nMemPtr;
  638. DisplayInfo(pObj, true);
  639. }
  640. //---------------------------------------------------------------------------
  641. void __fastcall TCTVM200M::BtnApplyClick(TObject *Sender)
  642. {
  643. if (EditMode)
  644. {
  645. Ed_LINK_ID->Text = EdTmpLinkId->Text.Trim();
  646. }
  647. }
  648. //---------------------------------------------------------------------------
  649. void __fastcall TCTVM200M::EdImageFileNameClick(TObject *Sender)
  650. {
  651. OpenBmp->Title = FTitle;
  652. OpenBmp->FileName = "";
  653. OpenBmp->Execute();
  654. }
  655. //---------------------------------------------------------------------------
  656. #include <jpeg.hpp>
  657. bool APP_CheckBmpFile(String AInFileName, String &AOutFileName)
  658. {
  659. String sFilePath = ExtractFilePath(AInFileName);
  660. String sFileName = ExtractFileName(AInFileName);
  661. String sFileExt = ExtractFileExt(AInFileName);
  662. AOutFileName = AInFileName;
  663. if (sFileExt.UpperCase() == ".BMP")
  664. {
  665. return true;
  666. }
  667. AOutFileName = AInFileName + ".bmp";
  668. TImage *Image1 = new TImage(NULL);
  669. TMemoryStream *pImgStream = new TMemoryStream();
  670. try
  671. {
  672. try
  673. {
  674. pImgStream->LoadFromFile(AInFileName);
  675. sFileExt = sFileExt.UpperCase();
  676. if (sFileExt == ".PNG")
  677. {
  678. TdxPNGImage *img = new TdxPNGImage;
  679. img->LoadFromStream(pImgStream);
  680. Image1->Picture->Bitmap->Assign(img);
  681. Image1->Picture->Bitmap->PixelFormat = pf24bit;
  682. Image1->Picture->Bitmap->SaveToFile(AOutFileName);
  683. SAFE_DELETE(img);
  684. return true;
  685. }
  686. else
  687. if (sFileExt == ".JPG" || sFileExt == ".JPEG")
  688. {
  689. TJPEGImage *img = new TJPEGImage();
  690. img->LoadFromStream(pImgStream);
  691. Image1->Picture->Bitmap->Assign(img);
  692. Image1->Picture->Bitmap->PixelFormat = pf24bit;
  693. Image1->Picture->Bitmap->SaveToFile(AOutFileName);
  694. SAFE_DELETE(img);
  695. return true;
  696. }
  697. }
  698. catch(Exception &e)
  699. {
  700. }
  701. }
  702. __finally
  703. {
  704. SAFE_DELETE(pImgStream);
  705. SAFE_DELETE(Image1);
  706. }
  707. return false;
  708. }
  709. //---------------------------------------------------------------------------
  710. void __fastcall TCTVM200M::OpenBmpCanClose(TObject *Sender, bool &CanClose)
  711. {
  712. String sFName = OpenBmp->FileName;
  713. //sFName = sFName.UpperCase();
  714. String sFilePath = ExtractFilePath(sFName);
  715. String sFileName = ExtractFileName(sFName);
  716. String sFileExt = ExtractFileExt(sFName);
  717. if (sFileExt.UpperCase() != ".BMP")
  718. {
  719. if (!APP_CheckBmpFile(sFName, sFName))
  720. {
  721. Application->MessageBox(L"이미지 파일을 읽어오는데 실패하였습니다", L"이미지 파일 읽기 실패", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  722. return;
  723. }
  724. sFileExt = ExtractFileExt(sFName);
  725. }
  726. String sMsgTitle, sMsgString;
  727. sMsgTitle = "CCTV 대체 이미지 선택";
  728. sFName = sFName.UpperCase();
  729. if (sFName.SubString(sFName.Length()-2, 3) != "BMP")
  730. {
  731. sMsgString = "BMP 파일만 적용 가능합니다.";
  732. Application->MessageBox(sMsgString.c_str(), sMsgTitle.c_str(), MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  733. return;
  734. }
  735. try
  736. {
  737. int nFileSize = ITSUtil_GetFileSize(sFName);
  738. if (nFileSize <= 0)
  739. {
  740. sMsgString = "이미지 파일을 읽어 오는데 실패하였습니다.";
  741. Application->MessageBox(sMsgString.c_str(), sMsgTitle.c_str(), MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  742. return;
  743. }
  744. #if 0
  745. if (nFileSize > (1024 * 32)) // Max 32Kbytes
  746. {
  747. sMsgString = "이미지 파일의 최대 크기는 32KBytes를 넘을 수 없습니다.\r\n이미지 파일의 용량을 줄여 주세요.";
  748. Application->MessageBox(sMsgString.c_str(), sMsgTitle.c_str(), MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  749. return;
  750. }
  751. #endif
  752. //EdImageSize->Text = String(dwFileSize);//GetFileSize(sFName));
  753. EdImageFileName->Text = sFName;
  754. ImgDspl->Picture->Bitmap->FreeImage();
  755. ImgDspl->Picture->Bitmap = NULL;
  756. ImgDspl->Picture->Bitmap->LoadFromFile(sFName);
  757. }
  758. catch(...)
  759. {
  760. }
  761. }
  762. //---------------------------------------------------------------------------
  763. void __fastcall TCTVM200M::BtnClearClick(TObject *Sender)
  764. {
  765. EdImageFileName->Text = "";
  766. ImgDspl->Picture->Bitmap->FreeImage();
  767. ImgDspl->Picture->Bitmap = NULL;
  768. }
  769. //---------------------------------------------------------------------------