VMSM600MF.cpp 67 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #include "ITSSkinF.h"
  4. #include "ITSUtilF.h"
  5. #include "AppGlobalF.h"
  6. #include "CDSVmsIfscF.h"
  7. #include "ITSLangTransF.h"
  8. #include "CDSFontF.h"
  9. #include "CDSAtmpF.h"
  10. #include "CDSVmsFormF.h"
  11. #pragma hdrstop
  12. #include "VMSM600MF.h"
  13. #include "VMSM610MF.h"
  14. #include "VMSM620MF.h"
  15. #include "VMSM630MF.h"
  16. #include "VMSM640MF.h"
  17. #include "VMSSEL0MF.h"
  18. #include "VMSEDT0MF.h"
  19. //---------------------------------------------------------------------------
  20. #pragma package(smart_init)
  21. #pragma link "cxButtons"
  22. #pragma link "cxCalendar"
  23. #pragma link "cxContainer"
  24. #pragma link "cxControls"
  25. #pragma link "cxDropDownEdit"
  26. #pragma link "cxEdit"
  27. #pragma link "cxGraphics"
  28. #pragma link "cxGroupBox"
  29. #pragma link "cxLabel"
  30. #pragma link "cxLookAndFeelPainters"
  31. #pragma link "cxLookAndFeels"
  32. #pragma link "cxMaskEdit"
  33. #pragma link "cxPC"
  34. #pragma link "cxPCdxBarPopupMenu"
  35. #pragma link "cxSpinEdit"
  36. #pragma link "cxSplitter"
  37. #pragma link "cxTextEdit"
  38. #pragma link "cxTimeEdit"
  39. #pragma link "dxSkinBlack"
  40. #pragma link "dxSkinBlue"
  41. #pragma link "dxSkinCaramel"
  42. #pragma link "dxSkinCoffee"
  43. #pragma link "dxSkinDarkRoom"
  44. #pragma link "dxSkinDarkSide"
  45. #pragma link "dxSkinFoggy"
  46. #pragma link "dxSkinGlassOceans"
  47. #pragma link "dxSkiniMaginary"
  48. #pragma link "dxSkinLilian"
  49. #pragma link "dxSkinLiquidSky"
  50. #pragma link "dxSkinLondonLiquidSky"
  51. #pragma link "dxSkinMcSkin"
  52. #pragma link "dxSkinMoneyTwins"
  53. #pragma link "dxSkinOffice2007Black"
  54. #pragma link "dxSkinOffice2007Blue"
  55. #pragma link "dxSkinOffice2007Green"
  56. #pragma link "dxSkinOffice2007Pink"
  57. #pragma link "dxSkinOffice2007Silver"
  58. #pragma link "dxSkinOffice2010Black"
  59. #pragma link "dxSkinOffice2010Blue"
  60. #pragma link "dxSkinOffice2010Silver"
  61. #pragma link "dxSkinsCore"
  62. #pragma link "dxSkinscxPCPainter"
  63. #pragma link "dxSkinSeven"
  64. #pragma link "dxSkinSharp"
  65. #pragma link "dxSkinSilver"
  66. #pragma link "dxSkinStardust"
  67. #pragma link "cxRadioGroup"
  68. #pragma link "cxClasses"
  69. #pragma link "cxCustomData"
  70. #pragma link "cxData"
  71. #pragma link "cxDataStorage"
  72. #pragma link "cxDBData"
  73. #pragma link "cxFilter"
  74. #pragma link "cxGrid"
  75. #pragma link "cxGridCustomTableView"
  76. #pragma link "cxGridCustomView"
  77. #pragma link "cxGridDBTableView"
  78. #pragma link "cxGridLevel"
  79. #pragma link "cxGridTableView"
  80. #pragma link "cxStyles"
  81. #pragma link "cxCheckBox"
  82. #pragma link "cxImage"
  83. #pragma link "cxButtonEdit"
  84. #pragma link "cxBlobEdit"
  85. #pragma link "cxColorComboBox"
  86. #pragma link "cxCalc"
  87. #pragma link "VmsDesignerF"
  88. #pragma link "FRAME_VmsSchListF"
  89. #pragma resource "*.dfm"
  90. TVMSM600M *VMSM600M = NULL;
  91. //---------------------------------------------------------------------------
  92. __fastcall TVMSM600M::TVMSM600M(TComponent* Owner)
  93. : TForm(Owner)
  94. {
  95. LangTrans->Translate(this, ITSDb_GetConnection());
  96. ITSSkin_Load(this);
  97. CMM_LoadForm(g_sFormsDir, this);
  98. FUpdate= false;
  99. FTitle = Caption;//"VMS 자동 스케줄 관리";
  100. FListSymb = new TList;
  101. EditMode = false;
  102. FVMS_SCH_TYPE = "A"; //자동스케쥴
  103. FEN_DSPL_SCH_TYPE = enScheduleAuto;
  104. FRAMEVmsSchList1->PnlTop->Visible = false;
  105. FRAMEVmsSchList1->PnlBottom->Visible = false;
  106. FRAMEVmsSchList1->ColAuto->Visible = true;
  107. FRAMEVmsSchList1->ColFix->Visible = false;
  108. FRAMEVmsSchList1->ColBase->Visible = false;
  109. FRAMEVmsSchList1->FEN_DSPL_SCH_TYPE = FEN_DSPL_SCH_TYPE;
  110. FVmsHeight = 64;
  111. for (int ii = 0; ii < eSchTp_max; ii++)
  112. {
  113. FButtonAdd[ii] = (TcxButton*)FindComponent("BtnListAdd"+IntToStr(ii));
  114. FButtonDel[ii] = (TcxButton*)FindComponent("BtnListDelete"+IntToStr(ii));
  115. FTabSheet[ii] = (TcxTabSheet*)FindComponent("TabSheet"+IntToStr(ii));
  116. FListSch[ii] = (TcxGridTableView*)FindComponent("TvGrid"+IntToStr(ii));
  117. FListFrm[ii] = (TcxGridTableView*)FindComponent("TvForm"+IntToStr(ii));
  118. FLabel[ii] = (TcxLabel*)FrmLang->FindComponent("lblSch"+IntToStr(ii));
  119. }
  120. PgVmsSch->Properties->ActivePage = TabSheet0;
  121. // eSchTp_deture
  122. if (FTabSheet[eSchTp_deture])
  123. {
  124. FTabSheet[eSchTp_deture]->TabVisible = false;
  125. FTabSheet[eSchTp_deture]->Visible = false;
  126. }
  127. // eSchTp_congest
  128. if (FTabSheet[eSchTp_congest])
  129. {
  130. FTabSheet[eSchTp_congest]->TabVisible = false;
  131. FTabSheet[eSchTp_congest]->Visible = false;
  132. }
  133. // eSchTp_safe
  134. if (FTabSheet[eSchTp_safe])
  135. {
  136. FTabSheet[eSchTp_safe]->TabVisible = false;
  137. FTabSheet[eSchTp_safe]->Visible = false;
  138. }
  139. #if 1
  140. // eSchTp_video
  141. if (FTabSheet[eSchTp_video])
  142. {
  143. FTabSheet[eSchTp_video]->TabVisible = false;
  144. FTabSheet[eSchTp_video]->Visible = false;
  145. }
  146. // eSchTp_stream
  147. if (FTabSheet[eSchTp_stream])
  148. {
  149. FTabSheet[eSchTp_stream]->TabVisible = false;
  150. FTabSheet[eSchTp_stream]->Visible = false;
  151. }
  152. #endif
  153. // eSchTp_atmp
  154. if (FTabSheet[eSchTp_atmp])
  155. {
  156. FTabSheet[eSchTp_atmp]->TabVisible = true;
  157. FTabSheet[eSchTp_atmp]->Visible = true;
  158. }
  159. // eSchTp_park
  160. if (FTabSheet[eSchTp_park])
  161. {
  162. #ifdef USE_PARK
  163. FTabSheet[eSchTp_park]->TabVisible = true;
  164. FTabSheet[eSchTp_park]->Visible = true;
  165. #else
  166. FTabSheet[eSchTp_park]->TabVisible = false;
  167. FTabSheet[eSchTp_park]->Visible = false;
  168. #endif
  169. }
  170. for (int ii = 0; ii < eSchTp_max; ii++)
  171. {
  172. if (FTabSheet[ii] && (FTabSheet[ii]->TabVisible == false))
  173. {
  174. FListSch[ii] = NULL;
  175. FListFrm[ii] = NULL;
  176. }
  177. if (FListSch[ii]) InitTcxList(FListSch[ii]);
  178. if (FListFrm[ii]) InitTcxList(FListFrm[ii]);
  179. }
  180. }
  181. //---------------------------------------------------------------------------
  182. void __fastcall TVMSM600M::InitTcxList(TcxGridTableView *AView)
  183. {
  184. AView->OptionsView->DataRowHeight = 0;
  185. AView->OptionsView->CellAutoHeight = true;
  186. AView->OptionsView->Indicator = false;
  187. AView->OptionsCustomize->ColumnMoving = false;
  188. AView->OptionsCustomize->ColumnSorting = false;
  189. AView->Columns[0]->Width = 40;
  190. AView->Columns[0]->Options->HorzSizing = false;
  191. AView->Columns[1]->Width = 330;
  192. }
  193. //---------------------------------------------------------------------------
  194. void __fastcall TVMSM600M::CommClose()
  195. {
  196. try
  197. {
  198. if (m_pEdtDesigner)
  199. {
  200. delete m_pEdtDesigner;
  201. m_pEdtDesigner = NULL;
  202. }
  203. APP_DelVmsSizeCombo(CbSizeType);
  204. ClearSymbloList();
  205. SAFE_DELETE(FListSymb);
  206. CMM_SaveForm(g_sFormsDir, this);
  207. }
  208. catch(...)
  209. {
  210. }
  211. }
  212. //---------------------------------------------------------------------------
  213. void __fastcall TVMSM600M::FormCreate(TObject *Sender)
  214. {
  215. m_pEdtDesigner = new TVmsFormDesigner(PnlEditForm);
  216. FOR_STL(TCDSFontColor*, pObj, CDSFontManager->FColors)
  217. {
  218. m_pEdtDesigner->InitFontColor(pObj->VMS_FONT_COLR_CD, (TColor)pObj->VMS_FONT_COLR_VAL);
  219. }
  220. }
  221. //---------------------------------------------------------------------------
  222. void __fastcall TVMSM600M::FormShow(TObject *Sender)
  223. {
  224. Refresh();
  225. FormInit();
  226. ChangeEditMode(1);
  227. TmrShow->Enabled = true;
  228. }
  229. //---------------------------------------------------------------------------
  230. void __fastcall TVMSM600M::FormInit()
  231. {
  232. for (int ii = 0; ii < eSchTp_max; ii++)
  233. {
  234. if (FListSch[ii]) FListSch[ii]->OptionsView->NoDataToDisplayInfoText = FrmLang->lblNoSchedule->Caption;//"<등록되어 있는 스케줄 정보가 없습니다>";
  235. if (FListFrm[ii]) FListFrm[ii]->OptionsView->NoDataToDisplayInfoText = FrmLang->lblNoForm->Caption;//"<등록되어 있는 폼 정보가 없습니다>";
  236. }
  237. //VMS사이즈
  238. APP_FillVmsSizeType(CbSizeType, false);
  239. VmsCtlrManager->LoadVmsFormUsage();
  240. FRAMEVmsSchList1->RefreshVmsFormUsage();
  241. FNewDb = false;
  242. }
  243. //---------------------------------------------------------------------------
  244. void __fastcall TVMSM600M::TmrShowTimer(TObject *Sender)
  245. {
  246. TmrShow->Enabled = false;
  247. }
  248. //---------------------------------------------------------------------------
  249. void __fastcall TVMSM600M::BtnCloseClick(TObject *Sender)
  250. {
  251. Close();
  252. }
  253. //---------------------------------------------------------------------------
  254. void __fastcall TVMSM600M::FormClose(TObject *Sender, TCloseAction &Action)
  255. {
  256. CommClose();
  257. VMSM600M = NULL;
  258. Action = caFree;
  259. }
  260. //---------------------------------------------------------------------------
  261. void __fastcall TVMSM600M::FormCloseQuery(TObject *Sender, bool &CanClose)
  262. {
  263. if (FUpdate)
  264. {
  265. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_14, 0);
  266. }
  267. }
  268. //---------------------------------------------------------------------------
  269. void __fastcall TVMSM600M::ChangeEditMode(int AEdit)
  270. {
  271. }
  272. //---------------------------------------------------------------------------
  273. void __fastcall TVMSM600M::ClearSymbloList()
  274. {
  275. for(int ii = 0; ii < FListSymb->Count; ii++)
  276. {
  277. Graphics::TBitmap *bitmap = (Graphics::TBitmap *)FListSymb->Items[ii];
  278. delete bitmap;
  279. }
  280. FListSymb->Clear();
  281. }
  282. //---------------------------------------------------------------------------
  283. void __fastcall TVMSM600M::FRAMEVmsSchList1TvListCellDblClick(TcxCustomGridTableView *Sender,
  284. TcxGridTableDataCellViewInfo *ACellViewInfo, TMouseButton AButton,
  285. TShiftState AShift, bool &AHandled)
  286. {
  287. if (!ACellViewInfo) return;
  288. DisplayInfo();
  289. }
  290. //---------------------------------------------------------------------------
  291. void __fastcall TVMSM600M::FRAMEVmsSchList1TvListFocusedRecordChanged(TcxCustomGridTableView *Sender,
  292. TcxCustomGridRecord *APrevFocusedRecord, TcxCustomGridRecord *AFocusedRecord,
  293. bool ANewItemRecordFocusingChanged)
  294. {
  295. if (!AFocusedRecord) return;
  296. DisplayInfo();
  297. }
  298. //---------------------------------------------------------------------------
  299. void __fastcall TVMSM600M::CbSizeTypePropertiesChange(TObject *Sender)
  300. {
  301. BtnSearchClick(NULL);
  302. }
  303. //---------------------------------------------------------------------------
  304. void __fastcall TVMSM600M::BtnSearchClick(TObject *Sender)
  305. {
  306. RefreshData();
  307. EdFocus->SetFocus();
  308. ChangeEditMode(1);
  309. }
  310. //---------------------------------------------------------------------------
  311. void __fastcall TVMSM600M::RefreshData()
  312. {
  313. FormClear();
  314. TVmsSizeType *pVmsSizeType = APP_GetVmsSizeTypeObject(CbSizeType);
  315. if (pVmsSizeType == NULL) return;
  316. FVmsTypeCd = pVmsSizeType->TypeCd;
  317. FVmsWidth = pVmsSizeType->Width;
  318. FVmsHeight = pVmsSizeType->Height;
  319. PnlEdtBack->Width = FVmsWidth+4;
  320. PnlEdtBack->Height= FVmsHeight+4;
  321. m_pEdtDesigner->Clear();
  322. m_pEdtDesigner->SizeType = FVmsTypeCd;
  323. m_pEdtDesigner->SetSize(FVmsWidth, FVmsHeight);
  324. m_pEdtDesigner->SetPos(0, 0);
  325. m_pEdtDesigner->BkColorCode = "0";
  326. m_pEdtDesigner->EditMode = true;
  327. m_pEdtDesigner->Show();
  328. FRAMEVmsSchList1->UpdateList(FVmsTypeCd);
  329. LoadVmsFormList(FVmsTypeCd);
  330. }
  331. //---------------------------------------------------------------------------
  332. void __fastcall TVMSM600M::FormClear()
  333. {
  334. FSelIdx = -1;
  335. EdVmsNmbr->Clear();
  336. GrpSchedule->Caption = lblTitle->Caption;//"▶ 자동 스케줄 설정";
  337. for (int ii = 0; ii < eSchTp_max; ii++)
  338. {
  339. if (FListSch[ii]) CMM_ClearGridTableView(FListSch[ii]);
  340. if (FTabSheet[ii] && FLabel[ii]) FTabSheet[ii]->Caption = " " + FLabel[ii]->Caption + " ";
  341. }
  342. FNewDb = false;
  343. }
  344. //---------------------------------------------------------------------------
  345. void __fastcall TVMSM600M::DisplayInfo()
  346. {
  347. FormClear();
  348. FSelIdx = CMM_GetRecordIndex(FRAMEVmsSchList1->TvList);
  349. if (FSelIdx < 0) return;
  350. TcxDataController *pGDC = FRAMEVmsSchList1->TvList->DataController;
  351. String sVmsNmbr = VarToStr(pGDC->Values[FSelIdx][FRAMEVmsSchList1->Column01->Index]);
  352. EdVmsNmbr->Text = sVmsNmbr;
  353. GrpSchedule->Caption = lblTitle->Caption + " (" + VarToStr(pGDC->Values[FSelIdx][FRAMEVmsSchList1->Column02->Index]) + ": " + VarToStr(pGDC->Values[FSelIdx][FRAMEVmsSchList1->Column03->Index]) + ")";
  354. LoadVmsScheduleInfo(sVmsNmbr);
  355. DrawTrafficScenarioForm();
  356. if (FListSch[eSchTp_video]) DrawVideoStreamScenarioForm(eSchTp_video);
  357. if (FListSch[eSchTp_stream]) DrawVideoStreamScenarioForm(eSchTp_stream);
  358. //DrawAtmpScenarioForm();
  359. TVmsCtlr *pObj = VmsCtlrManager->FLists.Find(sVmsNmbr);
  360. if (pObj)
  361. {
  362. PSCHEDULE_USAGE Use = &pObj->FormCnt[FEN_DSPL_SCH_TYPE];
  363. for (int ii = 0; ii < eSchTp_max; ii++)
  364. {
  365. if (FTabSheet[ii] && FLabel[ii])
  366. {
  367. FTabSheet[ii]->Caption = " " + FLabel[ii]->Caption + " - " + String(Use->Use[ii]) + "/" + String(Use->Total[ii]) + " ";
  368. }
  369. }
  370. }
  371. ChangeEditMode(3);
  372. }
  373. //---------------------------------------------------------------------------
  374. void __fastcall TVMSM600M::TvFormCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo,
  375. TMouseButton AButton, TShiftState AShift,
  376. bool &AHandled)
  377. {
  378. if (!ACellViewInfo) return;
  379. int nRow = Sender->DataController->FocusedRecordIndex;
  380. if( nRow <= -1 )
  381. return;
  382. if (Sender->Tag >= 0 && Sender->Tag <eSchTp_max)
  383. {
  384. if (FButtonAdd[Sender->Tag])
  385. {
  386. BtnListAdd0Click((TObject*)FButtonAdd[Sender->Tag]);
  387. }
  388. }
  389. }
  390. //---------------------------------------------------------------------------
  391. void __fastcall TVMSM600M::BtnListAdd0Click(TObject *Sender)
  392. {
  393. String sUse = "N";
  394. String sTime= "4";
  395. TcxButton *pBtn = (TcxButton*)Sender;
  396. int nTag = pBtn->Tag;
  397. if (nTag < 0 || nTag >= eSchTp_max) return;
  398. int nSelIdx = CMM_GetRecordIndex(FRAMEVmsSchList1->TvList);
  399. if (nSelIdx < 0) return;
  400. if (!FListFrm[nTag] || !FListSch[nTag]) return;
  401. TcxGridDataController *pDcFrm = FListFrm[nTag]->DataController;
  402. TcxGridDataController *pDcSch = FListSch[nTag]->DataController;
  403. int nFormIdx = CMM_GetRecordIndex(FListFrm[nTag]);
  404. if (nFormIdx < 0) return;
  405. if (nTag == eSchTp_traffic || nTag == eSchTp_video || nTag == eSchTp_stream)
  406. {
  407. sUse = "N";
  408. }
  409. if (nTag == eSchTp_video)
  410. {
  411. sTime= "0";
  412. }
  413. String sStrDate = "";
  414. String sEndDate = "";
  415. bool bSelected= false;
  416. TVMSSEL0M *pSelDate = new TVMSSEL0M(this);
  417. pSelDate->FCurrDay = true;
  418. pSelDate->ShowModal();
  419. bSelected = pSelDate->FSelected;
  420. sStrDate = pSelDate->FStrTime;
  421. sEndDate = pSelDate->FEndTime;
  422. delete pSelDate;
  423. pSelDate = NULL;
  424. if (!bSelected) return;
  425. int nRow = pDcSch->AppendRecord();
  426. pDcSch->Values[nRow][ 0] = VarToStr(pDcFrm->Values[nFormIdx][0]);
  427. pDcSch->Values[nRow][ 1] = (pDcFrm->Values[nFormIdx][1]); //이미지데이터임
  428. pDcSch->Values[nRow][ 3] = sTime;
  429. pDcSch->Values[nRow][ 4] = ITSUtil_FormatStr(sStrDate, STR_HHNN);;
  430. pDcSch->Values[nRow][ 5] = ITSUtil_FormatStr(sEndDate, STR_HHNN);;
  431. pDcSch->Values[nRow][ 6] = sUse;
  432. pDcSch->Values[nRow][ 7] = sStrDate;
  433. pDcSch->Values[nRow][ 8] = sEndDate;
  434. pDcSch->Values[nRow][15] = VarToStr(pDcFrm->Values[nFormIdx][2]);
  435. pDcSch->Values[nRow][20] = VarToStr(pDcFrm->Values[nFormIdx][3]);
  436. pDcSch->Values[nRow][21] = VarToStr(pDcFrm->Values[nFormIdx][4]);
  437. }
  438. //---------------------------------------------------------------------------
  439. void __fastcall TVMSM600M::BtnListDelete0Click(TObject *Sender)
  440. {
  441. TcxButton *pBtn = (TcxButton*)Sender;
  442. int nTag = pBtn->Tag;
  443. if (nTag >= eSchTp_max) return;
  444. int nSelIdx = CMM_GetRecordIndex(FRAMEVmsSchList1->TvList);
  445. if (nSelIdx < 0) return;
  446. if (!FListSch[nTag]) return;
  447. TcxGridDataController *pDcSch = FListSch[nTag]->DataController;
  448. nSelIdx = CMM_GetRecordIndex(FListSch[nTag]);
  449. if (nSelIdx < 0) return;
  450. FListSch[nTag]->DataController->DeleteRecord(nSelIdx);
  451. }
  452. //---------------------------------------------------------------------------
  453. void __fastcall TVMSM600M::TvGridCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo,
  454. TMouseButton AButton, TShiftState AShift,
  455. bool &AHandled)
  456. {
  457. if (!ACellViewInfo) return;
  458. int nRow = Sender->DataController->FocusedRecordIndex;
  459. if( nRow <= -1 )
  460. return;
  461. TcxGridDataController *pGDC = (TcxGridDataController*)Sender->DataController;
  462. int nColIdx = ACellViewInfo->Item->Index;
  463. //ShowMessage(String(Sender->Tag) + " " + String(nColIdx));
  464. String sFormId = VarToStr(pGDC->Values[nRow][0]);
  465. String sStrDate = VarToStr(pGDC->Values[nRow][7]);
  466. String sEndDate = VarToStr(pGDC->Values[nRow][8]);
  467. if (nColIdx == 4 || nColIdx == 5)
  468. {
  469. //표출기간설정
  470. TVMSSEL0M *pSelDate = new TVMSSEL0M(this);
  471. pSelDate->FStrTime = sStrDate;
  472. pSelDate->FEndTime = sEndDate;
  473. pSelDate->ShowModal();
  474. bool bSelected = pSelDate->FSelected;
  475. sStrDate = pSelDate->FStrTime;
  476. sEndDate = pSelDate->FEndTime;
  477. delete pSelDate;
  478. pSelDate = NULL;
  479. if (bSelected)
  480. {
  481. pGDC->Values[nRow][4] = ITSUtil_FormatStr(sStrDate, STR_HHNN);;
  482. pGDC->Values[nRow][5] = ITSUtil_FormatStr(sEndDate, STR_HHNN);;
  483. pGDC->Values[nRow][7] = sStrDate;
  484. pGDC->Values[nRow][8] = sEndDate;
  485. }
  486. return;
  487. }
  488. if (Sender->Tag == eSchTp_traffic)
  489. {
  490. if (VarToStr(pGDC->Values[nRow][15]).ToIntDef(0) == 15)
  491. {
  492. //도형식배경 소통정보 폼
  493. Application->MessageBox(FrmLang->lblSchErr1->Caption.c_str(),//L"VMS 교통정보 폼 구간 설정\r\n도형식 배경소통정보 폼은 폼관리 화면에서 설정 가능합니다.",
  494. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  495. return;
  496. }
  497. // 소통정보 폼 정보구간 설정
  498. TVMSM610M *pIfscFrm = new TVMSM610M(this);
  499. pIfscFrm->FVmsNmbr = EdVmsNmbr->Text;
  500. pIfscFrm->FFormId = sFormId;
  501. pIfscFrm->FVmsTypeCd = FVmsTypeCd;
  502. pIfscFrm->FVmsWidth = FVmsWidth;
  503. pIfscFrm->FVmsHeight = FVmsHeight;
  504. pIfscFrm->FIfscId[0] = VarToStr(pGDC->Values[nRow][9]);
  505. pIfscFrm->FIfscId[1] = VarToStr(pGDC->Values[nRow][10]);
  506. pIfscFrm->FIfscId[2] = VarToStr(pGDC->Values[nRow][11]);
  507. pIfscFrm->FIfscId[3] = VarToStr(pGDC->Values[nRow][12]);
  508. pIfscFrm->FIfscId[4] = VarToStr(pGDC->Values[nRow][16]);
  509. pIfscFrm->FIfscId[5] = VarToStr(pGDC->Values[nRow][17]);
  510. pIfscFrm->FIfscId[6] = VarToStr(pGDC->Values[nRow][18]);
  511. pIfscFrm->FIfscId[7] = VarToStr(pGDC->Values[nRow][19]);
  512. //pIfscFrm->FVmsType = VarToStr(pGDC->Values[nRow][13]).ToIntDef(0);
  513. pIfscFrm->FFormColor = VarToStr(pGDC->Values[nRow][14]);
  514. pIfscFrm->FFormType = VarToStr(pGDC->Values[nRow][15]).ToIntDef(0);
  515. pIfscFrm->ShowModal();
  516. if (pIfscFrm->FSelected)
  517. {
  518. TStream *pImgStream = new TMemoryStream();
  519. try
  520. {
  521. void *p;
  522. Variant v;
  523. pIfscFrm->ImgForm->Picture->Bitmap->SaveToStream(pImgStream);
  524. int aBound[]={0, pImgStream->Size - 1};
  525. v = VarArrayCreate(aBound, 1, varByte);
  526. p = VarArrayLock(v);
  527. pImgStream->Position = 0;
  528. pImgStream->Read(p, pImgStream->Size);
  529. VarArrayUnlock(v);
  530. pGDC->Values[nRow][1] = v;
  531. }
  532. __finally
  533. {
  534. SAFE_DELETE(pImgStream);
  535. }
  536. pGDC->Values[nRow][ 9] = pIfscFrm->FIfscId[0];
  537. pGDC->Values[nRow][10] = pIfscFrm->FIfscId[1];
  538. pGDC->Values[nRow][11] = pIfscFrm->FIfscId[2];
  539. pGDC->Values[nRow][12] = pIfscFrm->FIfscId[3];
  540. pGDC->Values[nRow][16] = pIfscFrm->FIfscId[4];
  541. pGDC->Values[nRow][17] = pIfscFrm->FIfscId[5];
  542. pGDC->Values[nRow][18] = pIfscFrm->FIfscId[6];
  543. pGDC->Values[nRow][19] = pIfscFrm->FIfscId[7];
  544. }
  545. delete pIfscFrm;
  546. pIfscFrm = NULL;
  547. }
  548. else
  549. if (Sender->Tag == eSchTp_video)
  550. {
  551. TVMSM620M *pVideoFrm = new TVMSM620M(this);
  552. pVideoFrm->FVmsNmbr = EdVmsNmbr->Text;
  553. pVideoFrm->FFormId = sFormId;
  554. pVideoFrm->FVmsTypeCd = FVmsTypeCd;
  555. pVideoFrm->FVmsWidth = FVmsWidth;
  556. pVideoFrm->FVmsHeight = FVmsHeight;
  557. pVideoFrm->FSymbLibNmbr = VarToStr(pGDC->Values[nRow][20]);
  558. pVideoFrm->FStreamAddr = VarToStr(pGDC->Values[nRow][21]);
  559. //pVideoFrm->FVmsType = VarToStr(pGDC->Values[nRow][13]).ToIntDef(0);
  560. pVideoFrm->FFormColor = VarToStr(pGDC->Values[nRow][14]);
  561. pVideoFrm->FFormType = VarToStr(pGDC->Values[nRow][15]).ToIntDef(0);
  562. pVideoFrm->ShowModal();
  563. if (pVideoFrm->FSelected)
  564. {
  565. TStream *pImgStream = new TMemoryStream();
  566. try
  567. {
  568. void *p;
  569. Variant v;
  570. pVideoFrm->ImgForm->Picture->Bitmap->SaveToStream(pImgStream);
  571. int aBound[]={0, pImgStream->Size - 1};
  572. v = VarArrayCreate(aBound, 1, varByte);
  573. p = VarArrayLock(v);
  574. pImgStream->Position = 0;
  575. pImgStream->Read(p, pImgStream->Size);
  576. VarArrayUnlock(v);
  577. pGDC->Values[nRow][1] = v;
  578. }
  579. __finally
  580. {
  581. SAFE_DELETE(pImgStream);
  582. }
  583. pGDC->Values[nRow][20] = pVideoFrm->FSymbLibNmbr;
  584. pGDC->Values[nRow][21] = pVideoFrm->FStreamAddr;
  585. }
  586. delete pVideoFrm;
  587. pVideoFrm = NULL;
  588. }
  589. else
  590. if (Sender->Tag == eSchTp_stream)
  591. {
  592. TVMSM630M *pStreamFrm = new TVMSM630M(this);
  593. pStreamFrm->FVmsNmbr = EdVmsNmbr->Text;
  594. pStreamFrm->FFormId = sFormId;
  595. pStreamFrm->FVmsTypeCd = FVmsTypeCd;
  596. pStreamFrm->FVmsWidth = FVmsWidth;
  597. pStreamFrm->FVmsHeight = FVmsHeight;
  598. pStreamFrm->FSymbLibNmbr = VarToStr(pGDC->Values[nRow][20]);
  599. pStreamFrm->FStreamAddr = VarToStr(pGDC->Values[nRow][21]);
  600. //pStreamFrm->FVmsType = VarToStr(pGDC->Values[nRow][13]).ToIntDef(0);
  601. pStreamFrm->FFormColor = VarToStr(pGDC->Values[nRow][14]);
  602. pStreamFrm->FFormType = VarToStr(pGDC->Values[nRow][15]).ToIntDef(0);
  603. pStreamFrm->ShowModal();
  604. if (pStreamFrm->FSelected)
  605. {
  606. TStream *pImgStream = new TMemoryStream();
  607. try
  608. {
  609. void *p;
  610. Variant v;
  611. pStreamFrm->ImgForm->Picture->Bitmap->SaveToStream(pImgStream);
  612. int aBound[]={0, pImgStream->Size - 1};
  613. v = VarArrayCreate(aBound, 1, varByte);
  614. p = VarArrayLock(v);
  615. pImgStream->Position = 0;
  616. pImgStream->Read(p, pImgStream->Size);
  617. VarArrayUnlock(v);
  618. pGDC->Values[nRow][1] = v;
  619. }
  620. __finally
  621. {
  622. SAFE_DELETE(pImgStream);
  623. }
  624. pGDC->Values[nRow][20] = "300"; //스트리밍인경우 300 으로 고정, //pStreamFrm->FSymbLibNmbr;
  625. pGDC->Values[nRow][21] = pStreamFrm->FStreamAddr;
  626. }
  627. delete pStreamFrm;
  628. pStreamFrm = NULL;
  629. }
  630. #if 0
  631. else
  632. if (Sender->Tag == eSchTp_atmp)
  633. {
  634. // 대기환경 폼 관측소 설정
  635. TVMSM640M *pAtmpFrm = new TVMSM640M(this);
  636. pAtmpFrm->FVmsNmbr = EdVmsNmbr->Text;
  637. pAtmpFrm->FFormId = sFormId;
  638. pAtmpFrm->FVmsTypeCd = FVmsTypeCd;
  639. pAtmpFrm->FVmsWidth = FVmsWidth;
  640. pAtmpFrm->FVmsHeight = FVmsHeight;
  641. pAtmpFrm->FIfscId[0] = VarToStr(pGDC->Values[nRow][9]);
  642. pAtmpFrm->FFormColor = VarToStr(pGDC->Values[nRow][14]);
  643. pAtmpFrm->FFormType = VarToStr(pGDC->Values[nRow][15]).ToIntDef(0);
  644. pAtmpFrm->ShowModal();
  645. if (pAtmpFrm->FSelected)
  646. {
  647. TStream *pImgStream = new TMemoryStream();
  648. try
  649. {
  650. void *p;
  651. Variant v;
  652. pAtmpFrm->ImgForm->Picture->Bitmap->SaveToStream(pImgStream);
  653. int aBound[]={0, pImgStream->Size - 1};
  654. v = VarArrayCreate(aBound, 1, varByte);
  655. p = VarArrayLock(v);
  656. pImgStream->Position = 0;
  657. pImgStream->Read(p, pImgStream->Size);
  658. VarArrayUnlock(v);
  659. pGDC->Values[nRow][1] = v;
  660. }
  661. __finally
  662. {
  663. SAFE_DELETE(pImgStream);
  664. }
  665. pGDC->Values[nRow][ 9] = pAtmpFrm->FIfscId[0];
  666. }
  667. delete pAtmpFrm;
  668. pAtmpFrm = NULL;
  669. }
  670. #endif
  671. }
  672. //---------------------------------------------------------------------------
  673. void __fastcall TVMSM600M::BtnAllEditClick(TObject *Sender)
  674. {
  675. TcxButton *pBtn = (TcxButton*)Sender;
  676. //등록되어 있는 스케줄 폼을 전체 VMS에 편집하는 기능
  677. int nTag = PgVmsSch->Properties->ActivePage->Tag;
  678. if (nTag < 0 || nTag >= eSchTp_max)
  679. {
  680. Application->MessageBox(FrmLang->lblRegErr1->Caption.c_str(),//L"VMS 스케줄 일괄 관리\r\n알수 없는 스케줄 유형입니다.",
  681. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  682. return;
  683. }
  684. if (!FListSch[nTag]) return;
  685. TcxGridTableView *pTvList = FListSch[nTag];
  686. TcxGridDataController *pGDC;
  687. String sMode = "E";
  688. if (pBtn->Tag == 1)
  689. {
  690. sMode = "A"; //추가
  691. pTvList = FListFrm[nTag];
  692. }
  693. if (!pTvList) return;
  694. pGDC = pTvList->DataController;
  695. int nFormIdx = CMM_GetRecordIndex(pTvList);
  696. if (nFormIdx < 0)
  697. {
  698. Application->MessageBox(FrmLang->lblRegErr1->Caption.c_str(),//L"VMS 스케줄 일괄 관리\r\n등록되어 있는 스케줄 폼을 목록에서 먼저 선택하세요.",
  699. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  700. return;
  701. }
  702. String sSymbLibNmbr;
  703. String sStreamAddr;
  704. if (pBtn->Tag == 1)
  705. {
  706. sSymbLibNmbr = VarToStr(pGDC->Values[nFormIdx][3]);
  707. sStreamAddr = VarToStr(pGDC->Values[nFormIdx][4]);
  708. }
  709. else
  710. {
  711. sSymbLibNmbr = VarToStr(pGDC->Values[nFormIdx][20]);
  712. sStreamAddr = VarToStr(pGDC->Values[nFormIdx][21]);
  713. }
  714. String sFormId = VarToStr(pGDC->Values[nFormIdx][0]);
  715. TVmsSizeType *pVmsSizeType = APP_GetVmsSizeTypeObject(CbSizeType);
  716. if (pVmsSizeType == NULL)
  717. {
  718. Application->MessageBox(FrmLang->lblRegErr3->Caption.c_str(),//L"VMS 스케줄 일괄 관리\r\nVMS 유형을 알수 없습니다. VMS 크기 유형을 먼저 선택하세요.",
  719. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  720. return;
  721. }
  722. String sVmsType = pVmsSizeType->TypeCd;
  723. TVMSEDT0M *pFrmEdt = new TVMSEDT0M(this);
  724. pFrmEdt->FVmsTypeCd = sVmsType;
  725. pFrmEdt->FScheType = FVMS_SCH_TYPE;
  726. pFrmEdt->FScheFormType = String(nTag);
  727. pFrmEdt->FFormId = sFormId;
  728. pFrmEdt->FMode = sMode;
  729. pFrmEdt->FVmsNmbr = "";
  730. pFrmEdt->FSymbLibNmbr = sSymbLibNmbr;
  731. pFrmEdt->FStreamAddr = sStreamAddr;
  732. pFrmEdt->ShowModal();
  733. bool bOk = pFrmEdt->FSelected;
  734. delete pFrmEdt;
  735. pFrmEdt = NULL;
  736. if (bOk)
  737. {
  738. DisplayInfo();
  739. }
  740. VmsCtlrManager->LoadVmsFormUsage();
  741. FRAMEVmsSchList1->RefreshVmsFormUsage();
  742. }
  743. //---------------------------------------------------------------------------
  744. void __fastcall TVMSM600M::BtnSaveClick(TObject *Sender)
  745. {
  746. //작업한 스케줄 정보를 저장한다.
  747. if (EdVmsNmbr->Text.Trim().IsEmpty())
  748. {
  749. Application->MessageBox(lblErr2->Caption.c_str(),//L"VMS 자동 스케줄 관리\r\nVMS 목록에서 VMS를 먼저 선택한 후 작업을 진행하세요.",
  750. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  751. return;
  752. }
  753. bool bUpdate = true;
  754. String sVmsNmbr = EdVmsNmbr->Text.Trim();
  755. if (bUpdate)
  756. {
  757. String sMsg;
  758. sMsg = "VMS: " + sVmsNmbr;
  759. sMsg+= "\r\n" + lblErr3->Caption;//선택한 VMS의 자동 스케줄 정보를 저장하시겠습니까?";
  760. if (Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES) return;
  761. }
  762. try
  763. {
  764. ITSDb_GetConnection()->BeginTrans();
  765. DeleteVmsScenario(sVmsNmbr);
  766. for (int ii = 0; ii < eSchTp_max; ii++)
  767. {
  768. if (FListSch[ii])
  769. {
  770. //ShowMessage(String(ii) + " " + String(FListSch[ii]->Tag));
  771. SaveVmsScenario(sVmsNmbr, FListSch[ii]);
  772. }
  773. }
  774. }
  775. __finally
  776. {
  777. ITSDb_GetConnection()->CommitTrans();
  778. }
  779. Application->MessageBox(lblErr4->Caption.c_str(),//L"VMS 자동 스케줄 관리\r\nVMS 자동 스케줄 정보를 저장 하였습니다.",
  780. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  781. VmsCtlrManager->LoadVmsFormUsage();
  782. FRAMEVmsSchList1->RefreshVmsFormUsage();
  783. CMM_SetGridRow(FRAMEVmsSchList1->CxList, FRAMEVmsSchList1->TvList, sVmsNmbr, FRAMEVmsSchList1->Column01->Index);
  784. DisplayInfo();
  785. }
  786. //---------------------------------------------------------------------------
  787. bool __fastcall TVMSM600M::SaveVmsScenario(String AVmsNmbr, TcxGridTableView *AListSch)
  788. {
  789. bool bResult = false;
  790. String sQry;
  791. TADOQuery *pADO = NULL;
  792. TcxDataController *pGDC = AListSch->DataController;
  793. String sTypeCd = String(AListSch->Tag);
  794. sQry = "INSERT INTO TB_VMS_DSPL_SCH ( \r\n"
  795. " VMS_CTLR_NMBR, \r\n"
  796. " VMS_SCH_TYPE, \r\n"
  797. " VMS_SCH_FORM_TYPE, \r\n"
  798. " PHASE, \r\n"
  799. " VMS_FORM_ID, \r\n"
  800. " DSPL_STRT_HH, \r\n"
  801. " DSPL_END_HH, \r\n"
  802. " DSPL_HH, \r\n"
  803. " FRST_VMS_IFSC_ID, \r\n"
  804. " SECD_VMS_IFSC_ID, \r\n"
  805. " THIR_VMS_IFSC_ID, \r\n"
  806. " FOUR_VMS_IFSC_ID, \r\n"
  807. " FRST_IMG_IFSC_ID, \r\n"
  808. " SECD_IMG_IFSC_ID, \r\n"
  809. " THIR_IMG_IFSC_ID, \r\n"
  810. " FOUR_IMG_IFSC_ID, \r\n"
  811. " SYMB_LIB_NMBR, \r\n"
  812. " STRM_ADDR, \r\n"
  813. " USE_YN \r\n"
  814. " ) \r\n"
  815. " VALUES( \r\n"
  816. " :p01, :p02, :p03, \r\n"
  817. " :p04, :p05, :p06, \r\n"
  818. " :p07, :p08, :p09, \r\n"
  819. " :p10, :p11, :p12, \r\n"
  820. " :p13, :p14, :p15, \r\n"
  821. " :p16, :p17, :p18, \r\n"
  822. " :p19 \r\n"
  823. " ) \r\n";
  824. try
  825. {
  826. AListSch->BeginUpdate();
  827. pGDC->BeginUpdate();
  828. int nRows = pGDC->RecordCount;
  829. try
  830. {
  831. pADO = new TADOQuery(NULL);
  832. pADO->Close();
  833. pADO->Connection = ITSDb_GetConnection();
  834. ITSDb_SQLText(pADO, sQry);
  835. int ii;
  836. for (ii = 0; ii < nRows; ii++)
  837. {
  838. String sFormId = VarToStr(pGDC->Values[ii][ 0]);
  839. String sUseYn = VarToStr(pGDC->Values[ii][ 6]);
  840. if (sUseYn == "Y")
  841. {
  842. if (!CDSVmsFormManager->IsValid(sFormId))
  843. {
  844. pGDC->Values[ii][ 6] = "N";
  845. }
  846. }
  847. }
  848. for (ii = 0; ii < nRows; ii++)
  849. {
  850. String sFormId = VarToStr(pGDC->Values[ii][ 0]);
  851. String sDispHH = VarToStr(pGDC->Values[ii][ 3]);
  852. String sUseYn = VarToStr(pGDC->Values[ii][ 6]);
  853. String sStrTime = VarToStr(pGDC->Values[ii][ 7]);
  854. String sEndTime = VarToStr(pGDC->Values[ii][ 8]);
  855. String sIfscId1 = VarToStr(pGDC->Values[ii][ 9]);
  856. String sIfscId2 = VarToStr(pGDC->Values[ii][10]);
  857. String sIfscId3 = VarToStr(pGDC->Values[ii][11]);
  858. String sIfscId4 = VarToStr(pGDC->Values[ii][12]);
  859. String sImgIfscId1 = VarToStr(pGDC->Values[ii][16]);
  860. String sImgIfscId2 = VarToStr(pGDC->Values[ii][17]);
  861. String sImgIfscId3 = VarToStr(pGDC->Values[ii][18]);
  862. String sImgIfscId4 = VarToStr(pGDC->Values[ii][19]);
  863. String sSymbLibNmbr = VarToStr(pGDC->Values[ii][20]);
  864. String sStrmAddr = VarToStr(pGDC->Values[ii][21]);
  865. ITSDb_SQLBind(pADO, "p01", AVmsNmbr);
  866. ITSDb_SQLBind(pADO, "p02", FVMS_SCH_TYPE);
  867. ITSDb_SQLBind(pADO, "p03", sTypeCd);
  868. ITSDb_SQLBind(pADO, "p04", String(ii+1));
  869. ITSDb_SQLBind(pADO, "p05", sFormId);
  870. ITSDb_SQLBind(pADO, "p06", sStrTime);
  871. ITSDb_SQLBind(pADO, "p07", sEndTime);
  872. ITSDb_SQLBind(pADO, "p08", sDispHH);
  873. ITSDb_SQLBind(pADO, "p09", sIfscId1);
  874. ITSDb_SQLBind(pADO, "p10", sIfscId2);
  875. ITSDb_SQLBind(pADO, "p11", sIfscId3);
  876. ITSDb_SQLBind(pADO, "p12", sIfscId4);
  877. ITSDb_SQLBind(pADO, "p13", sImgIfscId1);
  878. ITSDb_SQLBind(pADO, "p14", sImgIfscId2);
  879. ITSDb_SQLBind(pADO, "p15", sImgIfscId3);
  880. ITSDb_SQLBind(pADO, "p16", sImgIfscId4);
  881. ITSDb_SQLBind(pADO, "p17", sSymbLibNmbr);
  882. ITSDb_SQLBind(pADO, "p18", sStrmAddr);
  883. ITSDb_SQLBind(pADO, "p19", sUseYn);
  884. pADO->ExecSQL();
  885. }
  886. bResult = true;
  887. }
  888. catch(EDatabaseError &E)
  889. {
  890. ITSDb_GetConnection()->RollbackTrans();
  891. DBERRORMSG("TVMSM600M::SaveVmsScenario", String(E.ClassName()), E.Message, sQry);
  892. throw Exception(String(E.ClassName()) + E.Message);
  893. }
  894. catch(Exception &e)
  895. {
  896. ITSDb_GetConnection()->RollbackTrans();
  897. DBERRORMSG("TVMSM600M::SaveVmsScenario", String(e.ClassName()), e.Message, sQry);
  898. throw Exception(String(e.ClassName()) + e.Message);
  899. }
  900. }
  901. __finally
  902. {
  903. if (pADO)
  904. {
  905. pADO->Close();
  906. delete pADO;
  907. }
  908. pGDC->EndUpdate();
  909. AListSch->EndUpdate();
  910. }
  911. return bResult;
  912. }
  913. //---------------------------------------------------------------------------
  914. bool __fastcall TVMSM600M::DeleteVmsScenario(String AVmsNmbr)
  915. {
  916. bool bResult = false;
  917. String sQry;
  918. TADOQuery *pADO = NULL;
  919. sQry = "DELETE TB_VMS_DSPL_SCH \r\n"
  920. " WHERE VMS_SCH_TYPE = :p01 \r\n"
  921. " AND VMS_CTLR_NMBR = :p02 \r\n";
  922. try
  923. {
  924. try
  925. {
  926. pADO = new TADOQuery(NULL);
  927. pADO->Close();
  928. pADO->Connection = ITSDb_GetConnection();
  929. ITSDb_SQLText(pADO, sQry);
  930. ITSDb_SQLBind(pADO, "p01", FVMS_SCH_TYPE);
  931. ITSDb_SQLBind(pADO, "p02", AVmsNmbr);
  932. pADO->ExecSQL();
  933. bResult = true;
  934. }
  935. catch(EDatabaseError &E)
  936. {
  937. ITSDb_GetConnection()->RollbackTrans();
  938. DBERRORMSG("TVMSM600M::DeleteVmsScenario", String(E.ClassName()), E.Message, sQry);
  939. throw Exception(String(E.ClassName()) + E.Message);
  940. }
  941. catch(Exception &e)
  942. {
  943. ITSDb_GetConnection()->RollbackTrans();
  944. DBERRORMSG("TVMSM600M::DeleteVmsScenario", String(e.ClassName()), e.Message, sQry);
  945. throw Exception(String(e.ClassName()) + e.Message);
  946. }
  947. }
  948. __finally
  949. {
  950. if (pADO)
  951. {
  952. pADO->Close();
  953. delete pADO;
  954. }
  955. }
  956. return bResult;
  957. }
  958. //---------------------------------------------------------------------------
  959. void __fastcall TVMSM600M::DrawTrafficScenarioForm()
  960. {
  961. TcxGridTableView *pGrid = FListSch[eSchTp_traffic];
  962. if (!pGrid) return;
  963. TcxDataController *pGDC = pGrid->DataController;
  964. try
  965. {
  966. pGrid->BeginUpdate();
  967. pGDC->BeginUpdate();
  968. int nRows = pGDC->RecordCount;
  969. try
  970. {
  971. for (int ii = 0; ii < nRows; ii++)
  972. {
  973. String sFormId = VarToStr(pGDC->Values[ii][0]);
  974. String sFormClr = VarToStr(pGDC->Values[ii][14]);
  975. int nFormType = VarToStr(pGDC->Values[ii][15]).ToIntDef(0);
  976. FIfscId[0] = VarToStr(pGDC->Values[ii][9]);
  977. FIfscId[1] = VarToStr(pGDC->Values[ii][10]);
  978. FIfscId[2] = VarToStr(pGDC->Values[ii][11]);
  979. FIfscId[3] = VarToStr(pGDC->Values[ii][12]);
  980. FIfscId[4] = VarToStr(pGDC->Values[ii][16]);
  981. FIfscId[5] = VarToStr(pGDC->Values[ii][17]);
  982. FIfscId[6] = VarToStr(pGDC->Values[ii][18]);
  983. FIfscId[7] = VarToStr(pGDC->Values[ii][19]);
  984. switch(nFormType)
  985. {
  986. case 11:// ' 소통상황(1단)
  987. case 12:// ' 소통상황(2단)
  988. case 13:// ' 소통상황(3단)
  989. case 14:// ' 소통상황(4단)
  990. if (LoadTrafficFormObjectInfo(sFormId, sFormClr, m_pEdtDesigner))
  991. {
  992. m_pEdtDesigner->GetVmsFormImage(ImgForm);
  993. TStream *pImgStream = new TMemoryStream();
  994. try
  995. {
  996. void *p;
  997. Variant v;
  998. ImgForm->Picture->Bitmap->SaveToStream(pImgStream);
  999. int aBound[]={0, pImgStream->Size - 1};
  1000. v = VarArrayCreate(aBound, 1, varByte);
  1001. p = VarArrayLock(v);
  1002. pImgStream->Position = 0;
  1003. pImgStream->Read(p, pImgStream->Size);
  1004. VarArrayUnlock(v);
  1005. pGDC->Values[ii][1] = v;
  1006. }
  1007. __finally
  1008. {
  1009. SAFE_DELETE(pImgStream);
  1010. }
  1011. }
  1012. break;
  1013. }
  1014. }
  1015. }
  1016. catch(Exception &e)
  1017. {
  1018. }
  1019. }
  1020. __finally
  1021. {
  1022. pGDC->EndUpdate();
  1023. pGrid->EndUpdate();
  1024. }
  1025. }
  1026. //---------------------------------------------------------------------------
  1027. void __fastcall TVMSM600M::DrawAtmpScenarioForm()
  1028. {
  1029. TcxGridTableView *pGrid = FListSch[eSchTp_atmp];
  1030. if (!pGrid) return;
  1031. TcxDataController *pGDC = pGrid->DataController;
  1032. try
  1033. {
  1034. pGrid->BeginUpdate();
  1035. pGDC->BeginUpdate();
  1036. int nRows = pGDC->RecordCount;
  1037. try
  1038. {
  1039. for (int ii = 0; ii < nRows; ii++)
  1040. {
  1041. String sFormId = VarToStr(pGDC->Values[ii][0]);
  1042. String sFormClr = VarToStr(pGDC->Values[ii][14]);
  1043. int nFormType = VarToStr(pGDC->Values[ii][15]).ToIntDef(0);
  1044. FIfscId[0] = VarToStr(pGDC->Values[ii][9]);
  1045. switch(nFormType)
  1046. {
  1047. case 90:// ' 소통상황(1단)
  1048. if (LoadTrafficFormObjectInfo(sFormId, sFormClr, m_pEdtDesigner))
  1049. {
  1050. m_pEdtDesigner->GetVmsFormImage(ImgForm);
  1051. TStream *pImgStream = new TMemoryStream();
  1052. try
  1053. {
  1054. void *p;
  1055. Variant v;
  1056. ImgForm->Picture->Bitmap->SaveToStream(pImgStream);
  1057. int aBound[]={0, pImgStream->Size - 1};
  1058. v = VarArrayCreate(aBound, 1, varByte);
  1059. p = VarArrayLock(v);
  1060. pImgStream->Position = 0;
  1061. pImgStream->Read(p, pImgStream->Size);
  1062. VarArrayUnlock(v);
  1063. pGDC->Values[ii][1] = v;
  1064. }
  1065. __finally
  1066. {
  1067. SAFE_DELETE(pImgStream);
  1068. }
  1069. }
  1070. break;
  1071. }
  1072. }
  1073. }
  1074. catch(Exception &e)
  1075. {
  1076. }
  1077. }
  1078. __finally
  1079. {
  1080. pGDC->EndUpdate();
  1081. pGrid->EndUpdate();
  1082. }
  1083. }
  1084. //---------------------------------------------------------------------------
  1085. bool __fastcall TVMSM600M::LoadTrafficFormObjectInfo(String AFormId, String ABkColor, TVmsFormDesigner *ADesigner)
  1086. {
  1087. ADesigner->Clear();
  1088. m_pEdtDesigner->BkColorCode = ABkColor;
  1089. String sQry;
  1090. TADOQuery *pADO = NULL;
  1091. sQry = "SELECT A.*, \r\n"
  1092. " C.VMS_FONT_NAME_NM, \r\n"
  1093. " B.IMAG_DATA AS SYMB_IMG, \r\n"
  1094. " B.SYMB_EXPL AS SYMB_IMG_NM, \r\n"
  1095. " D.VMS_FORM_TYPE_CD \r\n"
  1096. " FROM TB_VMS_FORM_OBJECT A, \r\n"
  1097. " TB_VMS_SYMB_LIB B, \r\n"
  1098. " TB_VMS_FONT_NAME C, \r\n"
  1099. " TB_VMS_FORM D \r\n"
  1100. " WHERE D.VMS_FORM_ID = :p01 \r\n"
  1101. " AND D.VMS_FORM_ID = A.VMS_FORM_ID \r\n"
  1102. " AND A.SYMB_LIB_NMBR = B.SYMB_LIB_NMBR(+) \r\n"
  1103. " AND A.VMS_FONT_NAME_CD = C.VMS_FONT_NAME_CD(+) \r\n"
  1104. " ORDER BY A.VMS_FORM_OBJECT_ID ASC \r\n";
  1105. try
  1106. {
  1107. try
  1108. {
  1109. pADO = new TADOQuery(NULL);
  1110. pADO->Close();
  1111. pADO->Connection = ITSDb_GetConnection();
  1112. ITSDb_SQLText(pADO, sQry);
  1113. ITSDb_SQLBind(pADO, "p01", AFormId);
  1114. ITSDb_SQLOpen(pADO);
  1115. int nDrawType;
  1116. String sObjKind;
  1117. for( ; !pADO->Eof; pADO->Next())
  1118. {
  1119. int nFormId = pADO->FieldByName("VMS_FORM_ID")->AsInteger;
  1120. int nObjId = pADO->FieldByName("VMS_FORM_OBJECT_ID")->AsInteger;
  1121. int nObjType = pADO->FieldByName("VMS_FORM_OBJECT_TYPE_CD")->AsInteger;
  1122. if (nObjType == 1 || //심볼
  1123. nObjType == 2 || //이미지
  1124. nObjType == 3 || //배경이미지
  1125. nObjType == 17 || //@소통정보이미지 (1열)
  1126. nObjType == 27 || //@소통정보이미지2(2열)
  1127. nObjType == 37 || //@소통정보이미지3(3열)
  1128. nObjType == 47 || //소통이미지4
  1129. nObjType == 200 || //동영상
  1130. nObjType == 300 || //스트리밍영상
  1131. nObjType == 406 || //@통합대기등급 이미지
  1132. nObjType == 407 || //@미세먼지등급 이미지
  1133. nObjType == 408 || //@초미세먼지등급 이미지
  1134. nObjType == 413 //@오존등급이미지
  1135. )
  1136. {
  1137. if (nObjType == 1) sObjKind = OBJKIND_IMAGEID; //Image Id
  1138. else sObjKind = OBJKIND_IMAGE; //Image
  1139. nDrawType = 1; //이미지그리기
  1140. }
  1141. else
  1142. {
  1143. sObjKind = OBJKIND_TEXT; //문자열
  1144. nDrawType = 0; //문자열그리기
  1145. }
  1146. //실재 맵핑된 구간의 정보를 표출하도록 한다.
  1147. int nBlinking = pADO->FieldByName("VMS_DSPL_BLINKING")->AsInteger;
  1148. int nPosX = pADO->FieldByName("VMS_DSPL_XCRDN")->AsInteger;
  1149. int nPosY = pADO->FieldByName("VMS_DSPL_YCRDN")->AsInteger;
  1150. TVmsFormObject *pObj = ADesigner->AddObject((VmsObjectDrawType)nDrawType);
  1151. if (!pObj) continue;
  1152. //11 , ' @구간명
  1153. //12 , ' @시점명
  1154. //13 , ' @종점명
  1155. //14 , ' @소통상황
  1156. //15 , ' @통행시간
  1157. //16 , ' @통행속도
  1158. //17 , ' @소통이미지
  1159. pObj->Text = pADO->FieldByName("VMS_DSPL_TXT")->AsString.Trim();
  1160. pObj->RunText = pObj->Text;
  1161. String sIfscId = "";
  1162. if (nObjType >= 11 && nObjType < 17)
  1163. sIfscId = FIfscId[0];
  1164. else
  1165. if (nObjType >= 21 && nObjType < 27)
  1166. sIfscId = FIfscId[1];
  1167. else
  1168. if (nObjType >= 31 && nObjType < 37)
  1169. sIfscId = FIfscId[2];
  1170. else
  1171. if (nObjType >= 41 && nObjType < 47)
  1172. sIfscId = FIfscId[3];
  1173. if (nObjType == 401)
  1174. sIfscId = FIfscId[0];
  1175. switch(nObjType)
  1176. {
  1177. case 17: sIfscId = FIfscId[4]; break;
  1178. case 27: sIfscId = FIfscId[5]; break;
  1179. case 37: sIfscId = FIfscId[6]; break;
  1180. case 47: sIfscId = FIfscId[7]; break;
  1181. }
  1182. if (sIfscId != "")
  1183. {
  1184. if (pADO->FieldByName("VMS_FORM_TYPE_CD")->AsInteger == 90)
  1185. {
  1186. TCDSAtmp *pAtmpObj = CDSAtmpManager->FLists.Find(sIfscId);
  1187. if (pAtmpObj)
  1188. {
  1189. pObj->RunText = pAtmpObj->VMS_DISP_NM;
  1190. }
  1191. }
  1192. else
  1193. {
  1194. TVmsIfsc *pIfscObj;
  1195. pIfscObj = VmsIfscManager->FLists.Find(sIfscId.ToIntDef(0));
  1196. if (pIfscObj)
  1197. {
  1198. switch(nObjType)
  1199. {
  1200. case 11: case 21: case 31: case 41:
  1201. pObj->RunText = pIfscObj->VMS_IFSC_NM;
  1202. break;
  1203. case 12: case 22: case 32: case 42:
  1204. pObj->RunText = pIfscObj->DSPL_STRT_NODE_NM;
  1205. break;
  1206. case 13: case 23: case 33: case 43:
  1207. pObj->RunText = pIfscObj->DSPL_END_NODE_NM;
  1208. break;
  1209. }
  1210. }
  1211. }
  1212. }
  1213. else
  1214. {
  1215. if (nObjType == 201)
  1216. {
  1217. }
  1218. else
  1219. if (nObjType == 301)
  1220. {
  1221. }
  1222. }
  1223. if (nObjType == 200 || nObjType == 300)
  1224. {
  1225. pObj->EditMode = false;
  1226. }
  1227. pObj->ObjSeq = nObjId;
  1228. pObj->ObjId = nObjId;
  1229. pObj->ObjKind = sObjKind;
  1230. pObj->Tag = pADO->FieldByName("VMS_IFSC_ID")->AsString;
  1231. pObj->ObjType = pADO->FieldByName("VMS_FORM_OBJECT_TYPE_CD")->AsString;
  1232. pObj->ObjSize = pADO->FieldByName("VMS_DSPL_SIZE")->AsInteger;
  1233. pObj->BkColorCode = pADO->FieldByName("VMS_DSPL_BKCOLOR")->AsString;
  1234. pObj->Blink = nBlinking == 1 ? true : false;
  1235. pObj->ImageId = pADO->FieldByName("SYMB_LIB_NMBR")->AsString;
  1236. if (pObj->ObjKind == OBJKIND_TEXT) // 문자열
  1237. {
  1238. int nFontBold = pADO->FieldByName("VMS_FONT_BOLD")->AsInteger;
  1239. pObj->FontName = pADO->FieldByName("VMS_FONT_NAME_NM")->AsString;
  1240. pObj->FontNameCode = pADO->FieldByName("VMS_FONT_NAME_CD")->AsString;
  1241. pObj->FontColorCode = pADO->FieldByName("VMS_FONT_COLR_CD")->AsString;
  1242. pObj->FontSize = pADO->FieldByName("VMS_FONT_SIZE")->AsInteger;
  1243. pObj->FontBold = nFontBold == 1 ? true : false;
  1244. pObj->TextAlign = pADO->FieldByName("VMS_FONT_ALIGN")->AsInteger;
  1245. pObj->SetSize(pADO->FieldByName("VMS_DSPL_WIDTH")->AsInteger, pADO->FieldByName("VMS_DSPL_HEIGHT")->AsInteger);
  1246. pObj->SetRuntimeText(pObj->RunText);
  1247. }
  1248. else //if (sObjKind == "1" || sObjKind == "2") // 이미지(1), 이미지 ID(2)
  1249. {
  1250. if (pObj->ObjKind == OBJKIND_IMAGEID)
  1251. {
  1252. pObj->Text = pADO->FieldByName("SYMB_LIB_NMBR")->AsString;
  1253. }
  1254. TStream *pStream = NULL;
  1255. pStream = pADO->CreateBlobStream(pADO->FieldByName("VMS_DSPL_FIGR"), bmRead);
  1256. try
  1257. {
  1258. if (pStream && pStream->Size > 0)
  1259. {
  1260. Graphics::TBitmap *Bitmap = pObj->GetBitmap();
  1261. pStream->Position = 0;
  1262. Bitmap->LoadFromStream(pStream);
  1263. pObj->SetSize(Bitmap->Width, Bitmap->Height);
  1264. }
  1265. }
  1266. __finally
  1267. {
  1268. SAFE_DELETE(pStream);
  1269. }
  1270. }
  1271. pObj->SetPos(nPosX, nPosY);
  1272. pObj->Show();
  1273. pObj->BringToFront();
  1274. }
  1275. }
  1276. catch(EDatabaseError &E)
  1277. {
  1278. DBERRORMSG("TVMSM600M::LoadTrafficFormObjectInfo", String(E.ClassName()), E.Message, sQry);
  1279. throw Exception(String(E.ClassName()) + E.Message);
  1280. }
  1281. catch(Exception &exception)
  1282. {
  1283. DBERRORMSG("TVMSM600M::LoadTrafficFormObjectInfo", String(exception.ClassName()), exception.Message, sQry);
  1284. throw Exception(String(exception.ClassName()) + exception.Message);
  1285. }
  1286. }
  1287. __finally
  1288. {
  1289. if (pADO)
  1290. {
  1291. pADO->Close();
  1292. delete pADO;
  1293. }
  1294. }
  1295. return true;
  1296. }
  1297. //---------------------------------------------------------------------------
  1298. void __fastcall TVMSM600M::DrawVideoStreamScenarioForm(int AFormScheType)
  1299. {
  1300. TcxGridTableView *pGrid = FListSch[AFormScheType];
  1301. if (!pGrid) return;
  1302. TcxDataController *pGDC = pGrid->DataController;
  1303. try
  1304. {
  1305. pGrid->BeginUpdate();
  1306. pGDC->BeginUpdate();
  1307. int nRows = pGDC->RecordCount;
  1308. try
  1309. {
  1310. for (int ii = 0; ii < nRows; ii++)
  1311. {
  1312. String sFormId = VarToStr(pGDC->Values[ii][0]);
  1313. String sFormClr = VarToStr(pGDC->Values[ii][14]);
  1314. int nFormType = VarToStr(pGDC->Values[ii][15]).ToIntDef(0);
  1315. String sSymbLibNmbr = VarToStr(pGDC->Values[ii][20]);
  1316. String sStreamAddr = VarToStr(pGDC->Values[ii][21]);
  1317. switch(nFormType)
  1318. {
  1319. case 70:// ' 동영상 Y
  1320. case 80:// ' 스트리밍영상 Y
  1321. if (LoadVideoStreamFormObjectInfo(sFormId, sFormClr, m_pEdtDesigner, sSymbLibNmbr, sStreamAddr))
  1322. {
  1323. m_pEdtDesigner->GetVmsFormImage(ImgForm);
  1324. TStream *pImgStream = new TMemoryStream();
  1325. try
  1326. {
  1327. void *p;
  1328. Variant v;
  1329. ImgForm->Picture->Bitmap->SaveToStream(pImgStream);
  1330. int aBound[]={0, pImgStream->Size - 1};
  1331. v = VarArrayCreate(aBound, 1, varByte);
  1332. p = VarArrayLock(v);
  1333. pImgStream->Position = 0;
  1334. pImgStream->Read(p, pImgStream->Size);
  1335. VarArrayUnlock(v);
  1336. pGDC->Values[ii][1] = v;
  1337. }
  1338. __finally
  1339. {
  1340. SAFE_DELETE(pImgStream);
  1341. }
  1342. }
  1343. break;
  1344. }
  1345. }
  1346. }
  1347. catch(Exception &e)
  1348. {
  1349. }
  1350. }
  1351. __finally
  1352. {
  1353. pGDC->EndUpdate();
  1354. pGrid->EndUpdate();
  1355. }
  1356. }
  1357. //---------------------------------------------------------------------------
  1358. bool __fastcall TVMSM600M::LoadVideoStreamFormObjectInfo(String AFormId, String ABkColor, TVmsFormDesigner *ADesigner, String ASymbLibNmbr, String AStreamAddr)
  1359. {
  1360. ADesigner->Clear();
  1361. m_pEdtDesigner->BkColorCode = ABkColor;
  1362. String sQry;
  1363. TADOQuery *pADO = NULL;
  1364. sQry = "SELECT A.*, \r\n"
  1365. " C.VMS_FONT_NAME_NM, \r\n"
  1366. " B.IMAG_DATA AS SYMB_IMG, \r\n"
  1367. " B.SYMB_EXPL AS SYMB_IMG_NM, \r\n"
  1368. " B.SYMB_FILE_NM AS SYMB_FILE_NM \r\n"
  1369. " FROM TB_VMS_FORM_OBJECT A, \r\n"
  1370. " TB_VMS_SYMB_LIB B, \r\n"
  1371. " TB_VMS_FONT_NAME C, \r\n"
  1372. " TB_VMS_FORM D \r\n"
  1373. " WHERE D.VMS_FORM_ID = :p01 \r\n"
  1374. " AND D.VMS_FORM_ID = A.VMS_FORM_ID \r\n"
  1375. " AND B.SYMB_LIB_NMBR = :p02 \r\n"
  1376. " AND A.VMS_FONT_NAME_CD = C.VMS_FONT_NAME_CD(+) \r\n"
  1377. " ORDER BY A.VMS_FORM_OBJECT_ID ASC \r\n";
  1378. try
  1379. {
  1380. try
  1381. {
  1382. pADO = new TADOQuery(NULL);
  1383. pADO->Close();
  1384. pADO->Connection = ITSDb_GetConnection();
  1385. ITSDb_SQLText(pADO, sQry);
  1386. ITSDb_SQLBind(pADO, "p01", AFormId);
  1387. ITSDb_SQLBind(pADO, "p02", ASymbLibNmbr);
  1388. ITSDb_SQLOpen(pADO);
  1389. int nDrawType;
  1390. String sObjKind;
  1391. for( ; !pADO->Eof; pADO->Next())
  1392. {
  1393. int nFormId = pADO->FieldByName("VMS_FORM_ID")->AsInteger;
  1394. int nObjId = pADO->FieldByName("VMS_FORM_OBJECT_ID")->AsInteger;
  1395. int nObjType = pADO->FieldByName("VMS_FORM_OBJECT_TYPE_CD")->AsInteger;
  1396. if (nObjType == 1 || //심볼
  1397. nObjType == 2 || //이미지
  1398. nObjType == 3 || //배경이미지
  1399. nObjType == 17 || //@소통정보이미지 (1열)
  1400. nObjType == 27 || //@소통정보이미지2(2열)
  1401. nObjType == 37 || //@소통정보이미지3(3열)
  1402. nObjType == 47 || //소통이미지4
  1403. nObjType == 200 || //동영상
  1404. nObjType == 300 || //스트리밍영상
  1405. nObjType == 406 || //@통합대기등급 이미지
  1406. nObjType == 407 || //@미세먼지등급 이미지
  1407. nObjType == 408 || //@초미세먼지등급 이미지
  1408. nObjType == 413 //@오존등급이미지
  1409. )
  1410. {
  1411. sObjKind = OBJKIND_IMAGEID; //Image Id
  1412. nDrawType = 1; //이미지그리기
  1413. }
  1414. else
  1415. {
  1416. sObjKind = OBJKIND_TEXT; //문자열
  1417. nDrawType = 0; //문자열그리기
  1418. }
  1419. int nBlinking = pADO->FieldByName("VMS_DSPL_BLINKING")->AsInteger;
  1420. int nPosX = pADO->FieldByName("VMS_DSPL_XCRDN")->AsInteger;
  1421. int nPosY = pADO->FieldByName("VMS_DSPL_YCRDN")->AsInteger;
  1422. TVmsFormObject *pObj = ADesigner->AddObject((VmsObjectDrawType)nDrawType);
  1423. if (!pObj) continue;
  1424. pObj->Text = pADO->FieldByName("SYMB_IMG_NM")->AsString.Trim();
  1425. if (AStreamAddr == "") pObj->RunText = pObj->Text;
  1426. else pObj->RunText = AStreamAddr; //pObj->Text;
  1427. pObj->EditMode = false;
  1428. pObj->ObjSeq = nObjId;
  1429. pObj->ObjId = nObjId;
  1430. pObj->ObjKind = sObjKind;
  1431. pObj->Tag = pADO->FieldByName("VMS_IFSC_ID")->AsString;
  1432. pObj->ObjType = pADO->FieldByName("VMS_FORM_OBJECT_TYPE_CD")->AsString;
  1433. pObj->ObjSize = pADO->FieldByName("VMS_DSPL_SIZE")->AsInteger;
  1434. pObj->BkColorCode = pADO->FieldByName("VMS_DSPL_BKCOLOR")->AsString;
  1435. pObj->Blink = nBlinking == 1 ? true : false;
  1436. pObj->ImageId = ASymbLibNmbr; //pADO->FieldByName("SYMB_LIB_NMBR")->AsString;
  1437. pObj->SetPos(nPosX, nPosY);
  1438. if (pObj->ObjKind == OBJKIND_TEXT) // 문자열
  1439. {
  1440. int nFontBold = pADO->FieldByName("VMS_FONT_BOLD")->AsInteger;
  1441. pObj->FontName = pADO->FieldByName("VMS_FONT_NAME_NM")->AsString;
  1442. pObj->FontNameCode = pADO->FieldByName("VMS_FONT_NAME_CD")->AsString;
  1443. pObj->FontColorCode = pADO->FieldByName("VMS_FONT_COLR_CD")->AsString;
  1444. pObj->FontSize = pADO->FieldByName("VMS_FONT_SIZE")->AsInteger;
  1445. pObj->FontBold = nFontBold == 1 ? true : false;
  1446. pObj->TextAlign = pADO->FieldByName("VMS_FONT_ALIGN")->AsInteger;
  1447. pObj->SetSize(pADO->FieldByName("VMS_DSPL_WIDTH")->AsInteger, pADO->FieldByName("VMS_DSPL_HEIGHT")->AsInteger);
  1448. pObj->SetRuntimeText(pObj->RunText);
  1449. }
  1450. else //if (sObjKind == "1" || sObjKind == "2") // 이미지(1), 이미지 ID(2)
  1451. {
  1452. if (pObj->ObjKind == OBJKIND_IMAGEID)
  1453. {
  1454. pObj->Text = pADO->FieldByName("SYMB_LIB_NMBR")->AsString;
  1455. }
  1456. TStream *pStream = NULL;
  1457. //pStream = pADO->CreateBlobStream(pADO->FieldByName("VMS_DSPL_FIGR"), bmRead);
  1458. pStream = pADO->CreateBlobStream(pADO->FieldByName("SYMB_IMG"), bmRead);
  1459. try
  1460. {
  1461. if (pStream && pStream->Size > 0)
  1462. {
  1463. Graphics::TBitmap *Bitmap = pObj->GetBitmap();
  1464. pStream->Position = 0;
  1465. Bitmap->LoadFromStream(pStream);
  1466. pObj->SetSize(Bitmap->Width, Bitmap->Height);
  1467. if (ASymbLibNmbr != "200" && ASymbLibNmbr != "300")
  1468. pObj->SetPos(0, 0);
  1469. }
  1470. }
  1471. __finally
  1472. {
  1473. SAFE_DELETE(pStream);
  1474. }
  1475. }
  1476. #if 0
  1477. switch(nObjType)
  1478. {
  1479. case 200: pObj->Text = ASymbLibNmbr; break;
  1480. case 201: pObj->Text = AStreamAddr; break;
  1481. case 300: pObj->Text = ASymbLibNmbr; break;
  1482. case 301: pObj->Text = AStreamAddr; break;
  1483. }
  1484. #endif
  1485. pObj->Show();
  1486. pObj->BringToFront();
  1487. }
  1488. }
  1489. catch(EDatabaseError &E)
  1490. {
  1491. DBERRORMSG("TVMSM600M::LoadTrafficFormObjectInfo", String(E.ClassName()), E.Message, sQry);
  1492. throw Exception(String(E.ClassName()) + E.Message);
  1493. }
  1494. catch(Exception &exception)
  1495. {
  1496. DBERRORMSG("TVMSM600M::LoadTrafficFormObjectInfo", String(exception.ClassName()), exception.Message, sQry);
  1497. throw Exception(String(exception.ClassName()) + exception.Message);
  1498. }
  1499. }
  1500. __finally
  1501. {
  1502. if (pADO)
  1503. {
  1504. pADO->Close();
  1505. delete pADO;
  1506. }
  1507. }
  1508. return true;
  1509. }
  1510. //---------------------------------------------------------------------------
  1511. void __fastcall TVMSM600M::LoadVmsScheduleInfo(String AVmsNmbr)
  1512. {
  1513. int ii;
  1514. String sQry;
  1515. TADOQuery *pADO = NULL;
  1516. for (ii = 0; ii < eSchTp_max; ii++)
  1517. {
  1518. if (FListSch[ii]) CMM_ClearGridTableView(FListSch[ii]);
  1519. }
  1520. sQry = "SELECT A.*, \r\n"
  1521. " B.VMS_FORM_IMAG, \r\n"
  1522. " B.VMS_TYPE_CD, \r\n"
  1523. " B.VMS_FORM_NM, \r\n"
  1524. " B.VMS_FORM_COLR_CD, \r\n"
  1525. " B.VMS_FORM_TYPE_CD \r\n"
  1526. " FROM TB_VMS_DSPL_SCH A, \r\n"
  1527. " TB_VMS_FORM B \r\n"
  1528. " WHERE A.VMS_SCH_TYPE = :p01 \r\n"
  1529. " AND A.VMS_CTLR_NMBR = :p02 \r\n"
  1530. " AND A.VMS_FORM_ID = B.VMS_FORM_ID \r\n"
  1531. // " AND B.VALID_YN = 'Y' \r\n"
  1532. " ORDER BY A.PHASE \r\n";
  1533. try
  1534. {
  1535. for (ii = 0; ii < eSchTp_max; ii++)
  1536. {
  1537. if (FListSch[ii]) FListSch[ii]->BeginUpdate();
  1538. }
  1539. TcxDataController *pDcSch;
  1540. int nRow;
  1541. try
  1542. {
  1543. int nRow;
  1544. pADO = new TADOQuery(NULL);
  1545. pADO->Close();
  1546. pADO->Connection = ITSDb_GetConnection();
  1547. ITSDb_SQLText(pADO, sQry);
  1548. ITSDb_SQLBind(pADO, "p01", FVMS_SCH_TYPE);
  1549. ITSDb_SQLBind(pADO, "p02", AVmsNmbr);
  1550. ITSDb_SQLOpen(pADO);
  1551. int nFormType;
  1552. for( ; !pADO->Eof; pADO->Next())
  1553. {
  1554. nFormType = pADO->FieldByName("VMS_SCH_FORM_TYPE")->AsInteger;
  1555. if (nFormType < eSchTp_traffic && nFormType >= eSchTp_max) continue;
  1556. if (!FListSch[nFormType]) continue;
  1557. pDcSch = FListSch[nFormType]->DataController;
  1558. nRow = pDcSch->AppendRecord();
  1559. String sStrDate = pADO->FieldByName("DSPL_STRT_HH")->AsString;
  1560. String sEndDate = pADO->FieldByName("DSPL_END_HH")->AsString;
  1561. pDcSch->Values[nRow][ 0] = pADO->FieldByName("VMS_FORM_ID")->AsString;
  1562. pDcSch->Values[nRow][ 1] = pADO->FieldByName("VMS_FORM_IMAG")->AsVariant;
  1563. pDcSch->Values[nRow][ 2] = pADO->FieldByName("FRST_VMS_IFSC_ID")->AsString;
  1564. pDcSch->Values[nRow][ 3] = pADO->FieldByName("DSPL_HH")->AsString;
  1565. pDcSch->Values[nRow][ 4] = ITSUtil_FormatStr(sStrDate, STR_HHNN);;
  1566. pDcSch->Values[nRow][ 5] = ITSUtil_FormatStr(sEndDate, STR_HHNN);;
  1567. pDcSch->Values[nRow][ 6] = pADO->FieldByName("USE_YN")->AsString;
  1568. pDcSch->Values[nRow][ 7] = sStrDate;
  1569. pDcSch->Values[nRow][ 8] = sEndDate;
  1570. pDcSch->Values[nRow][ 9] = pADO->FieldByName("FRST_VMS_IFSC_ID")->AsString;
  1571. pDcSch->Values[nRow][10] = pADO->FieldByName("SECD_VMS_IFSC_ID")->AsString;
  1572. pDcSch->Values[nRow][11] = pADO->FieldByName("THIR_VMS_IFSC_ID")->AsString;
  1573. pDcSch->Values[nRow][12] = pADO->FieldByName("FOUR_VMS_IFSC_ID")->AsString;
  1574. pDcSch->Values[nRow][13] = pADO->FieldByName("VMS_TYPE_CD")->AsString;
  1575. pDcSch->Values[nRow][14] = pADO->FieldByName("VMS_FORM_COLR_CD")->AsString;
  1576. pDcSch->Values[nRow][15] = pADO->FieldByName("VMS_FORM_TYPE_CD")->AsString;
  1577. pDcSch->Values[nRow][16] = pADO->FieldByName("FRST_IMG_IFSC_ID")->AsString;
  1578. pDcSch->Values[nRow][17] = pADO->FieldByName("SECD_IMG_IFSC_ID")->AsString;
  1579. pDcSch->Values[nRow][18] = pADO->FieldByName("THIR_IMG_IFSC_ID")->AsString;
  1580. pDcSch->Values[nRow][19] = pADO->FieldByName("FOUR_IMG_IFSC_ID")->AsString;
  1581. pDcSch->Values[nRow][20] = pADO->FieldByName("SYMB_LIB_NMBR")->AsString;
  1582. pDcSch->Values[nRow][21] = pADO->FieldByName("STRM_ADDR")->AsString;
  1583. }
  1584. }
  1585. catch(EDatabaseError &E)
  1586. {
  1587. DBERRORMSG("TVMSM600M::LoadVmsScheduleInfo", String(E.ClassName()), E.Message, sQry);
  1588. throw Exception(String(E.ClassName()) + E.Message);
  1589. }
  1590. catch(Exception &e)
  1591. {
  1592. DBERRORMSG("TVMSM600M::LoadVmsScheduleInfo", String(e.ClassName()), e.Message, sQry);
  1593. throw Exception(String(e.ClassName()) + e.Message);
  1594. }
  1595. }
  1596. __finally
  1597. {
  1598. if (pADO)
  1599. {
  1600. pADO->Close();
  1601. delete pADO;
  1602. }
  1603. for (ii = 0; ii < eSchTp_max; ii++)
  1604. {
  1605. if (FListSch[ii]) FListSch[ii]->EndUpdate();
  1606. }
  1607. }
  1608. }
  1609. //---------------------------------------------------------------------------
  1610. bool __fastcall TVMSM600M::LoadVmsFormList(String AFormSizeCd)
  1611. {
  1612. int ii;
  1613. for (ii = 0; ii < eSchTp_max; ii++)
  1614. {
  1615. if (FListFrm[ii]) CMM_ClearGridTableView(FListFrm[ii]);
  1616. }
  1617. String sQry;
  1618. TADOQuery *pADO = NULL;
  1619. //스케쥴에 등록할 폼은 유효성이 Y 인 것만 목록에 표출한다.
  1620. sQry = "SELECT A.* \r\n"
  1621. " FROM TB_VMS_FORM A \r\n"
  1622. " WHERE A.VMS_TYPE_CD = :p01 \r\n"
  1623. " AND A.VALID_YN = 'Y' \r\n"
  1624. " ORDER BY A.VMS_FORM_ID \r\n";
  1625. try
  1626. {
  1627. for (ii = 0; ii < eSchTp_max; ii++)
  1628. {
  1629. if (FListFrm[ii]) FListFrm[ii]->BeginUpdate();
  1630. }
  1631. TcxDataController *pGDC;
  1632. int nRow;
  1633. try
  1634. {
  1635. pADO = new TADOQuery(NULL);
  1636. pADO->Close();
  1637. pADO->Connection = ITSDb_GetConnection();
  1638. ITSDb_SQLText(pADO, sQry);
  1639. ITSDb_SQLBind(pADO, "p01", AFormSizeCd);
  1640. ITSDb_SQLOpen(pADO);
  1641. int nFormTypeCd, nFormIdx;
  1642. for( ; !pADO->Eof; pADO->Next())
  1643. {
  1644. nFormTypeCd = pADO->FieldByName("VMS_FORM_TYPE_CD")->AsInteger;
  1645. nFormIdx = VmsGetFormTypeIdx(nFormTypeCd);
  1646. if (nFormIdx < 0) continue;
  1647. if (!FListFrm[nFormIdx]) continue;
  1648. pGDC = FListFrm[nFormIdx]->DataController;
  1649. nRow = pGDC->AppendRecord();
  1650. pGDC->Values[nRow][0] = pADO->FieldByName("VMS_FORM_ID")->AsString;
  1651. pGDC->Values[nRow][1] = pADO->FieldByName("VMS_FORM_IMAG")->AsVariant;
  1652. pGDC->Values[nRow][2] = String(nFormTypeCd);
  1653. pGDC->Values[nRow][9] = pADO->FieldByName("VMS_FORM_NM")->AsString;
  1654. if (nFormTypeCd == 70)
  1655. {
  1656. pGDC->Values[nRow][3] = "200"; //동영상기본이미지번호
  1657. }
  1658. else
  1659. if (nFormTypeCd == 80)
  1660. {
  1661. pGDC->Values[nRow][3] = "300"; //스트리밍기본이미지번호
  1662. }
  1663. else
  1664. {
  1665. pGDC->Values[nRow][3] = "";
  1666. }
  1667. pGDC->Values[nRow][4] = "";
  1668. }
  1669. }
  1670. catch(EDatabaseError &E)
  1671. {
  1672. DBERRORMSG("TVMSM600M::LoadVmsFormList", String(E.ClassName()), E.Message, sQry);
  1673. throw Exception(String(E.ClassName()) + E.Message);
  1674. }
  1675. catch(Exception &e)
  1676. {
  1677. DBERRORMSG("TVMSM600M::LoadVmsFormList", String(e.ClassName()), e.Message, sQry);
  1678. throw Exception(String(e.ClassName()) + e.Message);
  1679. }
  1680. }
  1681. __finally
  1682. {
  1683. if (pADO)
  1684. {
  1685. pADO->Close();
  1686. delete pADO;
  1687. }
  1688. for (ii = 0; ii < eSchTp_max; ii++)
  1689. {
  1690. if (FListFrm[ii]) FListFrm[ii]->EndUpdate();
  1691. }
  1692. }
  1693. return true;
  1694. }
  1695. //---------------------------------------------------------------------------