VMSM600MF.cpp 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227
  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. #include "CDSVmsIfscF.h"
  16. #pragma hdrstop
  17. #include "VMSM600MF.h"
  18. #include "VMSM610MF.h"
  19. #include "VMSSEL0MF.h"
  20. #include "VMSEDT0MF.h"
  21. //---------------------------------------------------------------------------
  22. #pragma package(smart_init)
  23. #pragma link "cxButtons"
  24. #pragma link "cxCalendar"
  25. #pragma link "cxContainer"
  26. #pragma link "cxControls"
  27. #pragma link "cxDropDownEdit"
  28. #pragma link "cxEdit"
  29. #pragma link "cxGraphics"
  30. #pragma link "cxGroupBox"
  31. #pragma link "cxLabel"
  32. #pragma link "cxLookAndFeelPainters"
  33. #pragma link "cxLookAndFeels"
  34. #pragma link "cxMaskEdit"
  35. #pragma link "cxPC"
  36. #pragma link "cxPCdxBarPopupMenu"
  37. #pragma link "cxSpinEdit"
  38. #pragma link "cxSplitter"
  39. #pragma link "cxTextEdit"
  40. #pragma link "cxTimeEdit"
  41. #pragma link "dxSkinBlack"
  42. #pragma link "dxSkinBlue"
  43. #pragma link "dxSkinCaramel"
  44. #pragma link "dxSkinCoffee"
  45. #pragma link "dxSkinDarkRoom"
  46. #pragma link "dxSkinDarkSide"
  47. #pragma link "dxSkinFoggy"
  48. #pragma link "dxSkinGlassOceans"
  49. #pragma link "dxSkiniMaginary"
  50. #pragma link "dxSkinLilian"
  51. #pragma link "dxSkinLiquidSky"
  52. #pragma link "dxSkinLondonLiquidSky"
  53. #pragma link "dxSkinMcSkin"
  54. #pragma link "dxSkinMoneyTwins"
  55. #pragma link "dxSkinOffice2007Black"
  56. #pragma link "dxSkinOffice2007Blue"
  57. #pragma link "dxSkinOffice2007Green"
  58. #pragma link "dxSkinOffice2007Pink"
  59. #pragma link "dxSkinOffice2007Silver"
  60. #pragma link "dxSkinOffice2010Black"
  61. #pragma link "dxSkinOffice2010Blue"
  62. #pragma link "dxSkinOffice2010Silver"
  63. #pragma link "dxSkinsCore"
  64. #pragma link "dxSkinscxPCPainter"
  65. #pragma link "dxSkinSeven"
  66. #pragma link "dxSkinSharp"
  67. #pragma link "dxSkinSilver"
  68. #pragma link "dxSkinStardust"
  69. #pragma link "cxRadioGroup"
  70. #pragma link "cxClasses"
  71. #pragma link "cxCustomData"
  72. #pragma link "cxData"
  73. #pragma link "cxDataStorage"
  74. #pragma link "cxDBData"
  75. #pragma link "cxFilter"
  76. #pragma link "cxGrid"
  77. #pragma link "cxGridCustomTableView"
  78. #pragma link "cxGridCustomView"
  79. #pragma link "cxGridDBTableView"
  80. #pragma link "cxGridLevel"
  81. #pragma link "cxGridTableView"
  82. #pragma link "cxStyles"
  83. #pragma link "cxCheckBox"
  84. #pragma link "cxImage"
  85. #pragma link "cxButtonEdit"
  86. #pragma link "cxBlobEdit"
  87. #pragma link "cxColorComboBox"
  88. #pragma link "cxCalc"
  89. #pragma link "VmsDesignerF"
  90. #pragma link "FRAME_VmsSchListF"
  91. #pragma resource "*.dfm"
  92. TVMSM600M *VMSM600M = NULL;
  93. //---------------------------------------------------------------------------
  94. __fastcall TVMSM600M::TVMSM600M(TComponent* Owner)
  95. : TForm(Owner)
  96. {
  97. ITSSkin_Load(this);
  98. CMM_LoadForm(g_sFormsDir, this);
  99. FUpdate= false;
  100. FTitle = Caption;//"VMS 자동 스케줄 관리";
  101. FListSymb = new TList;
  102. EditMode = false;
  103. APP_InitDisplayColor();
  104. PgVmsSch->Properties->ActivePage = TabTraffic;
  105. TabDeture->TabVisible = false;
  106. TabDeture->Visible = false;
  107. TabCongest->TabVisible = false;
  108. TabCongest->Visible = false;
  109. FRAMEVmsSchList1->PnlTop->Visible = false;
  110. FRAMEVmsSchList1->PnlBottom->Visible = false;
  111. FVmsHeight = 64;
  112. FListSch[0] = TvGrid1;
  113. FListSch[1] = TvGrid2;
  114. FListSch[2] = TvGrid3;
  115. FListSch[3] = TvGrid4;
  116. FListSch[4] = TvGrid5;
  117. FListSch[5] = NULL;
  118. FListSch[6] = NULL;
  119. FListSch[7] = TvGrid6;
  120. FListFrm[0] = TvForm1;
  121. FListFrm[1] = TvForm2;
  122. FListFrm[2] = TvForm3;
  123. FListFrm[3] = TvForm4;
  124. FListFrm[4] = TvForm5;
  125. FListFrm[5] = NULL;
  126. FListFrm[6] = NULL;
  127. FListFrm[7] = TvForm6;
  128. for (int ii = 0; ii < MAX_FORM_SCHED; ii++)
  129. {
  130. if (FListSch[ii]) InitTcxList(FListSch[ii]);
  131. if (FListFrm[ii]) InitTcxList(FListFrm[ii]);
  132. }
  133. BtnSave->Caption = "Save Schedule";
  134. BtnSave->Hint = "Save scheduled tasks for the currently selected VMS";
  135. }
  136. //---------------------------------------------------------------------------
  137. void __fastcall TVMSM600M::InitTcxList(TcxGridTableView *AView)
  138. {
  139. AView->OptionsView->DataRowHeight = 0;
  140. AView->OptionsView->CellAutoHeight = true;
  141. AView->OptionsView->Indicator = false;
  142. AView->OptionsCustomize->ColumnMoving = false;
  143. AView->OptionsCustomize->ColumnSorting = false;
  144. AView->Columns[0]->Width = 40;
  145. AView->Columns[0]->Options->HorzSizing = false;
  146. AView->Columns[1]->Width = 330;
  147. }
  148. //---------------------------------------------------------------------------
  149. /*
  150. * 닫기버튼 이나 x버튼 클릭시 공통으로 처리하는 로직이들어간다..
  151. * Form과 DataModule class를 delete시킨다.
  152. * arguments
  153. *
  154. * return
  155. * void
  156. */
  157. void __fastcall TVMSM600M::CommClose()
  158. {
  159. try
  160. {
  161. if (m_pEdtDesigner)
  162. {
  163. delete m_pEdtDesigner;
  164. m_pEdtDesigner = NULL;
  165. }
  166. APP_DelVmsSizeCombo(CbSizeType);
  167. ClearSymbloList();
  168. SAFE_DELETE(FListSymb);
  169. CMM_SaveForm(g_sFormsDir, this);
  170. }
  171. catch(...)
  172. {
  173. }
  174. }
  175. //---------------------------------------------------------------------------
  176. void __fastcall TVMSM600M::FormCreate(TObject *Sender)
  177. {
  178. m_pEdtDesigner = new TVmsFormDesigner(PnlEditForm);
  179. }
  180. //---------------------------------------------------------------------------
  181. /*
  182. * Form을 보여줄때 호출되는 event 메서드이다.
  183. * arguments
  184. * Sender : event handler 객체
  185. * return
  186. * void
  187. */
  188. void __fastcall TVMSM600M::FormShow(TObject *Sender)
  189. {
  190. Refresh();
  191. FormInit();
  192. ChangeEditMode(1);
  193. TmrShow->Enabled = true;
  194. }
  195. //---------------------------------------------------------------------------
  196. /*
  197. * form 초기화
  198. *
  199. * arguments
  200. *
  201. * return
  202. * void
  203. */
  204. void __fastcall TVMSM600M::FormInit()
  205. {
  206. for (int ii = 0; ii < MAX_FORM_SCHED; ii++)
  207. {
  208. if (FListSch[ii]) FListSch[ii]->OptionsView->NoDataToDisplayInfoText = MSG800;
  209. if (FListFrm[ii]) FListFrm[ii]->OptionsView->NoDataToDisplayInfoText = MSG801;
  210. }
  211. //VMS사이즈
  212. APP_FillVmsSizeType(CbSizeType, "VUTN", false);
  213. VmsManager->LoadVmsFormUsage();
  214. FRAMEVmsSchList1->RefreshVmsFormUsage();
  215. FNewDb = false;
  216. }
  217. //---------------------------------------------------------------------------
  218. /*
  219. * Form이 Show되고 난 후 최초 1회 수행되는 타이머 이벤트
  220. * arguments
  221. * Sender : event handler 객체
  222. * return
  223. * void
  224. */
  225. void __fastcall TVMSM600M::TmrShowTimer(TObject *Sender)
  226. {
  227. TmrShow->Enabled = false;
  228. }
  229. //---------------------------------------------------------------------------
  230. /*
  231. * Close 버튼 클릭 이벤트 핸들러
  232. * arguments
  233. * Sender : event handler 객체
  234. * return
  235. * void
  236. */
  237. void __fastcall TVMSM600M::BtnCloseClick(TObject *Sender)
  238. {
  239. Close();
  240. }
  241. //---------------------------------------------------------------------------
  242. void __fastcall TVMSM600M::FormClose(TObject *Sender, TCloseAction &Action)
  243. {
  244. CommClose();
  245. VMSM600M = NULL;
  246. Action = caFree;
  247. }
  248. //---------------------------------------------------------------------------
  249. void __fastcall TVMSM600M::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. }
  256. //---------------------------------------------------------------------------
  257. void __fastcall TVMSM600M::ChangeEditMode(int AEdit)
  258. {
  259. }
  260. //---------------------------------------------------------------------------
  261. void __fastcall TVMSM600M::ClearSymbloList()
  262. {
  263. for(int ii = 0; ii < FListSymb->Count; ii++)
  264. {
  265. Graphics::TBitmap *bitmap = (Graphics::TBitmap *)FListSymb->Items[ii];
  266. delete bitmap;
  267. }
  268. FListSymb->Clear();
  269. }
  270. //---------------------------------------------------------------------------
  271. void __fastcall TVMSM600M::FRAMEVmsSchList1TvListCellDblClick(TcxCustomGridTableView *Sender,
  272. TcxGridTableDataCellViewInfo *ACellViewInfo, TMouseButton AButton,
  273. TShiftState AShift, bool &AHandled)
  274. {
  275. if (!ACellViewInfo) return;
  276. DisplayInfo();
  277. }
  278. //---------------------------------------------------------------------------
  279. void __fastcall TVMSM600M::FRAMEVmsSchList1TvListFocusedRecordChanged(TcxCustomGridTableView *Sender,
  280. TcxCustomGridRecord *APrevFocusedRecord, TcxCustomGridRecord *AFocusedRecord,
  281. bool ANewItemRecordFocusingChanged)
  282. {
  283. if (!AFocusedRecord) return;
  284. DisplayInfo();
  285. }
  286. //---------------------------------------------------------------------------
  287. void __fastcall TVMSM600M::CbSizeTypePropertiesChange(TObject *Sender)
  288. {
  289. BtnSearchClick(NULL);
  290. }
  291. //---------------------------------------------------------------------------
  292. void __fastcall TVMSM600M::BtnSearchClick(TObject *Sender)
  293. {
  294. RefreshData();
  295. EdFocus->SetFocus();
  296. ChangeEditMode(1);
  297. }
  298. //---------------------------------------------------------------------------
  299. void __fastcall TVMSM600M::RefreshData()
  300. {
  301. FormClear();
  302. TVmsSizeType *pVmsSizeType = APP_GetVmsSizeTypeObject(CbSizeType);
  303. if (pVmsSizeType == NULL) return;
  304. FVmsTypeCd = pVmsSizeType->TypeCd;
  305. FVmsWidth = pVmsSizeType->Width;
  306. FVmsHeight = pVmsSizeType->Height;
  307. PnlEdtBack->Width = FVmsWidth+4;
  308. PnlEdtBack->Height= FVmsHeight+4;
  309. m_pEdtDesigner->Clear();
  310. m_pEdtDesigner->SizeType = FVmsTypeCd;
  311. m_pEdtDesigner->SetSize(FVmsWidth, FVmsHeight);
  312. m_pEdtDesigner->SetPos(0, 0);
  313. m_pEdtDesigner->BkColorCode = "0";//m_pDesigner->BkColorCode;
  314. m_pEdtDesigner->EditMode = true;
  315. m_pEdtDesigner->Show();
  316. FRAMEVmsSchList1->UpdateList(FVmsTypeCd);
  317. LoadVmsFormList(FVmsTypeCd);
  318. }
  319. //---------------------------------------------------------------------------
  320. void __fastcall TVMSM600M::FormClear()
  321. {
  322. FSelIdx = -1;
  323. EdVmsNmbr->Clear();
  324. for (int ii = 0; ii < MAX_FORM_SCHED; ii++)
  325. {
  326. if (FListSch[ii]) CMM_ClearGridTableView(FListSch[ii]);
  327. }
  328. #ifdef ENG
  329. GrpSchedule->Caption = "▶ Auto Schedule Setting";
  330. TabTraffic->Caption = " Traffic ";
  331. TabDolbal->Caption = " Incident ";
  332. TabGongsa->Caption = " Construction/Event ";
  333. TabHongbo->Caption = " Notice ";
  334. TabDeture->Caption = " Detour ";
  335. TabCongest->Caption = " Congest ";
  336. #else
  337. GrpSchedule->Caption = "▶ 자동 스케줄 설정";
  338. TabTraffic->Caption = " 교통정보 ";
  339. TabDolbal->Caption = " 돌발 ";
  340. TabGongsa->Caption = " 공사/행사 ";
  341. TabHongbo->Caption = " 홍보 ";
  342. TabDeture->Caption = " 우회도로 ";
  343. TabCongest->Caption = " 정체정보 ";
  344. #endif
  345. FNewDb = false;
  346. }
  347. //---------------------------------------------------------------------------
  348. void __fastcall TVMSM600M::DisplayInfo()
  349. {
  350. FormClear();
  351. FSelIdx = CMM_GetRecordIndex(FRAMEVmsSchList1->TvList);
  352. if (FSelIdx < 0) return;
  353. TcxDataController *pGDC = FRAMEVmsSchList1->TvList->DataController;
  354. String sVmsNmbr = VarToStr(pGDC->Values[FSelIdx][FRAMEVmsSchList1->Column01->Index]);
  355. EdVmsNmbr->Text = sVmsNmbr;
  356. #ifdef ENG
  357. GrpSchedule->Caption = "▶ Auto Schedule (" + VarToStr(pGDC->Values[FSelIdx][FRAMEVmsSchList1->Column02->Index]) + ": " + VarToStr(pGDC->Values[FSelIdx][FRAMEVmsSchList1->Column03->Index]) + ")";
  358. #else
  359. GrpSchedule->Caption = "▶ 자동 스케줄 설정 (" + VarToStr(pGDC->Values[FSelIdx][FRAMEVmsSchList1->Column02->Index]) + ": " + VarToStr(pGDC->Values[FSelIdx][FRAMEVmsSchList1->Column03->Index]) + ")";
  360. #endif
  361. LoadVmsScheduleInfo(sVmsNmbr);
  362. DrawTrafficScenarioForm();
  363. TVmsCtlr *pObj = VmsManager->FLists.Find(sVmsNmbr);
  364. if (pObj)
  365. {
  366. #ifdef ENG
  367. TabTraffic->Caption = " Traffic - " + String(pObj->FormCnt[enFormTraffic][1]) + "/" + String(pObj->FormCnt[enFormTraffic][0]) + " ";
  368. TabDolbal->Caption = " Incident - " + String(pObj->FormCnt[enFormDolbal][1]) + "/" + String(pObj->FormCnt[enFormDolbal][0]) + " ";
  369. TabGongsa->Caption = " Construction/Event - " + String(pObj->FormCnt[enFormGongsa][1]) + "/" + String(pObj->FormCnt[enFormGongsa][0]) + " ";
  370. TabHongbo->Caption = " Notice - " + String(pObj->FormCnt[enFormHongbo][1]) + "/" + String(pObj->FormCnt[enFormHongbo][0]) + " ";
  371. TabDeture->Caption = " Detour - " + String(pObj->FormCnt[enFormDeture][1]) + "/" + String(pObj->FormCnt[enFormDeture][0]) + " ";
  372. TabCongest->Caption = " Congest - " + String(pObj->FormCnt[enFormCongest][1]) + "/" + String(pObj->FormCnt[enFormCongest][0]) + " ";
  373. #else
  374. TabTraffic->Caption = " 교통정보 - " + String(pObj->FormCnt[enFormTraffic][1]) + "/" + String(pObj->FormCnt[enFormTraffic][0]) + " ";
  375. TabDolbal->Caption = " 돌발 - " + String(pObj->FormCnt[enFormDolbal][1]) + "/" + String(pObj->FormCnt[enFormDolbal][0]) + " ";
  376. TabGongsa->Caption = " 공사/행사 - " + String(pObj->FormCnt[enFormGongsa][1]) + "/" + String(pObj->FormCnt[enFormGongsa][0]) + " ";
  377. TabHongbo->Caption = " 홍보 - " + String(pObj->FormCnt[enFormHongbo][1]) + "/" + String(pObj->FormCnt[enFormHongbo][0]) + " ";
  378. TabDeture->Caption = " 우회도로 - " + String(pObj->FormCnt[enFormDeture][1]) + "/" + String(pObj->FormCnt[enFormDeture][0]) + " ";
  379. TabCongest->Caption = " 정체정보 - " + String(pObj->FormCnt[enFormCongest][1]) + "/" + String(pObj->FormCnt[enFormCongest][0]) + " ";
  380. #endif
  381. }
  382. ChangeEditMode(3);
  383. }
  384. //---------------------------------------------------------------------------
  385. void __fastcall TVMSM600M::TvFormCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo,
  386. TMouseButton AButton, TShiftState AShift,
  387. bool &AHandled)
  388. {
  389. if (!ACellViewInfo) return;
  390. int nRow = Sender->DataController->FocusedRecordIndex;
  391. if( nRow <= -1 )
  392. return;
  393. TcxButton *pBtn = NULL;
  394. switch(Sender->Tag)
  395. {
  396. case enFormTraffic: pBtn = BtnListAdd; break;
  397. case enFormDolbal: pBtn = BtnListAdd2; break;
  398. case enFormGongsa: pBtn = BtnListAdd3; break;
  399. case enFormHongbo: pBtn = BtnListAdd4; break;
  400. case enFormDeture: pBtn = BtnListAdd5; break;
  401. case enFormCongest: pBtn = BtnListAdd6; break;
  402. default: return;
  403. }
  404. BtnListAddClick((TObject*)pBtn);
  405. }
  406. //---------------------------------------------------------------------------
  407. void __fastcall TVMSM600M::BtnListAddClick(TObject *Sender)
  408. {
  409. String sUse = "N";
  410. String sTime= "4";
  411. TcxButton *pBtn = (TcxButton*)Sender;
  412. int nTag = pBtn->Tag;
  413. if (nTag < 0 || nTag >= MAX_FORM_SCHED) return;
  414. int nSelIdx = CMM_GetRecordIndex(FRAMEVmsSchList1->TvList);
  415. if (nSelIdx < 0) return;
  416. if (!FListFrm[nTag] || !FListSch[nTag]) return;
  417. TcxGridDataController *pDcFrm = FListFrm[nTag]->DataController;
  418. TcxGridDataController *pDcSch = FListSch[nTag]->DataController;
  419. int nFormIdx = CMM_GetRecordIndex(FListFrm[nTag]);
  420. if (nFormIdx < 0) return;
  421. if (nTag == enFormTraffic)
  422. {
  423. sUse = "N";
  424. }
  425. String sStrDate = "";
  426. String sEndDate = "";
  427. bool bSelected= false;
  428. TVMSSEL0M *pSelDate = new TVMSSEL0M(this);
  429. pSelDate->FCurrDay = true;
  430. pSelDate->ShowModal();
  431. bSelected = pSelDate->FSelected;
  432. sStrDate = pSelDate->FStrTime;
  433. sEndDate = pSelDate->FEndTime;
  434. delete pSelDate;
  435. pSelDate = NULL;
  436. if (!bSelected) return;
  437. int nRow = pDcSch->AppendRecord();
  438. pDcSch->Values[nRow][0] = pDcFrm->Values[nFormIdx][0];
  439. pDcSch->Values[nRow][1] = pDcFrm->Values[nFormIdx][1];
  440. pDcSch->Values[nRow][3] = sTime;
  441. pDcSch->Values[nRow][4] = ITSUtil_FormatStr(sStrDate, STR_HHNN);;
  442. pDcSch->Values[nRow][5] = ITSUtil_FormatStr(sEndDate, STR_HHNN);;
  443. pDcSch->Values[nRow][6] = sUse;
  444. pDcSch->Values[nRow][7] = sStrDate;
  445. pDcSch->Values[nRow][8] = sEndDate;
  446. pDcSch->Values[nRow][15] = pDcFrm->Values[nFormIdx][2];
  447. }
  448. //---------------------------------------------------------------------------
  449. void __fastcall TVMSM600M::BtnListDeleteClick(TObject *Sender)
  450. {
  451. TcxButton *pBtn = (TcxButton*)Sender;
  452. int nTag = pBtn->Tag;
  453. if (nTag >= MAX_FORM_SCHED) return;
  454. int nSelIdx = CMM_GetRecordIndex(FRAMEVmsSchList1->TvList);
  455. if (nSelIdx < 0) return;
  456. if (!FListSch[nTag]) return;
  457. TcxGridDataController *pDcSch = FListSch[nTag]->DataController;
  458. nSelIdx = CMM_GetRecordIndex(FListSch[nTag]);
  459. if (nSelIdx < 0) return;
  460. FListSch[nTag]->DataController->DeleteRecord(nSelIdx);
  461. }
  462. //---------------------------------------------------------------------------
  463. void __fastcall TVMSM600M::TvGridCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo,
  464. TMouseButton AButton, TShiftState AShift,
  465. bool &AHandled)
  466. {
  467. if (!ACellViewInfo) return;
  468. int nRow = Sender->DataController->FocusedRecordIndex;
  469. if( nRow <= -1 )
  470. return;
  471. TcxGridDataController *pGDC = (TcxGridDataController*)Sender->DataController;
  472. int nColIdx = ACellViewInfo->Item->Index;
  473. //ShowMessage(String(Sender->Tag) + " " + String(nColIdx));
  474. String sFormId = VarToStr(pGDC->Values[nRow][0]);
  475. String sStrDate = VarToStr(pGDC->Values[nRow][7]);
  476. String sEndDate = VarToStr(pGDC->Values[nRow][8]);
  477. if (nColIdx == 4 || nColIdx == 5)
  478. {
  479. //표출기간설정
  480. TVMSSEL0M *pSelDate = new TVMSSEL0M(this);
  481. pSelDate->FStrTime = sStrDate;
  482. pSelDate->FEndTime = sEndDate;
  483. pSelDate->ShowModal();
  484. bool bSelected = pSelDate->FSelected;
  485. sStrDate = pSelDate->FStrTime;
  486. sEndDate = pSelDate->FEndTime;
  487. delete pSelDate;
  488. pSelDate = NULL;
  489. if (bSelected)
  490. {
  491. pGDC->Values[nRow][4] = ITSUtil_FormatStr(sStrDate, STR_HHNN);;
  492. pGDC->Values[nRow][5] = ITSUtil_FormatStr(sEndDate, STR_HHNN);;
  493. pGDC->Values[nRow][7] = sStrDate;
  494. pGDC->Values[nRow][8] = sEndDate;
  495. }
  496. return;
  497. }
  498. if (Sender->Tag != enFormTraffic) return;
  499. if (VarToStr(pGDC->Values[nRow][15]).ToIntDef(0) == 15)
  500. {
  501. //도형식배경 소통정보 폼
  502. Application->MessageBox(MSG802, FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  503. return;
  504. }
  505. // 소통정보 폼 정보구간 설정
  506. TVMSM610M *pIfscFrm = new TVMSM610M(this);
  507. pIfscFrm->FVmsNmbr = EdVmsNmbr->Text;
  508. pIfscFrm->FFormId = sFormId;
  509. pIfscFrm->FVmsTypeCd = FVmsTypeCd;
  510. pIfscFrm->FVmsWidth = FVmsWidth;
  511. pIfscFrm->FVmsHeight = FVmsHeight;
  512. pIfscFrm->FIfscId[0] = VarToStr(pGDC->Values[nRow][9]);
  513. pIfscFrm->FIfscId[1] = VarToStr(pGDC->Values[nRow][10]);
  514. pIfscFrm->FIfscId[2] = VarToStr(pGDC->Values[nRow][11]);
  515. pIfscFrm->FIfscId[3] = VarToStr(pGDC->Values[nRow][12]);
  516. pIfscFrm->FIfscId[4] = VarToStr(pGDC->Values[nRow][16]);
  517. pIfscFrm->FIfscId[5] = VarToStr(pGDC->Values[nRow][17]);
  518. pIfscFrm->FIfscId[6] = VarToStr(pGDC->Values[nRow][18]);
  519. pIfscFrm->FIfscId[7] = VarToStr(pGDC->Values[nRow][19]);
  520. //pIfscFrm->FVmsType = VarToStr(pGDC->Values[nRow][13]).ToIntDef(0);
  521. pIfscFrm->FFormColor = VarToStr(pGDC->Values[nRow][14]);
  522. pIfscFrm->FFormType = VarToStr(pGDC->Values[nRow][15]).ToIntDef(0);
  523. pIfscFrm->ShowModal();
  524. if (pIfscFrm->FSelected)
  525. {
  526. TStream *pImgStream = new TMemoryStream();
  527. try
  528. {
  529. void *p;
  530. Variant v;
  531. pIfscFrm->ImgForm->Picture->Bitmap->SaveToStream(pImgStream);
  532. int aBound[]={0, pImgStream->Size - 1};
  533. v = VarArrayCreate(aBound, 1, varByte);
  534. p = VarArrayLock(v);
  535. pImgStream->Position = 0;
  536. pImgStream->Read(p, pImgStream->Size);
  537. VarArrayUnlock(v);
  538. pGDC->Values[nRow][1] = v;
  539. }
  540. __finally
  541. {
  542. SAFE_DELETE(pImgStream);
  543. }
  544. pGDC->Values[nRow][ 9] = pIfscFrm->FIfscId[0];
  545. pGDC->Values[nRow][10] = pIfscFrm->FIfscId[1];
  546. pGDC->Values[nRow][11] = pIfscFrm->FIfscId[2];
  547. pGDC->Values[nRow][12] = pIfscFrm->FIfscId[3];
  548. pGDC->Values[nRow][16] = pIfscFrm->FIfscId[4];
  549. pGDC->Values[nRow][17] = pIfscFrm->FIfscId[5];
  550. pGDC->Values[nRow][18] = pIfscFrm->FIfscId[6];
  551. pGDC->Values[nRow][19] = pIfscFrm->FIfscId[7];
  552. }
  553. delete pIfscFrm;
  554. pIfscFrm = NULL;
  555. }
  556. //---------------------------------------------------------------------------
  557. void __fastcall TVMSM600M::BtnAllEditClick(TObject *Sender)
  558. {
  559. TcxButton *pBtn = (TcxButton*)Sender;
  560. //등록되어 있는 스케줄 폼을 전체 VMS에 편집하는 기능
  561. int nTag = PgVmsSch->Properties->ActivePage->Tag;
  562. if (nTag < 0 || nTag >= MAX_FORM_SCHED)
  563. {
  564. Application->MessageBox(MSG803, FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  565. return;
  566. }
  567. if (!FListSch[nTag]) return;
  568. TcxGridTableView *pTvList = FListSch[nTag];
  569. TcxGridDataController *pGDC;
  570. String sMode = "E";
  571. if (pBtn->Tag == 1)
  572. {
  573. sMode = "A"; //추가
  574. pTvList = FListFrm[nTag];
  575. }
  576. if (!pTvList) return;
  577. pGDC = pTvList->DataController;
  578. int nFormIdx = CMM_GetRecordIndex(pTvList);
  579. if (nFormIdx < 0)
  580. {
  581. Application->MessageBox(MSG804, FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  582. return;
  583. }
  584. String sFormId = pGDC->Values[nFormIdx][0];
  585. TVmsSizeType *pVmsSizeType = APP_GetVmsSizeTypeObject(CbSizeType);
  586. if (pVmsSizeType == NULL)
  587. {
  588. Application->MessageBox(MSG805, FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  589. return;
  590. }
  591. String sVmsType = pVmsSizeType->TypeCd;
  592. TVMSEDT0M *pFrmEdt = new TVMSEDT0M(this);
  593. pFrmEdt->FVmsTypeCd = sVmsType;
  594. pFrmEdt->FScheType = String(nTag);
  595. pFrmEdt->FFormId = sFormId;
  596. pFrmEdt->FMode = sMode;
  597. pFrmEdt->FVmsNmbr = "";
  598. pFrmEdt->ShowModal();
  599. bool bOk = pFrmEdt->FSelected;
  600. delete pFrmEdt;
  601. pFrmEdt = NULL;
  602. if (bOk)
  603. {
  604. DisplayInfo();
  605. }
  606. VmsManager->LoadVmsFormUsage();
  607. FRAMEVmsSchList1->RefreshVmsFormUsage();
  608. }
  609. //---------------------------------------------------------------------------
  610. void __fastcall TVMSM600M::BtnSaveClick(TObject *Sender)
  611. {
  612. //작업한 스케줄 정보를 저장한다.
  613. if (EdVmsNmbr->Text.Trim().IsEmpty())
  614. {
  615. Application->MessageBox(MSG806, FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  616. return;
  617. }
  618. bool bUpdate = true;
  619. String sVmsNmbr = EdVmsNmbr->Text.Trim();
  620. if (bUpdate)
  621. {
  622. String sMsg;
  623. sMsg = "VMS: " + sVmsNmbr;
  624. sMsg+= MSG807;
  625. if (Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES) return;
  626. }
  627. try
  628. {
  629. ITSDb_GetConnection()->BeginTrans();
  630. DeleteVmsAutoScenario(sVmsNmbr);
  631. for (int ii = 0; ii < MAX_FORM_SCHED; ii++)
  632. {
  633. if (FListSch[ii])
  634. {
  635. //ShowMessage(String(ii) + " " + String(FListSch[ii]->Tag));
  636. SaveVmsAutoScenario(sVmsNmbr, FListSch[ii]);
  637. }
  638. }
  639. }
  640. __finally
  641. {
  642. ITSDb_GetConnection()->CommitTrans();
  643. }
  644. Application->MessageBox(MSG808, FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  645. VmsManager->LoadVmsFormUsage();
  646. FRAMEVmsSchList1->RefreshVmsFormUsage();
  647. CMM_SetGridRow(FRAMEVmsSchList1->CxList, FRAMEVmsSchList1->TvList, sVmsNmbr, FRAMEVmsSchList1->Column01->Index);
  648. DisplayInfo();
  649. }
  650. //---------------------------------------------------------------------------
  651. bool __fastcall TVMSM600M::SaveVmsAutoScenario(String AVmsNmbr, TcxGridTableView *AListSch)
  652. {
  653. bool bResult = false;
  654. String sQry;
  655. TADOQuery *pADO = NULL;
  656. TcxDataController *pGDC = AListSch->DataController;
  657. String sTypeCd = String(AListSch->Tag);
  658. sQry = "INSERT INTO TB_VMS_TRFC_INFR_DSPL_SCH ( \r\n"
  659. " VMS_CTLR_NMBR, \r\n"
  660. " TRFC_SITU_TYPE_CD, \r\n"
  661. " PHASE, \r\n"
  662. " VMS_FORM_ID, \r\n"
  663. " VMS_FORM_PRRT_CD, \r\n"
  664. " DSPL_HH, \r\n"
  665. " DSPL_STRT_HH, \r\n"
  666. " DSPL_END_HH, \r\n"
  667. " FRST_VMS_IFSC_ID, \r\n"
  668. " SECD_VMS_IFSC_ID, \r\n"
  669. " THIR_VMS_IFSC_ID, \r\n"
  670. " FOUR_VMS_IFSC_ID, \r\n"
  671. " FRST_IMG_IFSC_ID, \r\n"
  672. " SECD_IMG_IFSC_ID, \r\n"
  673. " THIR_IMG_IFSC_ID, \r\n"
  674. " FOUR_IMG_IFSC_ID, \r\n"
  675. " USE_YN \r\n"
  676. " ) \r\n"
  677. " VALUES( \r\n"
  678. " :p01, :p02, :p03, \r\n"
  679. " :p04, :p05, :p06, \r\n"
  680. " :p07, :p08, :p09, \r\n"
  681. " :p10, :p11, :p12, \r\n"
  682. " :p13, :p14, :p15, \r\n"
  683. " :p16, \r\n"
  684. " :p17 \r\n"
  685. " ) \r\n";
  686. try
  687. {
  688. AListSch->BeginUpdate();
  689. pGDC->BeginUpdate();
  690. int nRows = pGDC->RecordCount;
  691. try
  692. {
  693. pADO = new TADOQuery(NULL);
  694. pADO->Close();
  695. pADO->Connection = ITSDb_GetConnection();
  696. ITSDb_SQLText(pADO, sQry);
  697. for (int ii = 0; ii < nRows; ii++)
  698. {
  699. String sFormId = VarToStr(pGDC->Values[ii][0]);
  700. String sDispHH = VarToStr(pGDC->Values[ii][3]);
  701. String sUseYn = VarToStr(pGDC->Values[ii][6]);
  702. String sStrTime = VarToStr(pGDC->Values[ii][7]);
  703. String sEndTime = VarToStr(pGDC->Values[ii][8]);
  704. String sIfscId1 = VarToStr(pGDC->Values[ii][ 9]);
  705. String sIfscId2 = VarToStr(pGDC->Values[ii][10]);
  706. String sIfscId3 = VarToStr(pGDC->Values[ii][11]);
  707. String sIfscId4 = VarToStr(pGDC->Values[ii][12]);
  708. String sImgIfscId1 = VarToStr(pGDC->Values[ii][16]);
  709. String sImgIfscId2 = VarToStr(pGDC->Values[ii][17]);
  710. String sImgIfscId3 = VarToStr(pGDC->Values[ii][18]);
  711. String sImgIfscId4 = VarToStr(pGDC->Values[ii][19]);
  712. String sPrrtCd = "";
  713. ITSDb_SQLBind(pADO, "p01", AVmsNmbr);
  714. ITSDb_SQLBind(pADO, "p02", sTypeCd);
  715. ITSDb_SQLBind(pADO, "p03", String(ii+1));
  716. ITSDb_SQLBind(pADO, "p04", sFormId);
  717. ITSDb_SQLBind(pADO, "p05", sPrrtCd);
  718. ITSDb_SQLBind(pADO, "p06", sDispHH);
  719. ITSDb_SQLBind(pADO, "p07", sStrTime);
  720. ITSDb_SQLBind(pADO, "p08", sEndTime);
  721. ITSDb_SQLBind(pADO, "p09", sIfscId1);
  722. ITSDb_SQLBind(pADO, "p10", sIfscId2);
  723. ITSDb_SQLBind(pADO, "p11", sIfscId3);
  724. ITSDb_SQLBind(pADO, "p12", sIfscId4);
  725. ITSDb_SQLBind(pADO, "p13", sImgIfscId1);
  726. ITSDb_SQLBind(pADO, "p14", sImgIfscId2);
  727. ITSDb_SQLBind(pADO, "p15", sImgIfscId3);
  728. ITSDb_SQLBind(pADO, "p16", sImgIfscId4);
  729. ITSDb_SQLBind(pADO, "p17", sUseYn);
  730. pADO->ExecSQL();
  731. }
  732. bResult = true;
  733. }
  734. catch(EDatabaseError &E)
  735. {
  736. ITSDb_GetConnection()->RollbackTrans();
  737. DBERRORMSG("VMS Auto Schedule Save", String(E.ClassName()), E.Message, sQry);
  738. throw Exception(String(E.ClassName()) + E.Message);
  739. }
  740. catch(Exception &e)
  741. {
  742. ITSDb_GetConnection()->RollbackTrans();
  743. DBERRORMSG("VMS Auto Schedule Save", String(e.ClassName()), e.Message, sQry);
  744. throw Exception(String(e.ClassName()) + e.Message);
  745. }
  746. }
  747. __finally
  748. {
  749. if (pADO)
  750. {
  751. pADO->Close();
  752. delete pADO;
  753. }
  754. pGDC->EndUpdate();
  755. AListSch->EndUpdate();
  756. }
  757. return bResult;
  758. }
  759. //---------------------------------------------------------------------------
  760. bool __fastcall TVMSM600M::DeleteVmsAutoScenario(String AVmsNmbr)
  761. {
  762. bool bResult = false;
  763. String sQry;
  764. TADOQuery *pADO = NULL;
  765. sQry = "DELETE TB_VMS_TRFC_INFR_DSPL_SCH \r\n"
  766. " WHERE VMS_CTLR_NMBR = :p01 \r\n"
  767. " AND TRFC_SITU_TYPE_CD IN ('0', '1', '2', '3', '4', '7') \r\n";
  768. try
  769. {
  770. try
  771. {
  772. pADO = new TADOQuery(NULL);
  773. pADO->Close();
  774. pADO->Connection = ITSDb_GetConnection();
  775. ITSDb_SQLText(pADO, sQry);
  776. ITSDb_SQLBind(pADO, "p01", AVmsNmbr);
  777. pADO->ExecSQL();
  778. bResult = true;
  779. }
  780. catch(EDatabaseError &E)
  781. {
  782. ITSDb_GetConnection()->RollbackTrans();
  783. DBERRORMSG("VMS Auto Schedule Delete", String(E.ClassName()), E.Message, sQry);
  784. throw Exception(String(E.ClassName()) + E.Message);
  785. }
  786. catch(Exception &e)
  787. {
  788. ITSDb_GetConnection()->RollbackTrans();
  789. DBERRORMSG("VMS Auto Schedule Delete", String(e.ClassName()), e.Message, sQry);
  790. throw Exception(String(e.ClassName()) + e.Message);
  791. }
  792. }
  793. __finally
  794. {
  795. if (pADO)
  796. {
  797. pADO->Close();
  798. delete pADO;
  799. }
  800. }
  801. return bResult;
  802. }
  803. //---------------------------------------------------------------------------
  804. void __fastcall TVMSM600M::DrawTrafficScenarioForm()
  805. {
  806. TcxDataController *pGDC = TvGrid1->DataController;
  807. try
  808. {
  809. TvGrid1->BeginUpdate();
  810. pGDC->BeginUpdate();
  811. int nRows = pGDC->RecordCount;
  812. try
  813. {
  814. for (int ii = 0; ii < nRows; ii++)
  815. {
  816. String sFormId = VarToStr(pGDC->Values[ii][0]);
  817. String sFormClr = VarToStr(pGDC->Values[ii][14]);
  818. int nFormType = VarToStr(pGDC->Values[ii][15]).ToIntDef(0);
  819. FIfscId[0] = VarToStr(pGDC->Values[ii][9]);
  820. FIfscId[1] = VarToStr(pGDC->Values[ii][10]);
  821. FIfscId[2] = VarToStr(pGDC->Values[ii][11]);
  822. FIfscId[3] = VarToStr(pGDC->Values[ii][12]);
  823. FIfscId[4] = VarToStr(pGDC->Values[ii][16]);
  824. FIfscId[5] = VarToStr(pGDC->Values[ii][17]);
  825. FIfscId[6] = VarToStr(pGDC->Values[ii][18]);
  826. FIfscId[7] = VarToStr(pGDC->Values[ii][19]);
  827. switch(nFormType)
  828. {
  829. case 11:// ' 소통상황(1단)
  830. case 12:// ' 소통상황(2단)
  831. case 13:// ' 소통상황(3단)
  832. case 14:// ' 소통상황(4단)
  833. if (LoadFormObjectInfo(sFormId, sFormClr, m_pEdtDesigner))
  834. {
  835. m_pEdtDesigner->GetVmsFormImage(ImgForm);
  836. TStream *pImgStream = new TMemoryStream();
  837. try
  838. {
  839. void *p;
  840. Variant v;
  841. ImgForm->Picture->Bitmap->SaveToStream(pImgStream);
  842. int aBound[]={0, pImgStream->Size - 1};
  843. v = VarArrayCreate(aBound, 1, varByte);
  844. p = VarArrayLock(v);
  845. pImgStream->Position = 0;
  846. pImgStream->Read(p, pImgStream->Size);
  847. VarArrayUnlock(v);
  848. pGDC->Values[ii][1] = v;
  849. }
  850. __finally
  851. {
  852. SAFE_DELETE(pImgStream);
  853. }
  854. }
  855. break;
  856. }
  857. }
  858. }
  859. catch(Exception &e)
  860. {
  861. }
  862. }
  863. __finally
  864. {
  865. pGDC->EndUpdate();
  866. TvGrid1->EndUpdate();
  867. }
  868. }
  869. //---------------------------------------------------------------------------
  870. bool __fastcall TVMSM600M::LoadFormObjectInfo(String AFormId, String ABkColor, TVmsFormDesigner *ADesigner)
  871. {
  872. ADesigner->Clear();
  873. m_pEdtDesigner->BkColorCode = ABkColor;
  874. String sQry;
  875. TADOQuery *pADO = NULL;
  876. sQry = "SELECT A.*, \r\n"
  877. " C.VMS_FONT_SHPE_NM, \r\n"
  878. " B.IMAG_DATA AS SYMB_IMG, \r\n"
  879. " B.SYMB_EXPL AS SYMB_IMG_NM \r\n"
  880. " FROM TB_VMS_FORM_OBJECT A, \r\n"
  881. " TB_VMS_SYMB_LIB B, \r\n"
  882. " TB_VMS_FONT_SHPE C, \r\n"
  883. " TB_VMS_FORM D \r\n"
  884. " WHERE D.VMS_FORM_ID = :p01 \r\n"
  885. " AND D.VMS_FORM_ID = A.VMS_FORM_ID \r\n"
  886. " AND A.SYMBLIB_NMBR = B.SYMBLIB_NMBR(+) \r\n"
  887. " AND A.VMS_FONT_TYPE_CD = C.VMS_FONT_SHPE_CD(+) \r\n"
  888. " ORDER BY A.FORM_OBJECT_ID ASC \r\n";
  889. try
  890. {
  891. try
  892. {
  893. pADO = new TADOQuery(NULL);
  894. pADO->Close();
  895. pADO->Connection = ITSDb_GetConnection();
  896. ITSDb_SQLText(pADO, sQry);
  897. ITSDb_SQLBind(pADO, "p01", AFormId);
  898. ITSDb_SQLOpen(pADO);
  899. int nDrawType;
  900. String sObjKind;
  901. for( ; !pADO->Eof; pADO->Next())
  902. {
  903. int nFormId = pADO->FieldByName("VMS_FORM_ID")->AsInteger;
  904. int nObjId = pADO->FieldByName("FORM_OBJECT_ID")->AsInteger;
  905. int nObjType = pADO->FieldByName("VMS_FORM_OBJECT_TYPE_CD")->AsInteger;
  906. if (nObjType == 1 || //이미지 심볼
  907. nObjType == 2 || //소통정보이미지
  908. nObjType == 3 || //파일이미지
  909. nObjType == 17 || //소통이미지1
  910. nObjType == 27 || //소통이미지2
  911. nObjType == 37 || //소통이미지3
  912. nObjType == 47 ) //소통이미지4
  913. {
  914. if (nObjType == 1) sObjKind = OBJKIND_IMAGEID; //Image Id
  915. else sObjKind = OBJKIND_IMAGE; //Image
  916. nDrawType = 1; //이미지그리기
  917. }
  918. else
  919. {
  920. sObjKind = OBJKIND_TEXT; //문자열
  921. nDrawType = 0; //문자열그리기
  922. }
  923. //실재 맵핑된 구간의 정보를 표출하도록 한다.
  924. int nBlinking = pADO->FieldByName("VMS_DSPL_BLINKING")->AsInteger;
  925. int nPosX = pADO->FieldByName("VMS_DSPL_XCRDN")->AsInteger;
  926. int nPosY = pADO->FieldByName("VMS_DSPL_YCRDN")->AsInteger;
  927. TVmsFormObject *pObj = ADesigner->AddObject((VmsObjectDrawType)nDrawType);
  928. if (!pObj) continue;
  929. //11 , ' @구간명
  930. //12 , ' @시점명
  931. //13 , ' @종점명
  932. //14 , ' @소통상황
  933. //15 , ' @통행시간
  934. //16 , ' @통행속도
  935. //17 , ' @소통이미지
  936. pObj->Text = pADO->FieldByName("VMS_DSPL_TXT")->AsString.Trim();
  937. pObj->RunText = pObj->Text;
  938. String sIfscId = "";
  939. if (nObjType >= 11 && nObjType < 17)
  940. sIfscId = FIfscId[0];
  941. else
  942. if (nObjType >= 21 && nObjType < 27)
  943. sIfscId = FIfscId[1];
  944. else
  945. if (nObjType >= 31 && nObjType < 37)
  946. sIfscId = FIfscId[2];
  947. else
  948. if (nObjType >= 41 && nObjType < 47)
  949. sIfscId = FIfscId[3];
  950. switch(nObjType)
  951. {
  952. case 17: sIfscId = FIfscId[4]; break;
  953. case 27: sIfscId = FIfscId[5]; break;
  954. case 37: sIfscId = FIfscId[6]; break;
  955. case 47: sIfscId = FIfscId[7]; break;
  956. }
  957. if (sIfscId != "")
  958. {
  959. TVmsIfsc *pIfscObj;
  960. pIfscObj = VmsIfscManager->FLists.Find(sIfscId.ToIntDef(0));
  961. if (pIfscObj)
  962. {
  963. switch(nObjType)
  964. {
  965. case 11: case 21: case 31: case 41:
  966. pObj->RunText = pIfscObj->VMS_IFSC_NM;
  967. break;
  968. case 12: case 22: case 32: case 42:
  969. pObj->RunText = pIfscObj->DSPL_STRT_NODE_NM;
  970. break;
  971. case 13: case 23: case 33: case 43:
  972. pObj->RunText = pIfscObj->DSPL_END_NODE_NM;
  973. break;
  974. }
  975. }
  976. }
  977. pObj->ObjSeq = nObjId;
  978. pObj->ObjId = nObjId;
  979. pObj->ObjKind = sObjKind;
  980. pObj->Tag = pADO->FieldByName("VMS_IFSC_ID")->AsString;
  981. pObj->ObjType = pADO->FieldByName("VMS_FORM_OBJECT_TYPE_CD")->AsString;
  982. pObj->ObjSize = pADO->FieldByName("VMS_DSPL_SIZE")->AsInteger;
  983. pObj->BkColorCode = pADO->FieldByName("VMS_DSPL_BKCOLOR")->AsString;
  984. pObj->Blink = nBlinking == 1 ? true : false;
  985. pObj->ImageId = pADO->FieldByName("SYMBLIB_NMBR")->AsString;
  986. if (pObj->ObjKind == OBJKIND_TEXT) // 문자열
  987. {
  988. int nFontBold = pADO->FieldByName("VMS_FONT_STYL_CD")->AsInteger;
  989. pObj->FontName = pADO->FieldByName("VMS_FONT_SHPE_NM")->AsString;
  990. pObj->FontNameCode = pADO->FieldByName("VMS_FONT_TYPE_CD")->AsString;
  991. pObj->FontColorCode = pADO->FieldByName("VMS_FONT_HUE_CD")->AsString;
  992. pObj->FontSize = pADO->FieldByName("VMS_FONT_SIZE")->AsInteger;
  993. pObj->FontBold = nFontBold == 1 ? true : false;
  994. pObj->TextAlign = pADO->FieldByName("VMS_FONT_ALIGN")->AsInteger;
  995. pObj->SetSize(pADO->FieldByName("VMS_DSPL_WIDTH")->AsInteger, pADO->FieldByName("VMS_DSPL_HEIGHT")->AsInteger);
  996. pObj->SetRuntimeText(pObj->RunText);
  997. }
  998. else //if (sObjKind == "1" || sObjKind == "2") // 이미지(1), 이미지 ID(2)
  999. {
  1000. if (pObj->ObjKind == OBJKIND_IMAGEID)
  1001. {
  1002. pObj->Text = pADO->FieldByName("SYMBLIB_NMBR")->AsString;
  1003. }
  1004. TStream *pStream = NULL;
  1005. pStream = pADO->CreateBlobStream(pADO->FieldByName("VMS_DSPL_FIGR"), bmRead);
  1006. try
  1007. {
  1008. if (pStream && pStream->Size > 0)
  1009. {
  1010. Graphics::TBitmap *Bitmap = pObj->GetBitmap();
  1011. pStream->Position = 0;
  1012. Bitmap->LoadFromStream(pStream);
  1013. pObj->SetSize(Bitmap->Width, Bitmap->Height);
  1014. }
  1015. }
  1016. __finally
  1017. {
  1018. SAFE_DELETE(pStream);
  1019. }
  1020. }
  1021. pObj->SetPos(nPosX, nPosY);
  1022. pObj->Show();
  1023. pObj->BringToFront();
  1024. }
  1025. }
  1026. catch(EDatabaseError &E)
  1027. {
  1028. DBERRORMSG("VMS Object Query", String(E.ClassName()), E.Message, sQry);
  1029. throw Exception(String(E.ClassName()) + E.Message);
  1030. }
  1031. catch(Exception &exception)
  1032. {
  1033. DBERRORMSG("VMS Object Query", String(exception.ClassName()), exception.Message, sQry);
  1034. throw Exception(String(exception.ClassName()) + exception.Message);
  1035. }
  1036. }
  1037. __finally
  1038. {
  1039. if (pADO)
  1040. {
  1041. pADO->Close();
  1042. delete pADO;
  1043. }
  1044. }
  1045. return true;
  1046. }
  1047. //---------------------------------------------------------------------------