VMSM800MF.cpp 66 KB

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