EVSP100MF.cpp 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650
  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 "WindowMsgF.h"
  9. #include "CDSSgnlCtlrF.h"
  10. #include "ITS_OPLibF.h"
  11. #pragma hdrstop
  12. #include "EVSP100MF.h"
  13. //---------------------------------------------------------------------------
  14. #pragma package(smart_init)
  15. #pragma link "cxButtons"
  16. #pragma link "cxClasses"
  17. #pragma link "cxContainer"
  18. #pragma link "cxControls"
  19. #pragma link "cxCustomData"
  20. #pragma link "cxData"
  21. #pragma link "cxDataStorage"
  22. #pragma link "cxDropDownEdit"
  23. #pragma link "cxEdit"
  24. #pragma link "cxFilter"
  25. #pragma link "cxGraphics"
  26. #pragma link "cxGrid"
  27. #pragma link "cxGridCustomTableView"
  28. #pragma link "cxGridCustomView"
  29. #pragma link "cxGridLevel"
  30. #pragma link "cxGridTableView"
  31. #pragma link "cxGroupBox"
  32. #pragma link "cxLabel"
  33. #pragma link "cxLookAndFeelPainters"
  34. #pragma link "cxLookAndFeels"
  35. #pragma link "cxMaskEdit"
  36. #pragma link "cxSpinEdit"
  37. #pragma link "cxSplitter"
  38. #pragma link "cxStyles"
  39. #pragma link "cxTextEdit"
  40. #pragma link "dxSkinBlue"
  41. #pragma link "dxSkinsCore"
  42. #pragma link "dxSkinscxPCPainter"
  43. #pragma link "FRAME_OpenMapF"
  44. #pragma link "FRAME_SgnlCtlrListF"
  45. #pragma link "dxSkinBlack"
  46. #pragma link "dxSkinMcSkin"
  47. #pragma resource "*.dfm"
  48. TEVSP100M *EVSP100M = NULL;
  49. //---------------------------------------------------------------------------
  50. void TEVSP100M_MapCallback(TObject *ASender, const String AFunc, const String AArgs, const bool AFirst)
  51. {
  52. try
  53. {
  54. if (!EVSP100M) return;
  55. EVSP100M->OpenMapCallback(ASender, AFunc, AArgs, AFirst);
  56. }
  57. catch(Exception &exception)
  58. {
  59. }
  60. }
  61. //---------------------------------------------------------------------------
  62. __fastcall TEVSP100M::TEVSP100M(TComponent* Owner)
  63. : TForm(Owner)
  64. {
  65. LangTrans->Translate(this, ITSDb_GetConnection());
  66. ITSSkin_Load(this);
  67. CMM_LoadForm(g_sFormsDir, this);
  68. FUpdate= false;
  69. FTitle = Caption;
  70. FRAMESgnlCtlrList1->TvList->OptionsView->ColumnAutoWidth = true;
  71. FRAMESgnlCtlrList1->PnlTop->Visible = false;
  72. FRAMESgnlCtlrList1->PnlBottom->Visible = false;
  73. FRAMESgnlCtlrList1->ColumnSel->Visible = false;
  74. m_pGDC = FRAMESgnlCtlrList1->TvList->DataController;
  75. FLayerIdx = LyrTp_Evsp;
  76. FRAMEOpenMap1->LayerIdx = FLayerIdx;
  77. FRAMEOpenMap1->MapCallbackFunc = TEVSP100M_MapCallback;
  78. FRAMEOpenMap1->ChkShowNmbr->Caption = "교차로 번호";
  79. EditMode = false;
  80. }
  81. //---------------------------------------------------------------------------
  82. void __fastcall TEVSP100M::CommClose()
  83. {
  84. try
  85. {
  86. CMM_SaveForm(g_sFormsDir, this);
  87. }
  88. catch(...)
  89. {
  90. }
  91. }
  92. //---------------------------------------------------------------------------
  93. void __fastcall TEVSP100M::FormShow(TObject *Sender)
  94. {
  95. Refresh();
  96. FRAMEOpenMap1->OpenMap();
  97. SgnlCtlrManager->FLists.Lock();
  98. try
  99. {
  100. FOR_STL(TSgnlCtlr*, pObj, SgnlCtlrManager->FLists)
  101. {
  102. if (pObj->DEL_YN == "Y") continue;
  103. pObj->FData3 = NULL;
  104. }
  105. }
  106. __finally
  107. {
  108. SgnlCtlrManager->FLists.UnLock();
  109. }
  110. FormInit();
  111. ChangeEditMode(1);
  112. TmrShow->Enabled = true;
  113. }
  114. //---------------------------------------------------------------------------
  115. void __fastcall TEVSP100M::FormInit()
  116. {
  117. EdNmbr->Text = "";
  118. EdId->Text = "";
  119. EdNm->Text = "";
  120. //CbType->ItemIndex = 0;
  121. SePosX->Value = 0;
  122. SePosY->Value = 0;
  123. EdCtlrIp->Text = "";
  124. EdCmncPort->Text = "";
  125. Se_GROUP_NO->Value = 1;
  126. Se_LOCAL_NO->Value = 1;
  127. Se_TRAF_CLCT_CYCL->Value = 60;
  128. Se_STTS_CLCT_CYCL->Value = 60;
  129. Ed_ISTL_LCTN_NM->Text = "";
  130. ISTL_LCTN_ADDR->Text = "";
  131. FNewDb = false;
  132. }
  133. //---------------------------------------------------------------------------
  134. void __fastcall TEVSP100M::TmrShowTimer(TObject *Sender)
  135. {
  136. TmrShow->Enabled = false;
  137. FRAMESgnlCtlrList1->UpdateList();
  138. }
  139. //---------------------------------------------------------------------------
  140. void __fastcall TEVSP100M::BtnCloseClick(TObject *Sender)
  141. {
  142. Close();
  143. }
  144. //---------------------------------------------------------------------------
  145. void __fastcall TEVSP100M::FormClose(TObject *Sender, TCloseAction &Action)
  146. {
  147. CommClose();
  148. EVSP100M = NULL;
  149. Action = caFree;
  150. }
  151. //---------------------------------------------------------------------------
  152. void __fastcall TEVSP100M::FormCloseQuery(TObject *Sender, bool &CanClose)
  153. {
  154. if (FUpdate)
  155. {
  156. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_14, 0);
  157. }
  158. FRAMESgnlCtlrList1->OnCloseQuery(CanClose);
  159. FRAMEOpenMap1->OnCloseQuery(CanClose);
  160. }
  161. //---------------------------------------------------------------------------
  162. void __fastcall TEVSP100M::DisplayInfo(TSgnlCtlr* AObj, bool AMoveObj/*=true*/)
  163. {
  164. FormInit();
  165. if (!AObj) return;
  166. if (AMoveObj)
  167. {
  168. sJs.printf(L"selectLayerObject(%d, '%s', %d)", FLayerIdx, AObj->CTLR_NMBR.c_str(), FRAMEOpenMap1->MapZoom);
  169. FRAMEOpenMap1->ExecScript(sJs);
  170. }
  171. EdNmbr->Text = AObj->CTLR_NMBR;
  172. EdId->Text = AObj->CTLR_NMBR;
  173. EdNm->Text = AObj->NAME;
  174. //APP_SetCode(CbType, AObj->TYPE_CD);
  175. SePosX->Value = AObj->X_CRDN;
  176. SePosY->Value = AObj->Y_CRDN;
  177. //EdType->Text = AObj->CROSS_TYPE;
  178. // FRAMEGisMap1->SelectObjectByPos(SePosX->Value, SePosY->Value, true);
  179. ChangeEditMode(3);
  180. }
  181. //---------------------------------------------------------------------------
  182. void __fastcall TEVSP100M::UpdateIcon()
  183. {
  184. if (!FRAMEOpenMap1->MapStart) return;
  185. sJs.printf(L"removeLayerObject(%d)", FLayerIdx);
  186. FRAMEOpenMap1->ExecScript(sJs);
  187. String arrObj = "";
  188. String sTemp;
  189. SgnlCtlrManager->FLists.Lock();
  190. try
  191. {
  192. FOR_STL(TSgnlCtlr*, pObj, SgnlCtlrManager->FLists)
  193. {
  194. if (pObj->DEL_YN == "Y") continue;
  195. if (arrObj != "") arrObj += "|";
  196. sTemp.printf(L"%s,%s,%s,%.6f,%.6f,0,0,0,0", pObj->CTLR_NMBR.c_str(), pObj->CTLR_NMBR.c_str(), pObj->NAME.c_str(), pObj->X_CRDN, pObj->Y_CRDN);
  197. arrObj += sTemp;
  198. }
  199. }
  200. __finally
  201. {
  202. SgnlCtlrManager->FLists.UnLock();
  203. if (arrObj != "")
  204. {
  205. sJs.printf(L"addFacility(%d, '%s')", FLayerIdx, arrObj.c_str());
  206. FRAMEOpenMap1->ExecScript(sJs);
  207. }
  208. }
  209. }
  210. //---------------------------------------------------------------------------
  211. void __fastcall TEVSP100M::BtnEditClick(TObject *Sender)
  212. {
  213. String sId = EdNmbr->Text;
  214. TSgnlCtlr *pObj = SgnlCtlrManager->FLists.Find(sId);
  215. FNewDb = false;
  216. if (BtnEdit->Caption == FrmLang->lblEdit->Caption)//"편집")
  217. {
  218. //편집모드 시작
  219. ChangeEditMode(0);
  220. if (pObj)
  221. {
  222. //시설물아이콘을 편집아이콘으로 변경
  223. //function editFacilityObject(ALyrIdx, ANmbr, AComm(0:오류-편집,1:정상), AEdit(편집모드:1-편집,0-편집취소))
  224. sJs.printf(L"editFacilityObject(%d, '%s', 1, 1)", FLayerIdx, pObj->CTLR_NMBR.c_str());
  225. FRAMEOpenMap1->ExecScript(sJs);
  226. }
  227. }
  228. else
  229. {
  230. //편집모드 취소
  231. ChangeEditMode(1);
  232. if (pObj)
  233. {
  234. //원래 정보를 화면에 표출
  235. CMM_SetGridRow(FRAMESgnlCtlrList1->CxList, FRAMESgnlCtlrList1->TvList, sId, FRAMESgnlCtlrList1->Column01->Index);
  236. DisplayInfo(pObj, false);
  237. #if 0
  238. //지도시설물아이콘을 원래아이콘으로 변경
  239. sJs.printf(L"editFacilityObject(%d, '%s', 0, 0)", FLayerIdx, pObj->CROSS_ID.c_str());
  240. FRAMEOpenMap1->ExecScript(sJs);
  241. #else
  242. //추가 모드에서 취소하는 경우 지도에 신규로 추가한 객체를 찾아서 삭제해 주는것 보다
  243. //새롭게 다시 그리자
  244. UpdateIcon();
  245. #endif
  246. }
  247. else
  248. {
  249. //객체가 없는 경우는 추가 모드에서 취소한 경우임
  250. sJs.printf(L"removeFacilityObject(%d, '%s')", FLayerIdx, sId.c_str());
  251. FRAMEOpenMap1->ExecScript(sJs);
  252. }
  253. }
  254. }
  255. //---------------------------------------------------------------------------
  256. void __fastcall TEVSP100M::ChangeEditMode(int AEdit)
  257. {
  258. bool bEnabled = false;
  259. switch(AEdit)
  260. {
  261. case 0: //편집버튼클릭
  262. {
  263. BtnEdit->Enabled = true;
  264. BtnInsert->Enabled = false;
  265. BtnDelete->Enabled = false;
  266. BtnSave->Enabled = true;
  267. BtnEdit->Caption = FrmLang->lblCancel->Caption;//"취소";
  268. BtnEdit->Hint = FrmLang->lblCancel->Hint;//데이터 편집 취소";
  269. EditMode = true;
  270. }
  271. break;
  272. case 1: //편집[취소]버튼클릭
  273. {
  274. FormInit(); //화면을 모두 지운다.
  275. BtnEdit->Enabled = false;
  276. BtnInsert->Enabled = true;
  277. BtnDelete->Enabled = false;
  278. BtnSave->Enabled = false;
  279. BtnEdit->Caption = FrmLang->lblEdit->Caption;//"편집";
  280. BtnEdit->Hint = FrmLang->lblEdit->Hint;//데이터 편집";
  281. //bEnabled = true;
  282. EditMode = false;
  283. }
  284. break;
  285. case 2: //추가
  286. {
  287. BtnEdit->Enabled = true;
  288. BtnInsert->Enabled = false;
  289. BtnDelete->Enabled = false;
  290. BtnSave->Enabled = true;
  291. BtnEdit->Caption = FrmLang->lblCancel->Caption;//"취소";
  292. BtnEdit->Hint = FrmLang->lblCancel->Hint;//데이터 편집 취소";
  293. EditMode = true;
  294. }
  295. break;
  296. case 3: //수정모드
  297. {
  298. BtnEdit->Enabled = true;
  299. BtnInsert->Enabled = true;
  300. BtnDelete->Enabled = true;
  301. BtnSave->Enabled = false;
  302. BtnEdit->Caption = FrmLang->lblEdit->Caption;//"편집";
  303. BtnEdit->Hint = FrmLang->lblEdit->Hint;//데이터 편집";
  304. bEnabled = true;
  305. EditMode = false;
  306. }
  307. break;
  308. }
  309. if (AEdit == 0 || AEdit == 2)
  310. {
  311. FRAMESgnlCtlrList1->CxList->Enabled = false;
  312. }
  313. else
  314. {
  315. FRAMESgnlCtlrList1->CxList->Enabled = true;
  316. }
  317. PnlEdit->Enabled = EditMode;
  318. }
  319. //---------------------------------------------------------------------------
  320. void __fastcall TEVSP100M::BtnInsertClick(TObject *Sender)
  321. {
  322. int nMsgType = MB_OK|MB_ICONERROR|MB_APPLMODAL;
  323. String sId = InputBox("교차로 ID",
  324. "신규 교차로 ID를 입력하세요.",
  325. "최대10자리" );
  326. sId = sId.Trim();
  327. if (sId == "최대10자리" || sId == "")
  328. {
  329. return;
  330. }
  331. if (AnsiString(sId).Length() > 10)
  332. {
  333. Application->MessageBox(L"교차로 ID는 10Byte를 초과할 수 없습니다.",
  334. FTitle.c_str(), nMsgType);
  335. return;
  336. }
  337. TSgnlCtlr *pDb = (TSgnlCtlr *)SgnlCtlrManager->FLists.Find(sId);
  338. if (pDb)
  339. {
  340. String sErr = "교차로 ID [" + sId + "]는 이미 사용 중 입니다.";
  341. Application->MessageBox(sErr.c_str(), FTitle.c_str(), nMsgType);
  342. return;
  343. }
  344. FormInit();
  345. EdNmbr->Text = sId;
  346. EdId->Text = EdNmbr->Text;
  347. SePosX->Value = FRAMEOpenMap1->CenterX;
  348. SePosY->Value = FRAMEOpenMap1->CenterY;
  349. //지도에 새로운 시설물 아이콘 추가하면서 편집모드로 변경
  350. String arrObj = "";
  351. arrObj.printf(L"'%s',New,New,%.6f,%.6f,0", sId.c_str(), FRAMEOpenMap1->CenterX, FRAMEOpenMap1->CenterY);
  352. sJs.printf(L"addFacilityObject(%d, '%s')", FLayerIdx, arrObj.c_str());
  353. FRAMEOpenMap1->ExecScript(sJs);
  354. ChangeEditMode(2);
  355. FNewDb = true;
  356. }
  357. //---------------------------------------------------------------------------
  358. void __fastcall TEVSP100M::BtnDeleteClick(TObject *Sender)
  359. {
  360. if (!FRAMEOpenMap1->MapStart) return;
  361. int nIdx = m_pGDC->FocusedRecordIndex;
  362. if (nIdx < 0) return;
  363. String sId = EdNmbr->Text;
  364. if (sId.IsEmpty())
  365. {
  366. Application->MessageBox(lblText2->Caption.c_str(),//L"삭제할 VDS를 목록에서 선택하세요.\r\n목록에서 더블클릭하여 선택합니다.",
  367. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  368. return;
  369. }
  370. #if 0
  371. String sMsg;
  372. sMsg = lblText3->Caption + ": " + sId;//"VDS번호: " + sId;
  373. sMsg+= "\r\n" + lblText4->Caption;//"선택하신 VDS 정보를 삭제하시겠습니까?";
  374. if (Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES) return;
  375. TSgnlCtlr *pObj = SgnlCtlrManager->FLists.Find(sId);
  376. if (pObj)
  377. {
  378. if (SgnlCtlrManager->DeleteCross(pObj))
  379. {
  380. pObj->DEL_YN = "Y";
  381. FRAMESgnlCtlrList1->UpdateList();
  382. UpdateIcon();
  383. }
  384. FUpdate = true;
  385. Application->MessageBox(lblText5->Caption.c_str(),//L"VDS 정보삭제\r\nVDS 정보를 삭제 하였습니다.",
  386. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  387. FormInit();
  388. ChangeEditMode(1);
  389. UpdateIcon();
  390. }
  391. #endif
  392. }
  393. //---------------------------------------------------------------------------
  394. void __fastcall TEVSP100M::BtnSaveClick(TObject *Sender)
  395. {
  396. #if 0
  397. if (EdId->Text.Trim().IsEmpty() ||
  398. EdNm->Text.Trim().IsEmpty() ||
  399. SePosX->Value == 0 ||
  400. SePosY->Value == 0 ||
  401. EdType->Text.Trim().IsEmpty() )
  402. {
  403. Application->MessageBox(FrmLang->lblNecessary->Caption.c_str(),//L"★항목은 필수 입력 항목입니다.\r\n모두 입력후 진행해 주세요.",
  404. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  405. return;
  406. }
  407. String sNmbr = EdId->Text;
  408. //int nNmbr = sNmbr.ToInt();
  409. String sId = EdId->Text.Trim();
  410. #if 0
  411. SgnlCtlrManager->FLists.Lock();
  412. FOR_STL(TSgnlCtlr*, pTmpObj, SgnlCtlrManager->FLists)
  413. {
  414. if (pTmpObj->DEL_YN == "Y") continue;
  415. if (pTmpObj->CROSS_ID == sNmbr) continue; //자기자신
  416. if (pTmpObj->CROSS_ID == sNmbr)
  417. {
  418. Application->MessageBox(lblText8->Caption.c_str(), FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  419. SgnlCtlrManager->FLists.UnLock();
  420. return;
  421. }
  422. }
  423. SgnlCtlrManager->FLists.UnLock();
  424. #endif
  425. TSgnlCtlr *pObj;
  426. if (FNewDb)
  427. {
  428. SgnlCtlrManager->FLists.Lock();
  429. FOR_STL(TSgnlCtlr*, pTmpObj, SgnlCtlrManager->FLists)
  430. {
  431. if (pTmpObj->DEL_YN == "Y") continue;
  432. if (pTmpObj->CTLR_NMBR == sId)
  433. {
  434. Application->MessageBox(lblText8->Caption.c_str(), FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  435. SgnlCtlrManager->FLists.UnLock();
  436. return;
  437. }
  438. }
  439. SgnlCtlrManager->FLists.UnLock();
  440. pObj = new TSgnlCtlr();
  441. }
  442. else
  443. pObj = SgnlCtlrManager->FLists.Find(sNmbr);
  444. if (pObj)
  445. {
  446. //pObj->CROSS_ID = sNmbr;
  447. pObj->CTLR_NMBR = sId;
  448. pObj->NAME = EdNm->Text.Trim();
  449. pObj->ZOOM_LEVEL = 0;
  450. pObj->LOCAL_GROUP_ID = "";
  451. pObj->CROSS_TYPE = EdType->Text.Trim();
  452. pObj->X_CRDN = SePosX->Value;
  453. pObj->Y_CRDN = SePosY->Value;
  454. pObj->Completed = true;
  455. pObj->MEM_DEL = "N";
  456. bool bResult;
  457. if (FNewDb)
  458. {
  459. pObj->DEL_YN = "N";
  460. bResult = SgnlCtlrManager->InserTSgnlCtlr(pObj);
  461. if (bResult)
  462. {
  463. SgnlCtlrManager->FLists.Push(sNmbr, pObj);
  464. }
  465. }
  466. else
  467. {
  468. bResult = SgnlCtlrManager->UpdateCross(pObj);
  469. }
  470. if (bResult)
  471. {
  472. Application->MessageBox(lblText9->Caption.c_str(),//L"VDS 정보저장\r\nVDS 정보를 저장 하였습니다.",
  473. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  474. FUpdate = true;
  475. FRAMESgnlCtlrList1->UpdateList();
  476. UpdateIcon();
  477. CMM_SetGridRow(FRAMESgnlCtlrList1->CxList, FRAMESgnlCtlrList1->TvList, sNmbr, FRAMESgnlCtlrList1->Column01->Index);
  478. DisplayInfo(pObj, true);
  479. }
  480. }
  481. #endif
  482. }
  483. //---------------------------------------------------------------------------
  484. void __fastcall TEVSP100M::FRAMESgnlCtlrList1TvListCellDblClick(TcxCustomGridTableView *Sender,
  485. TcxGridTableDataCellViewInfo *ACellViewInfo, TMouseButton AButton,
  486. TShiftState AShift, bool &AHandled)
  487. {
  488. if (!ACellViewInfo) return;
  489. int nRow = FRAMESgnlCtlrList1->TvList->DataController->FocusedRecordIndex;
  490. if( nRow <= -1 )
  491. return;
  492. int nMemPtr = FRAMESgnlCtlrList1->TvList->DataController->Values[nRow][FRAMESgnlCtlrList1->Column99->Index];
  493. TSgnlCtlr* pObj = (TSgnlCtlr*)nMemPtr;
  494. DisplayInfo(pObj, true);
  495. }
  496. //---------------------------------------------------------------------------
  497. void __fastcall TEVSP100M::Ed_VDS_PORTKeyPress(TObject *Sender, wchar_t &Key)
  498. {
  499. if (Key > '9' || Key < '0')
  500. {
  501. if (Key != VK_BACK && Key != VK_TAB && Key != '-')
  502. Key = 0;
  503. }
  504. }
  505. //---------------------------------------------------------------------------
  506. void __fastcall TEVSP100M::Se_VDS_CHNLPropertiesChange(TObject *Sender)
  507. {
  508. if (((TcxSpinEdit*)Sender)->Value < ((TcxSpinEdit*)Sender)->Properties->MinValue)
  509. ((TcxSpinEdit*)Sender)->Value = ((TcxSpinEdit*)Sender)->Properties->MinValue;
  510. else if(((TcxSpinEdit*)Sender)->Value > ((TcxSpinEdit*)Sender)->Properties->MaxValue &&
  511. ((TcxSpinEdit*)Sender)->Properties->MaxValue)
  512. ((TcxSpinEdit*)Sender)->Value = ((TcxSpinEdit*)Sender)->Properties->MaxValue;
  513. }
  514. //---------------------------------------------------------------------------
  515. void __fastcall TEVSP100M::OpenMapCallback(TObject *ASender, const String AFunc, const String AArgs, const bool AFirst)
  516. {
  517. try
  518. {
  519. if (AFirst)
  520. {
  521. //지도를 편집모드로 변경
  522. sJs.printf(L"setEditMode(%d, 1)", FLayerIdx);
  523. FRAMEOpenMap1->ExecScript(sJs);
  524. //시설물아이콘 등록
  525. UpdateIcon();
  526. sJs.printf(L"extentLayer(%d)", FLayerIdx);
  527. FRAMEOpenMap1->ExecScript(sJs);
  528. return;
  529. }
  530. if (AFunc.Pos("onfacilitydragend"))
  531. {
  532. TStringList *pStringList = new TStringList;
  533. pStringList->CommaText = AArgs;
  534. try
  535. {
  536. String sNmbr = pStringList->Strings[0];
  537. String sCenterLat = pStringList->Strings[1];
  538. String sCenterLng = pStringList->Strings[2];
  539. SePosX->Value = sCenterLat.ToDouble();
  540. SePosY->Value = sCenterLng.ToDouble();
  541. }
  542. catch(Exception &e)
  543. {
  544. }
  545. delete pStringList;
  546. }
  547. }
  548. catch(Exception &exception)
  549. {
  550. }
  551. }
  552. //---------------------------------------------------------------------------