EVSPH20MF.cpp 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #include "ITSSkinF.h"
  4. #include "ITSUtilF.h"
  5. #include "ITSDbF.h"
  6. #include "AppGlobalF.h"
  7. #include "CDSNodeF.h"
  8. #include "CDSLinkF.h"
  9. #include "CDSIfscF.h"
  10. #include "CDSRoadF.h"
  11. #include "ITSLangTransF.h"
  12. #include "ITSMapF.h"
  13. #include "CDSSgnlCtlrF.h"
  14. #include "ITS_OPLibF.h"
  15. #pragma hdrstop
  16. #include "EVSPH20MF.h"
  17. //---------------------------------------------------------------------------
  18. #pragma package(smart_init)
  19. #pragma link "cxButtons"
  20. #pragma link "cxCalc"
  21. #pragma link "cxCalendar"
  22. #pragma link "cxClasses"
  23. #pragma link "cxContainer"
  24. #pragma link "cxControls"
  25. #pragma link "cxCustomData"
  26. #pragma link "cxData"
  27. #pragma link "cxDataStorage"
  28. #pragma link "cxDropDownEdit"
  29. #pragma link "cxEdit"
  30. #pragma link "cxFilter"
  31. #pragma link "cxGraphics"
  32. #pragma link "cxGrid"
  33. #pragma link "cxGridCustomTableView"
  34. #pragma link "cxGridCustomView"
  35. #pragma link "cxGridLevel"
  36. #pragma link "cxGridTableView"
  37. #pragma link "cxGroupBox"
  38. #pragma link "cxLabel"
  39. #pragma link "cxLookAndFeelPainters"
  40. #pragma link "cxLookAndFeels"
  41. #pragma link "cxMaskEdit"
  42. #pragma link "cxSpinEdit"
  43. #pragma link "cxSplitter"
  44. #pragma link "cxStyles"
  45. #pragma link "cxTextEdit"
  46. #pragma link "cxTimeEdit"
  47. #pragma link "cxTrackBar"
  48. #pragma link "dxSkinBlack"
  49. #pragma link "dxSkinBlue"
  50. #pragma link "dxSkinsCore"
  51. #pragma link "dxSkinscxPCPainter"
  52. #pragma link "FRAME_OpenMapF"
  53. #pragma link "dxSkinMcSkin"
  54. #pragma resource "*.dfm"
  55. TEVSPH20M *EVSPH20M = NULL;
  56. //---------------------------------------------------------------------------
  57. void TEVSPH20M_MapCallback(TObject *ASender, const String AFunc, const String AArgs, const bool AFirst)
  58. {
  59. try
  60. {
  61. if (!EVSPH20M) return;
  62. EVSPH20M->OpenMapCallback(ASender, AFunc, AArgs, AFirst);
  63. }
  64. catch(Exception &exception)
  65. {
  66. }
  67. }
  68. //---------------------------------------------------------------------------
  69. __fastcall TEVSPH20M::TEVSPH20M(TComponent* Owner)
  70. : TForm(Owner)
  71. {
  72. LangTrans->Translate(this, ITSDb_GetConnection());
  73. ITSSkin_Load(this);
  74. //CMM_LoadForm(g_sFormsDir, this);
  75. FTitle = Caption;//"소통정보 이력분석";
  76. if (!SgnlCtlrManager) {
  77. SgnlCtlrManager = new TSgnlCtlrManager();
  78. }
  79. SgnlCtlrManager->LoadFromDb();
  80. FLinkMngr = new TTrafficValManager();
  81. FIfscMngr = new TTrafficValManager();
  82. FRoadMngr = new TTrafficValManager();
  83. FLinkLevel = 2;
  84. FLayerIdx = LyrTp_Evsp;
  85. FRAMEOpenMap1->LayerIdx = FLayerIdx;
  86. FRAMEOpenMap1->ChkShowNmbr->Visible = false;
  87. FRAMEOpenMap1->BtnMoveMapToFit->Visible = false;
  88. FRAMEOpenMap1->MapCallbackFunc = TEVSPH20M_MapCallback;
  89. }
  90. //---------------------------------------------------------------------------
  91. void __fastcall TEVSPH20M::CommClose()
  92. {
  93. try
  94. {
  95. delete FLinkMngr;
  96. delete FIfscMngr;
  97. delete FRoadMngr;
  98. CMM_SaveForm(g_sFormsDir, this);
  99. }
  100. catch(...)
  101. {
  102. }
  103. }
  104. //---------------------------------------------------------------------------
  105. void __fastcall TEVSPH20M::FormShow(TObject *Sender)
  106. {
  107. Refresh();
  108. FRAMEOpenMap1->OpenMap();
  109. FormInit();
  110. TmrShow->Enabled = true;
  111. }
  112. //---------------------------------------------------------------------------
  113. void __fastcall TEVSPH20M::FormInit()
  114. {
  115. ADOQry->Connection = ITSDb_GetConnection();
  116. ADOSta->Connection = ITSDb_GetConnection();
  117. m_pGDC = TvList->DataController;
  118. TDateTime dtNow = Now() - ((double)3 / (double)24);
  119. DtStDate->Date = dtNow;
  120. DtEdDate->Date = Now();
  121. //DtStTime->EditValue = "00:00";
  122. //dtNow = Now() - ((double)2 / (double)24);
  123. //DtEdTime->EditValue = dtNow.FormatString("hh") + ":59";
  124. //DtStTime->Time = StrToDateTime(dtNow.FormatString("hh") + ":00");
  125. //DtEdTime->Time = StrToDateTime(dtNow.FormatString("hh") + ":59");
  126. DtStTime->Time = StrToDateTime("00:00");
  127. DtEdTime->Time = StrToDateTime(Now().FormatString("hh") + ":59");
  128. }
  129. //---------------------------------------------------------------------------
  130. void __fastcall TEVSPH20M::TmrShowTimer(TObject *Sender)
  131. {
  132. TmrShow->Enabled = false;
  133. }
  134. //---------------------------------------------------------------------------
  135. void __fastcall TEVSPH20M::InitGisLink()
  136. {
  137. if (!FRAMEOpenMap1->MapStart) return;
  138. return;
  139. TItsNode* pNode;
  140. String STRT_NM;
  141. String END_NM;
  142. try
  143. {
  144. if (FLinkLevel == 1)
  145. {
  146. ItsLinkManager->FLists.Lock();
  147. try
  148. {
  149. FOR_STL(TItsLink*, pLink, ItsLinkManager->FLists)
  150. {
  151. if (pLink->DEL_YN == "Y") continue;
  152. if (pLink->IsVertex)
  153. {
  154. TTrafficVal* pTraf = new TTrafficVal();
  155. pTraf->ID = pLink->LINK_ID;
  156. pTraf->IsUpdate = true;
  157. pTraf->GRADE_VAL = 0;
  158. FLinkMngr->FLists.Push(pTraf->ID, pTraf);
  159. pNode = ItsNodeManager->FLists.Find(pLink->F_NODE_ID);
  160. if (pNode) STRT_NM = pNode->NODE_NAME; else STRT_NM = " ";
  161. pNode = ItsNodeManager->FLists.Find(pLink->T_NODE_ID);
  162. if (pNode) END_NM = pNode->NODE_NAME; else END_NM = " ";
  163. sJs.printf(L"addEditLink('%s', '%s', '%s', '%s', '%s', '%s')",
  164. pLink->LINK_ID.c_str(),
  165. pLink->ROAD_NAME.c_str(),
  166. STRT_NM.c_str(),
  167. END_NM.c_str(),
  168. pLink->X_CRDN_ARR.c_str(),
  169. pLink->Y_CRDN_ARR.c_str());
  170. FRAMEOpenMap1->ExecScript(sJs);
  171. }
  172. }
  173. }
  174. __finally
  175. {
  176. ItsLinkManager->FLists.UnLock();
  177. }
  178. FRAMEOpenMap1->ExecScript("makeEditLinkLayer()");
  179. }
  180. else
  181. if (FLinkLevel == 2)
  182. {
  183. ItsIfscManager->FLists.Lock();
  184. try
  185. {
  186. FOR_STL(TItsIfsc*, pIfsc, ItsIfscManager->FLists)
  187. {
  188. if (pIfsc->DEL_YN == "Y") continue;
  189. if (pIfsc->IsVertex)
  190. {
  191. TTrafficVal* pTraf = new TTrafficVal();
  192. pTraf->ID = pIfsc->IFSC_ID;
  193. pTraf->IsUpdate = true;
  194. pTraf->GRADE_VAL = 0;
  195. FIfscMngr->FLists.Push(pTraf->ID, pTraf);
  196. sJs.printf(L"addEditLink('%s', '%s', '%s', '%s', '%s', '%s')",
  197. pIfsc->IFSC_ID.c_str(),
  198. pIfsc->IFSC_NM.c_str(),
  199. pIfsc->STRT_NM.c_str(),
  200. pIfsc->END_NM.c_str(),
  201. pIfsc->X_CRDN_ARR.c_str(),
  202. pIfsc->Y_CRDN_ARR.c_str());
  203. FRAMEOpenMap1->ExecScript(sJs);
  204. }
  205. }
  206. }
  207. __finally
  208. {
  209. ItsIfscManager->FLists.UnLock();
  210. }
  211. FRAMEOpenMap1->ExecScript("makeEditLinkLayer()");
  212. }
  213. else
  214. if (FLinkLevel == 3)
  215. {
  216. ItsRoadManager->FLists.Lock();
  217. try
  218. {
  219. FOR_STL(TItsRoad*, pRoad, ItsRoadManager->FLists)
  220. {
  221. if (pRoad->DEL_YN == "Y") continue;
  222. if (pRoad->IsVertex)
  223. {
  224. TTrafficVal* pTraf = new TTrafficVal();
  225. pTraf->ID = pRoad->ROAD_ID;
  226. pTraf->IsUpdate = true;
  227. pTraf->GRADE_VAL = 0;
  228. FRoadMngr->FLists.Push(pTraf->ID, pTraf);
  229. sJs.printf(L"addEditLink('%s', '%s', '%s', '%s', '%s', '%s')",
  230. pRoad->ROAD_ID.c_str(),
  231. pRoad->ROAD_NM.c_str(),
  232. pRoad->STRT_NM.c_str(),
  233. pRoad->END_NM.c_str(),
  234. pRoad->X_CRDN_ARR.c_str(),
  235. pRoad->Y_CRDN_ARR.c_str());
  236. FRAMEOpenMap1->ExecScript(sJs);
  237. }
  238. }
  239. }
  240. __finally
  241. {
  242. ItsRoadManager->FLists.UnLock();
  243. }
  244. FRAMEOpenMap1->ExecScript("makeEditLinkLayer()");
  245. }
  246. }
  247. catch(...)
  248. {
  249. }
  250. }
  251. //---------------------------------------------------------------------------
  252. void __fastcall TEVSPH20M::BtnSearchClick(TObject *Sender)
  253. {
  254. Application->ProcessMessages();
  255. TSqlCursor sqlCrs((TControl*)BtnSearch);
  256. #if 0
  257. FStDateTime = DtStDate->Date.FormatString("yyyymmdd") + DtStTime->Time.FormatString("hh");
  258. FEdDateTime = DtEdDate->Date.FormatString("yyyymmdd") + DtEdTime->Time.FormatString("hh");
  259. #else
  260. FStDateTime = DtStDate->Date.FormatString("yyyymmdd") + DtStTime->Time.FormatString("hhnn");
  261. FEdDateTime = DtEdDate->Date.FormatString("yyyymmdd") + DtEdTime->Time.FormatString("hhnn");
  262. #endif
  263. if (FStDateTime > FEdDateTime)
  264. {
  265. Application->MessageBox(FrmLang->lblQryDtErr->Caption.c_str(),//L"검색 시작시각이 검색 종료시각 보다 큽니다.",
  266. FTitle.c_str(), MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  267. ActiveControl = DtStDate;
  268. return;
  269. }
  270. #if 0
  271. if ( StrToInt(DtEdTime->Time.FormatString("hh")) - StrToInt(DtStTime->Time.FormatString("hh")) >= 3)
  272. {
  273. Application->MessageBox(lblText2->Caption.c_str(),//L"3시간 이상의 정보를 조회할 수 없습니다.",
  274. FTitle.c_str(), MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  275. ActiveControl = DtStDate;
  276. return;
  277. }
  278. #endif
  279. #if 0
  280. FStDateTime = FStDateTime + "0000";
  281. FEdDateTime = FEdDateTime + "5959";
  282. #else
  283. FStDateTime = FStDateTime + "00";
  284. FEdDateTime = FEdDateTime + "59";
  285. #endif
  286. FLinkLevel = 2;
  287. ClearGis();
  288. SelHistorySummary();
  289. }
  290. //---------------------------------------------------------------------------
  291. void __fastcall TEVSPH20M::BtnCloseClick(TObject *Sender)
  292. {
  293. Close();
  294. }
  295. //---------------------------------------------------------------------------
  296. void __fastcall TEVSPH20M::FormClose(TObject *Sender, TCloseAction &Action)
  297. {
  298. CommClose();
  299. EVSPH20M = NULL;
  300. Action = caFree;
  301. }
  302. //---------------------------------------------------------------------------
  303. void __fastcall TEVSPH20M::DtStDatePropertiesValidate(TObject *Sender, Variant &DisplayValue, TCaption &ErrorText, bool &Error)
  304. {
  305. DtEdDate->Date = DtStDate->Date;
  306. }
  307. //---------------------------------------------------------------------------
  308. void __fastcall TEVSPH20M::SelHistorySummary()
  309. {
  310. TSqlCursor sqlCrs;
  311. String sQry;
  312. TADOQuery *pADO = ADOQry;
  313. sQry = "SELECT A.SRVC_ID, A.EMRG_VHCL_ID, TO_CHAR(MIN(A.CLCT_DT), 'YYYY-MM-DD HH24:MI:SS') AS CLCT_DT, \r\n"
  314. " COUNT(1) AS DATA_CNT \r\n"
  315. " FROM EMRG_VHCL_OPER_HS A \r\n"
  316. " WHERE A.CLCT_DT BETWEEN TO_DATE(:p01, 'YYYYMMDDHH24MISS') AND TO_DATE(:p02, 'YYYYMMDDHH24MISS') \r\n"
  317. " GROUP BY A.SRVC_ID, A.EMRG_VHCL_ID \r\n"
  318. " ORDER BY MIN(A.CLCT_DT) \r\n";
  319. try
  320. {
  321. ITSDb_SQLText(pADO, sQry);
  322. ITSDb_SQLBind(pADO, "p01", FStDateTime);
  323. ITSDb_SQLBind(pADO, "p02", FEdDateTime);
  324. ITSDb_SQLOpen(pADO);
  325. DspHistorySummary();
  326. }
  327. catch(EDatabaseError &E)
  328. {
  329. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  330. DBERRORMSG(Caption, String(E.ClassName()), E.Message, sQry);
  331. throw Exception(String(E.ClassName()) + E.Message);
  332. }
  333. catch(Exception &exception)
  334. {
  335. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  336. DBERRORMSG(Caption, String(exception.ClassName()), exception.Message, sQry);
  337. throw Exception(String(exception.ClassName()) + exception.Message);
  338. }
  339. }
  340. //---------------------------------------------------------------------------
  341. void __fastcall TEVSPH20M::DspHistorySummary()
  342. {
  343. TADOQuery *pADO = ADOQry;
  344. try
  345. {
  346. CMM_ClearGridTableView(TvList);
  347. int nRow = 0;
  348. try
  349. {
  350. TvList->BeginUpdate();
  351. m_pGDC->RecordCount = pADO->RecordCount;
  352. for( ; !pADO->Eof; pADO->Next(), nRow++)
  353. {
  354. m_pGDC->Values[nRow][Column01->Index] = nRow+1;
  355. m_pGDC->Values[nRow][Column02->Index] = ITSUtil_StrToTime(pADO->FieldByName("CLCT_DT")->AsString); //수집시각
  356. m_pGDC->Values[nRow][Column03->Index] = pADO->FieldByName("DATA_CNT")->AsInteger;
  357. m_pGDC->Values[nRow][Column04->Index] = pADO->FieldByName("SRVC_ID")->AsString;
  358. m_pGDC->Values[nRow][Column05->Index] = pADO->FieldByName("EMRG_VHCL_ID")->AsString;
  359. }
  360. }
  361. __finally
  362. {
  363. if (pADO)
  364. {
  365. pADO->Close();
  366. }
  367. TvList->EndUpdate();
  368. CxList->SetFocus();
  369. LblRecords->Caption = FormatFloat("##,##0", m_pGDC->RecordCount) + FrmLang->lblEA->Caption;//" 건";
  370. String sEnd = FrmLang->lblQrySel->Caption + " [" + LblRecords->Caption + "]";//"데이터 " + LblRecords->Caption + " 이 조회 되었습니다.";
  371. Application->MessageBox(sEnd.c_str(),
  372. FrmLang->lblQryEnd->Caption.c_str(),//L"데이터 조회 완료",
  373. MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  374. }
  375. }
  376. catch(EDatabaseError &E)
  377. {
  378. throw Exception(String(E.ClassName()) + E.Message);
  379. }
  380. catch(...)
  381. {
  382. throw Exception(FrmLang->lblDbErr->Caption);//"알수없는 오류가 발생하였습니다.");
  383. }
  384. }
  385. //---------------------------------------------------------------------------
  386. void __fastcall TEVSPH20M::SelHistory(String AServiceId, String AVehicleId)
  387. {
  388. TSqlCursor sqlCrs;
  389. String sQry;
  390. TADOQuery *pADO = ADOQry;
  391. sQry = "SELECT A.SRVC_ID, A.IXR_NMBR, A.IXR_ORD \r\n"
  392. " FROM PRIO_SGNL_OPER_IXR A \r\n"
  393. " WHERE A.SRVC_ID = :p03 \r\n"
  394. " ORDER BY A.IXR_ORD \r\n";
  395. try
  396. {
  397. ITSDb_SQLText(pADO, sQry);
  398. ITSDb_SQLBind(pADO, "p03", AServiceId);
  399. ITSDb_SQLOpen(pADO);
  400. DspHistory();
  401. }
  402. catch(EDatabaseError &E)
  403. {
  404. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  405. DBERRORMSG(Caption, String(E.ClassName()), E.Message, sQry);
  406. throw Exception(String(E.ClassName()) + E.Message);
  407. }
  408. catch(Exception &exception)
  409. {
  410. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  411. DBERRORMSG(Caption, String(exception.ClassName()), exception.Message, sQry);
  412. throw Exception(String(exception.ClassName()) + exception.Message);
  413. }
  414. }
  415. //---------------------------------------------------------------------------
  416. void __fastcall TEVSPH20M::DspHistory()
  417. {
  418. TADOQuery *pADO = ADOQry;
  419. bool isMapStart = FRAMEOpenMap1->MapStart;
  420. if (isMapStart) {
  421. sJs.printf(L"removeLayerObject(%d)", FLayerIdx);
  422. FRAMEOpenMap1->ExecScript(sJs);
  423. }
  424. String arrObj = "";
  425. String sTemp;
  426. try
  427. {
  428. CMM_ClearGridTableView(TvHist);
  429. TcxDataController *pGDC = TvHist->DataController;
  430. int nRow = 0;
  431. try
  432. {
  433. TvHist->BeginUpdate();
  434. pGDC->RecordCount = pADO->RecordCount;
  435. for( ; !pADO->Eof; pADO->Next(), nRow++)
  436. {
  437. pGDC->Values[nRow][ColHist01->Index] = nRow+1;
  438. String SRVC_ID = pADO->FieldByName("SRVC_ID")->AsString;
  439. String IXR_NMBR = pADO->FieldByName("IXR_NMBR")->AsString;
  440. int IXR_ORD = pADO->FieldByName("IXR_ORD")->AsInteger;
  441. pGDC->Values[nRow][ColHist02->Index] = SRVC_ID;
  442. pGDC->Values[nRow][ColHist04->Index] = IXR_ORD;
  443. float X_CRDN = 0;
  444. float Y_CRDN = 0;
  445. String IXR_NM = IXR_NMBR;
  446. //int tempIxrNmbr = IXR_NMBR.ToIntDef(0) / 1000;
  447. //TSgnlCtlr *pObj = SgnlCtlrManager->FLists.Find(String(tempIxrNmbr));
  448. TSgnlCtlr *pObj = SgnlCtlrManager->FLists.Find(IXR_NMBR);
  449. if (pObj) {
  450. X_CRDN = pObj->X_CRDN;
  451. Y_CRDN = pObj->Y_CRDN;
  452. IXR_NM = IXR_NMBR + "." + pObj->IXR_NM;
  453. }
  454. pGDC->Values[nRow][ColHist05->Index] = X_CRDN;
  455. pGDC->Values[nRow][ColHist06->Index] = Y_CRDN;
  456. pGDC->Values[nRow][ColHist03->Index] = IXR_NM;
  457. if (arrObj != "") arrObj += "|";
  458. #if 0
  459. if (nRow == 0) {
  460. sTemp.printf(L"%s,%s,%s,%.6f,%.6f,3,0,0,0", IXR_NMBR.c_str(), IXR_NMBR.c_str(), IXR_NMBR.c_str(), X_CRDN, Y_CRDN);
  461. }
  462. else if (nRow == pGDC->RecordCount-1) {
  463. sTemp.printf(L"%s,%s,%s,%.6f,%.6f,4,0,0,0", IXR_NMBR.c_str(), IXR_NMBR.c_str(), IXR_NMBR.c_str(), X_CRDN, Y_CRDN);
  464. }
  465. else {
  466. sTemp.printf(L"%s,%s,%s,%.6f,%.6f,1,0,0,0", IXR_NMBR.c_str(), IXR_NMBR.c_str(), IXR_NMBR.c_str(), X_CRDN, Y_CRDN);
  467. }
  468. #else
  469. if (pObj) {
  470. sTemp.printf(L"%s,%s,%s,%.6f,%.6f,0,0,0,0", IXR_NMBR.c_str(), IXR_NMBR.c_str(), IXR_NMBR.c_str(), X_CRDN, Y_CRDN);
  471. }
  472. #endif
  473. arrObj += sTemp;
  474. }
  475. }
  476. __finally
  477. {
  478. if (pADO)
  479. {
  480. pADO->Close();
  481. }
  482. TvHist->EndUpdate();
  483. CxHist->SetFocus();
  484. LblRecords->Caption = FormatFloat("##,##0", pGDC->RecordCount) + FrmLang->lblEA->Caption;//" 건";
  485. if (isMapStart && arrObj != "")
  486. {
  487. sJs.printf(L"addFacility(%d, '%s')", FLayerIdx, arrObj.c_str());
  488. FRAMEOpenMap1->ExecScript(sJs);
  489. }
  490. String sEnd = FrmLang->lblQrySel->Caption + " [" + LblRecords->Caption + "]";//"데이터 " + LblRecords->Caption + " 이 조회 되었습니다.";
  491. Application->MessageBox(sEnd.c_str(),
  492. FrmLang->lblQryEnd->Caption.c_str(),//L"데이터 조회 완료",
  493. MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  494. }
  495. }
  496. catch(EDatabaseError &E)
  497. {
  498. throw Exception(String(E.ClassName()) + E.Message);
  499. }
  500. catch(...)
  501. {
  502. throw Exception(FrmLang->lblDbErr->Caption);//"알수없는 오류가 발생하였습니다.");
  503. }
  504. }
  505. //---------------------------------------------------------------------------
  506. void __fastcall TEVSPH20M::ClearGis()
  507. {
  508. cxGroupBox1->Caption = lblText1->Caption;
  509. CMM_ClearGridTableView(TvHist);
  510. }
  511. //---------------------------------------------------------------------------
  512. void __fastcall TEVSPH20M::TvListCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo,
  513. TMouseButton AButton, TShiftState AShift, bool &AHandled)
  514. {
  515. int nRow = m_pGDC->FocusedRecordIndex;
  516. if( nRow <= -1 )
  517. return;
  518. FServiceId = VarToStr(m_pGDC->Values[nRow][Column04->Index]);
  519. FVehicleId = VarToStr(m_pGDC->Values[nRow][Column05->Index]);
  520. cxGroupBox1->Caption = lblText1->Caption + " - " + FServiceId + " (" + FVehicleId + ")";
  521. SelHistory(FServiceId, FVehicleId);
  522. }
  523. //---------------------------------------------------------------------------
  524. void __fastcall TEVSPH20M::OpenMapCallback(TObject *ASender, const String AFunc, const String AArgs, const bool AFirst)
  525. {
  526. try
  527. {
  528. if (AFirst)
  529. {
  530. //지도를 편집모드로 변경
  531. sJs.printf(L"setEditMode(%d, 1)", FLayerIdx);
  532. FRAMEOpenMap1->ExecScript(sJs);
  533. //편집레이어 생성
  534. FRAMEOpenMap1->ExecScript("initEditLayer()");
  535. FRAMEOpenMap1->ExecScript("setEditArrow(0)");
  536. FRAMEOpenMap1->ExecScript("setEditColor()");
  537. //배경링크레이어 생성
  538. InitGisLink();
  539. return;
  540. }
  541. }
  542. catch(Exception &exception)
  543. {
  544. }
  545. }
  546. //---------------------------------------------------------------------------
  547. void __fastcall TEVSPH20M::FormCloseQuery(TObject *Sender, bool &CanClose)
  548. {
  549. FRAMEOpenMap1->OnCloseQuery(CanClose);
  550. }
  551. //---------------------------------------------------------------------------
  552. void __fastcall TEVSPH20M::DtStDateChange(TObject *Sender)
  553. {
  554. //DtEdDate->Date = DtStDate->Date;
  555. }
  556. //---------------------------------------------------------------------------
  557. void __fastcall TEVSPH20M::TvHistCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo,
  558. TMouseButton AButton, TShiftState AShift, bool &AHandled)
  559. {
  560. TcxDataController *pGDC = TvHist->DataController;
  561. int nRow = pGDC->FocusedRecordIndex;
  562. if( nRow <= -1 )
  563. return;
  564. String xCrdn = VarToStr(pGDC->Values[nRow][ColHist05->Index]);
  565. String yCrdn = VarToStr(pGDC->Values[nRow][ColHist06->Index]);
  566. if (xCrdn != "0" && yCrdn != "0") {
  567. FRAMEOpenMap1->SelectObjectByPos(StrToFloat(xCrdn), StrToFloat(yCrdn), true);
  568. }
  569. }
  570. //---------------------------------------------------------------------------