VMSM600MF.cpp 91 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587
  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 "VMSM650MF.h"
  18. #include "VMSM660MF.h"
  19. #include "VMSSEL0MF.h"
  20. #include "VMSEDT0MF.h"
  21. //---------------------------------------------------------------------------
  22. #pragma package(smart_init)
  23. #pragma link "cxButtons"
  24. #pragma link "cxCalendar"
  25. #pragma link "cxContainer"
  26. #pragma link "cxControls"
  27. #pragma link "cxDropDownEdit"
  28. #pragma link "cxEdit"
  29. #pragma link "cxGraphics"
  30. #pragma link "cxGroupBox"
  31. #pragma link "cxLabel"
  32. #pragma link "cxLookAndFeelPainters"
  33. #pragma link "cxLookAndFeels"
  34. #pragma link "cxMaskEdit"
  35. #pragma link "cxPC"
  36. #pragma link "cxPCdxBarPopupMenu"
  37. #pragma link "cxSpinEdit"
  38. #pragma link "cxSplitter"
  39. #pragma link "cxTextEdit"
  40. #pragma link "cxTimeEdit"
  41. #pragma link "dxSkinBlack"
  42. #pragma link "dxSkinBlue"
  43. #pragma link "dxSkinCaramel"
  44. #pragma link "dxSkinCoffee"
  45. #pragma link "dxSkinDarkRoom"
  46. #pragma link "dxSkinDarkSide"
  47. #pragma link "dxSkinFoggy"
  48. #pragma link "dxSkinGlassOceans"
  49. #pragma link "dxSkiniMaginary"
  50. #pragma link "dxSkinLilian"
  51. #pragma link "dxSkinLiquidSky"
  52. #pragma link "dxSkinLondonLiquidSky"
  53. #pragma link "dxSkinMcSkin"
  54. #pragma link "dxSkinMoneyTwins"
  55. #pragma link "dxSkinOffice2007Black"
  56. #pragma link "dxSkinOffice2007Blue"
  57. #pragma link "dxSkinOffice2007Green"
  58. #pragma link "dxSkinOffice2007Pink"
  59. #pragma link "dxSkinOffice2007Silver"
  60. #pragma link "dxSkinOffice2010Black"
  61. #pragma link "dxSkinOffice2010Blue"
  62. #pragma link "dxSkinOffice2010Silver"
  63. #pragma link "dxSkinsCore"
  64. #pragma link "dxSkinscxPCPainter"
  65. #pragma link "dxSkinSeven"
  66. #pragma link "dxSkinSharp"
  67. #pragma link "dxSkinSilver"
  68. #pragma link "dxSkinStardust"
  69. #pragma link "cxRadioGroup"
  70. #pragma link "cxClasses"
  71. #pragma link "cxCustomData"
  72. #pragma link "cxData"
  73. #pragma link "cxDataStorage"
  74. #pragma link "cxDBData"
  75. #pragma link "cxFilter"
  76. #pragma link "cxGrid"
  77. #pragma link "cxGridCustomTableView"
  78. #pragma link "cxGridCustomView"
  79. #pragma link "cxGridDBTableView"
  80. #pragma link "cxGridLevel"
  81. #pragma link "cxGridTableView"
  82. #pragma link "cxStyles"
  83. #pragma link "cxCheckBox"
  84. #pragma link "cxImage"
  85. #pragma link "cxButtonEdit"
  86. #pragma link "cxBlobEdit"
  87. #pragma link "cxColorComboBox"
  88. #pragma link "cxCalc"
  89. #pragma link "VmsDesignerF"
  90. #pragma link "FRAME_VmsSchListF"
  91. #pragma resource "*.dfm"
  92. TVMSM600M *VMSM600M = NULL;
  93. //---------------------------------------------------------------------------
  94. __fastcall TVMSM600M::TVMSM600M(TComponent* Owner)
  95. : TForm(Owner)
  96. {
  97. LangTrans->Translate(this, ITSDb_GetConnection());
  98. ITSSkin_Load(this);
  99. CMM_LoadForm(g_sFormsDir, this);
  100. FUpdate= false;
  101. FTitle = Caption;//"VMS 자동 스케줄 관리";
  102. FListSymb = new TList;
  103. EditMode = false;
  104. FVMS_SCH_TYPE = "A"; //자동스케쥴
  105. FEN_DSPL_SCH_TYPE = enScheduleAuto;
  106. FRAMEVmsSchList1->PnlTop->Visible = false;
  107. FRAMEVmsSchList1->PnlBottom->Visible = false;
  108. FRAMEVmsSchList1->ColAuto->Visible = true;
  109. FRAMEVmsSchList1->ColFix->Visible = false;
  110. FRAMEVmsSchList1->ColBase->Visible = false;
  111. FRAMEVmsSchList1->FEN_DSPL_SCH_TYPE = FEN_DSPL_SCH_TYPE;
  112. FVmsHeight = 64;
  113. for (int ii = 0; ii < eSchTp_max; ii++)
  114. {
  115. FButtonAdd[ii] = (TcxButton*)FindComponent("BtnListAdd"+IntToStr(ii));
  116. FButtonDel[ii] = (TcxButton*)FindComponent("BtnListDelete"+IntToStr(ii));
  117. if (FButtonAdd[ii]) FButtonAdd[ii]->Left = 4;
  118. if (FButtonDel[ii]) FButtonDel[ii]->Left = 4;
  119. FTabSheet[ii] = (TcxTabSheet*)FindComponent("TabSheet"+IntToStr(ii));
  120. FListFrm[ii] = (TcxGridTableView*)FindComponent("TvForm"+IntToStr(ii));
  121. FLabel[ii] = (TcxLabel*)FrmLang->FindComponent("lblSch"+IntToStr(ii));
  122. }
  123. PgVmsSch->Properties->ActivePage = TabSheet0;
  124. //eSchTp_incident = 1, //1:돌발,
  125. if (FTabSheet[eSchTp_incident])
  126. {
  127. FTabSheet[eSchTp_incident]->TabVisible = false;
  128. FTabSheet[eSchTp_incident]->Visible = false;
  129. }
  130. //eSchTp_gongsa = 2, //2:공사행사,
  131. if (FTabSheet[eSchTp_gongsa])
  132. {
  133. FTabSheet[eSchTp_gongsa]->TabVisible = false;
  134. FTabSheet[eSchTp_gongsa]->Visible = false;
  135. }
  136. // eSchTp_deture
  137. if (FTabSheet[eSchTp_deture])
  138. {
  139. FTabSheet[eSchTp_deture]->TabVisible = false;
  140. FTabSheet[eSchTp_deture]->Visible = false;
  141. }
  142. // eSchTp_congest
  143. if (FTabSheet[eSchTp_congest])
  144. {
  145. FTabSheet[eSchTp_congest]->TabVisible = false;
  146. FTabSheet[eSchTp_congest]->Visible = false;
  147. }
  148. // eSchTp_safe
  149. if (FTabSheet[eSchTp_safe])
  150. {
  151. FTabSheet[eSchTp_safe]->TabVisible = false;
  152. FTabSheet[eSchTp_safe]->Visible = false;
  153. }
  154. #if 1
  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. #endif
  168. // eSchTp_atmp
  169. if (FTabSheet[eSchTp_atmp])
  170. {
  171. FTabSheet[eSchTp_atmp]->TabVisible = false;
  172. FTabSheet[eSchTp_atmp]->Visible = false;
  173. }
  174. // eSchTp_park
  175. if (FTabSheet[eSchTp_park])
  176. {
  177. #ifdef USE_PARK
  178. FTabSheet[eSchTp_park]->TabVisible = true;
  179. FTabSheet[eSchTp_park]->Visible = true;
  180. #else
  181. FTabSheet[eSchTp_park]->TabVisible = false;
  182. FTabSheet[eSchTp_park]->Visible = false;
  183. #endif
  184. }
  185. InitTcxList(TvGrid0);
  186. for (int ii = 0; ii < eSchTp_max; ii++)
  187. {
  188. if (FTabSheet[ii] && (FTabSheet[ii]->TabVisible == false))
  189. {
  190. FListFrm[ii] = NULL;
  191. }
  192. if (FListFrm[ii]) InitTcxList(FListFrm[ii]);
  193. }
  194. #if 0
  195. BtnSchWeek->Visible = true;
  196. #else
  197. BtnSchWeek->Visible = false;
  198. #endif
  199. }
  200. //---------------------------------------------------------------------------
  201. void __fastcall TVMSM600M::InitTcxList(TcxGridTableView *AView)
  202. {
  203. AView->OptionsView->DataRowHeight = 0;
  204. AView->OptionsView->CellAutoHeight = true;
  205. AView->OptionsView->Indicator = false;
  206. AView->OptionsCustomize->ColumnMoving = false;
  207. AView->OptionsCustomize->ColumnSorting = false;
  208. AView->Columns[0]->Width = 40;
  209. AView->Columns[0]->Options->HorzSizing = false;
  210. AView->Columns[1]->Width = 330;
  211. }
  212. //---------------------------------------------------------------------------
  213. void __fastcall TVMSM600M::CommClose()
  214. {
  215. try
  216. {
  217. if (m_pEdtDesigner)
  218. {
  219. delete m_pEdtDesigner;
  220. m_pEdtDesigner = NULL;
  221. }
  222. APP_DelVmsSizeCombo(CbSizeType);
  223. ClearSymbloList();
  224. SAFE_DELETE(FListSymb);
  225. CMM_SaveForm(g_sFormsDir, this);
  226. }
  227. catch(...)
  228. {
  229. }
  230. }
  231. //---------------------------------------------------------------------------
  232. void __fastcall TVMSM600M::FormCreate(TObject *Sender)
  233. {
  234. m_pEdtDesigner = new TVmsFormDesigner(PnlEditForm);
  235. FOR_STL(TCDSFontColor*, pObj, CDSFontManager->FColors)
  236. {
  237. m_pEdtDesigner->InitFontColor(pObj->VMS_FONT_COLR_CD, (TColor)pObj->VMS_FONT_COLR_VAL);
  238. }
  239. }
  240. //---------------------------------------------------------------------------
  241. void __fastcall TVMSM600M::FormShow(TObject *Sender)
  242. {
  243. Refresh();
  244. FormInit();
  245. ChangeEditMode(1);
  246. TmrShow->Enabled = true;
  247. }
  248. //---------------------------------------------------------------------------
  249. void __fastcall TVMSM600M::FormInit()
  250. {
  251. TvGrid0->OptionsView->NoDataToDisplayInfoText = FrmLang->lblNoSchedule->Caption;
  252. for (int ii = 0; ii < eSchTp_max; ii++)
  253. {
  254. if (FListFrm[ii]) FListFrm[ii]->OptionsView->NoDataToDisplayInfoText = FrmLang->lblNoForm->Caption;//"<등록되어 있는 폼 정보가 없습니다>";
  255. }
  256. //VMS사이즈
  257. APP_FillVmsSizeType(CbSizeType, false);
  258. VmsCtlrManager->LoadVmsFormUsage();
  259. FRAMEVmsSchList1->RefreshVmsFormUsage();
  260. FNewDb = false;
  261. }
  262. //---------------------------------------------------------------------------
  263. void __fastcall TVMSM600M::TmrShowTimer(TObject *Sender)
  264. {
  265. TmrShow->Enabled = false;
  266. }
  267. //---------------------------------------------------------------------------
  268. void __fastcall TVMSM600M::BtnCloseClick(TObject *Sender)
  269. {
  270. Close();
  271. }
  272. //---------------------------------------------------------------------------
  273. void __fastcall TVMSM600M::FormClose(TObject *Sender, TCloseAction &Action)
  274. {
  275. CommClose();
  276. VMSM600M = NULL;
  277. Action = caFree;
  278. }
  279. //---------------------------------------------------------------------------
  280. void __fastcall TVMSM600M::FormCloseQuery(TObject *Sender, bool &CanClose)
  281. {
  282. if (FUpdate)
  283. {
  284. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_14, 0);
  285. }
  286. }
  287. //---------------------------------------------------------------------------
  288. void __fastcall TVMSM600M::ChangeEditMode(int AEdit)
  289. {
  290. }
  291. //---------------------------------------------------------------------------
  292. void __fastcall TVMSM600M::ClearSymbloList()
  293. {
  294. for(int ii = 0; ii < FListSymb->Count; ii++)
  295. {
  296. Graphics::TBitmap *bitmap = (Graphics::TBitmap *)FListSymb->Items[ii];
  297. delete bitmap;
  298. }
  299. FListSymb->Clear();
  300. }
  301. //---------------------------------------------------------------------------
  302. void __fastcall TVMSM600M::FRAMEVmsSchList1TvListCellDblClick(TcxCustomGridTableView *Sender,
  303. TcxGridTableDataCellViewInfo *ACellViewInfo, TMouseButton AButton,
  304. TShiftState AShift, bool &AHandled)
  305. {
  306. if (!ACellViewInfo) return;
  307. DisplayInfo();
  308. }
  309. //---------------------------------------------------------------------------
  310. void __fastcall TVMSM600M::FRAMEVmsSchList1TvListFocusedRecordChanged(TcxCustomGridTableView *Sender,
  311. TcxCustomGridRecord *APrevFocusedRecord, TcxCustomGridRecord *AFocusedRecord,
  312. bool ANewItemRecordFocusingChanged)
  313. {
  314. if (!AFocusedRecord) return;
  315. DisplayInfo();
  316. }
  317. //---------------------------------------------------------------------------
  318. void __fastcall TVMSM600M::CbSizeTypePropertiesChange(TObject *Sender)
  319. {
  320. BtnSearchClick(NULL);
  321. }
  322. //---------------------------------------------------------------------------
  323. void __fastcall TVMSM600M::BtnSearchClick(TObject *Sender)
  324. {
  325. RefreshData();
  326. EdFocus->SetFocus();
  327. ChangeEditMode(1);
  328. }
  329. //---------------------------------------------------------------------------
  330. void __fastcall TVMSM600M::RefreshData()
  331. {
  332. FormClear();
  333. TVmsSizeType *pVmsSizeType = APP_GetVmsSizeTypeObject(CbSizeType);
  334. if (pVmsSizeType == NULL) return;
  335. FVmsTypeCd = pVmsSizeType->TypeCd;
  336. FVmsWidth = pVmsSizeType->Width;
  337. FVmsHeight = pVmsSizeType->Height;
  338. PnlEdtBack->Width = FVmsWidth+4;
  339. PnlEdtBack->Height= FVmsHeight+4;
  340. m_pEdtDesigner->Clear();
  341. m_pEdtDesigner->SizeType = FVmsTypeCd;
  342. m_pEdtDesigner->SetSize(FVmsWidth, FVmsHeight);
  343. m_pEdtDesigner->SetPos(0, 0);
  344. m_pEdtDesigner->BkColorCode = "0";
  345. m_pEdtDesigner->EditMode = true;
  346. m_pEdtDesigner->Show();
  347. FRAMEVmsSchList1->UpdateList(FVmsTypeCd);
  348. LoadVmsFormList(FVmsTypeCd);
  349. ChkAutoWidthPropertiesChange((TObject*)ChkAutoWidth);
  350. }
  351. //---------------------------------------------------------------------------
  352. void __fastcall TVMSM600M::FormClear()
  353. {
  354. FSelIdx = -1;
  355. EdVmsNmbr->Clear();
  356. GrpSchedule->Caption = lblTitle->Caption;//"▶ 자동 스케줄 설정";
  357. FNewDb = false;
  358. }
  359. //---------------------------------------------------------------------------
  360. void __fastcall TVMSM600M::DisplayInfo()
  361. {
  362. FormClear();
  363. FSelIdx = CMM_GetRecordIndex(FRAMEVmsSchList1->TvList);
  364. if (FSelIdx < 0) return;
  365. TcxDataController *pGDC = FRAMEVmsSchList1->TvList->DataController;
  366. String sVmsNmbr = VarToStr(pGDC->Values[FSelIdx][FRAMEVmsSchList1->Column01->Index]);
  367. EdVmsNmbr->Text = sVmsNmbr;
  368. GrpSchedule->Caption = lblTitle->Caption + " (" + VarToStr(pGDC->Values[FSelIdx][FRAMEVmsSchList1->Column02->Index]) + ": " + VarToStr(pGDC->Values[FSelIdx][FRAMEVmsSchList1->Column03->Index]) + ")";
  369. LoadVmsScheduleInfo(sVmsNmbr);
  370. DrawTrafficScenarioForm();
  371. //DrawVideoStreamScenarioForm(eSchTp_video);
  372. //DrawVideoStreamScenarioForm(eSchTp_stream);
  373. //DrawAtmpScenarioForm();
  374. TVmsCtlr *pObj = VmsCtlrManager->FLists.Find(sVmsNmbr);
  375. if (pObj)
  376. {
  377. PSCHEDULE_USAGE Use = &pObj->FormCnt[FEN_DSPL_SCH_TYPE];
  378. #if 0
  379. for (int ii = 0; ii < eSchTp_max; ii++)
  380. {
  381. if (FTabSheet[ii] && FLabel[ii])
  382. {
  383. FTabSheet[ii]->Caption = " " + FLabel[ii]->Caption + " - " + String(Use->Use[ii]) + "/" + String(Use->Total[ii]) + " ";
  384. }
  385. }
  386. #endif
  387. }
  388. ChangeEditMode(3);
  389. }
  390. //---------------------------------------------------------------------------
  391. void __fastcall TVMSM600M::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 TVMSM600M::BtnListAdd0Click(TObject *Sender)
  409. {
  410. String sUse = "Y";
  411. String sTime= "4";
  412. bool bCurrDay = true;
  413. TcxButton *pBtn = (TcxButton*)Sender;
  414. int nTag = pBtn->Tag;
  415. if (nTag < 0 || nTag >= eSchTp_max) return;
  416. int nSelIdx = CMM_GetRecordIndex(FRAMEVmsSchList1->TvList);
  417. if (nSelIdx < 0) return;
  418. if (!FListFrm[nTag]) return;
  419. TcxGridDataController *pDcFrm = FListFrm[nTag]->DataController;
  420. TcxGridDataController *pDcSch = TvGrid0->DataController;
  421. int nFormIdx = CMM_GetRecordIndex(FListFrm[nTag]);
  422. if (nFormIdx < 0) return;
  423. if (nTag == eSchTp_traffic ||
  424. nTag == eSchTp_congest ||
  425. nTag == eSchTp_incident ||
  426. nTag == eSchTp_gongsa ||
  427. nTag == eSchTp_safe ||
  428. nTag == eSchTp_atmp ||
  429. nTag == eSchTp_park)
  430. {
  431. bCurrDay = false;
  432. }
  433. if (nTag == eSchTp_video || nTag == eSchTp_stream)
  434. {
  435. sUse = "N";
  436. }
  437. if (nTag == eSchTp_video)
  438. {
  439. sTime= "0";
  440. }
  441. String sStrDate = "";
  442. String sEndDate = "";
  443. bool bSelected= false;
  444. TVMSSEL0M *pSelDate = new TVMSSEL0M(this);
  445. pSelDate->FCurrDay = bCurrDay;
  446. pSelDate->ShowModal();
  447. bSelected = pSelDate->FSelected;
  448. sStrDate = pSelDate->FStrTime;
  449. sEndDate = pSelDate->FEndTime;
  450. delete pSelDate;
  451. pSelDate = NULL;
  452. if (!bSelected) return;
  453. int nRow = pDcSch->AppendRecord();
  454. pDcSch->Values[nRow][Col00->Index] = VarToStr(pDcFrm->Values[nFormIdx][0]);
  455. pDcSch->Values[nRow][Col01->Index] = (pDcFrm->Values[nFormIdx][1]); //이미지데이터임
  456. pDcSch->Values[nRow][Col03->Index] = sTime;
  457. pDcSch->Values[nRow][Col04->Index] = ITSUtil_FormatStr(sStrDate, STR_HHNN);;
  458. pDcSch->Values[nRow][Col05->Index] = ITSUtil_FormatStr(sEndDate, STR_HHNN);;
  459. pDcSch->Values[nRow][Col06->Index] = sUse;
  460. pDcSch->Values[nRow][Col07->Index] = sStrDate;
  461. pDcSch->Values[nRow][Col08->Index] = sEndDate;
  462. pDcSch->Values[nRow][Col15->Index] = VarToStr(pDcFrm->Values[nFormIdx][2]);
  463. pDcSch->Values[nRow][Col20->Index] = VarToStr(pDcFrm->Values[nFormIdx][3]);
  464. pDcSch->Values[nRow][Col21->Index] = VarToStr(pDcFrm->Values[nFormIdx][4]);
  465. pDcSch->Values[nRow][Col25->Index] = "Y"; //정체표출
  466. String sSchType = "교통";
  467. switch(nTag)
  468. {
  469. case eSchTp_traffic : sSchType = "교통"; break; // = 0, //0:교통,
  470. case eSchTp_incident: sSchType = "돌발"; break; // = 1, //1:돌발,
  471. case eSchTp_gongsa : sSchType = "공사"; break; // = 2, //2:공사행사,
  472. case eSchTp_hongbo : sSchType = "홍보"; break; // = 3, //3:홍보,
  473. case eSchTp_deture : sSchType = "우회"; break; // = 4, //4:우회,
  474. case eSchTp_congest : sSchType = "정체"; break; // = 5, //5:정체,
  475. case eSchTp_safe : sSchType = "안전"; break; // = 6, //6:안전,
  476. case eSchTp_video : sSchType = "동영상"; break; // = 7, //7:동영상,
  477. case eSchTp_stream : sSchType = "스트리밍영상"; break; // = 8, //8:스트리밍영상
  478. case eSchTp_atmp : sSchType = "대기환경"; break; // = 9, //9:대기환경
  479. case eSchTp_park : sSchType = "주차정보"; break; // = 10, //10:주차정보
  480. }
  481. pDcSch->Values[nRow][Col22->Index] = sSchType;
  482. pDcSch->Values[nRow][Col23->Index] = nTag;
  483. pDcSch->Values[nRow][ColWeek1->Index] = "111111111111111111111111";
  484. pDcSch->Values[nRow][ColWeek2->Index] = "111111111111111111111111";
  485. pDcSch->Values[nRow][ColWeek3->Index] = "111111111111111111111111";
  486. pDcSch->Values[nRow][ColWeek4->Index] = "111111111111111111111111";
  487. pDcSch->Values[nRow][ColWeek5->Index] = "111111111111111111111111";
  488. pDcSch->Values[nRow][ColWeek6->Index] = "111111111111111111111111";
  489. pDcSch->Values[nRow][ColWeek7->Index] = "111111111111111111111111";
  490. }
  491. //---------------------------------------------------------------------------
  492. void __fastcall TVMSM600M::BtnListDelete0Click(TObject *Sender)
  493. {
  494. TcxButton *pBtn = (TcxButton*)Sender;
  495. int nTag = pBtn->Tag;
  496. if (nTag >= eSchTp_max) return;
  497. int nSelIdx = CMM_GetRecordIndex(FRAMEVmsSchList1->TvList);
  498. if (nSelIdx < 0) return;
  499. TcxGridDataController *pDcSch = TvGrid0->DataController;
  500. nSelIdx = CMM_GetRecordIndex(TvGrid0);
  501. if (nSelIdx < 0) return;
  502. TvGrid0->DataController->DeleteRecord(nSelIdx);
  503. }
  504. //---------------------------------------------------------------------------
  505. void __fastcall TVMSM600M::TvGridCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo,
  506. TMouseButton AButton, TShiftState AShift,
  507. bool &AHandled)
  508. {
  509. if (!ACellViewInfo) return;
  510. int nRow = Sender->DataController->FocusedRecordIndex;
  511. if( nRow <= -1 )
  512. return;
  513. TcxGridDataController *pGDC = (TcxGridDataController*)Sender->DataController;
  514. int nColIdx = ACellViewInfo->Item->Index;
  515. //ShowMessage(String(Sender->Tag) + " " + String(nColIdx));
  516. String sFormId = VarToStr(pGDC->Values[nRow][0]);
  517. String sStrDate = VarToStr(pGDC->Values[nRow][7]);
  518. String sEndDate = VarToStr(pGDC->Values[nRow][8]);
  519. if (nColIdx == 4 || nColIdx == 5)
  520. {
  521. //표출기간설정
  522. TVMSSEL0M *pSelDate = new TVMSSEL0M(this);
  523. pSelDate->FStrTime = sStrDate;
  524. pSelDate->FEndTime = sEndDate;
  525. pSelDate->ShowModal();
  526. bool bSelected = pSelDate->FSelected;
  527. sStrDate = pSelDate->FStrTime;
  528. sEndDate = pSelDate->FEndTime;
  529. delete pSelDate;
  530. pSelDate = NULL;
  531. if (bSelected)
  532. {
  533. pGDC->Values[nRow][4] = ITSUtil_FormatStr(sStrDate, STR_HHNN);;
  534. pGDC->Values[nRow][5] = ITSUtil_FormatStr(sEndDate, STR_HHNN);;
  535. pGDC->Values[nRow][7] = sStrDate;
  536. pGDC->Values[nRow][8] = sEndDate;
  537. }
  538. return;
  539. }
  540. int nSchFormType = pGDC->Values[nRow][Col23->Index];
  541. int nFormType = VarToStr(pGDC->Values[nRow][Col15->Index]).ToIntDef(0);
  542. if (nSchFormType == eSchTp_traffic)
  543. {
  544. if (nFormType == eFormtp_figure)
  545. {
  546. #if 0
  547. //도형식배경 소통정보 폼
  548. Application->MessageBox(FrmLang->lblSchErr1->Caption.c_str(),//L"VMS 교통정보 폼 구간 설정\r\n도형식 배경소통정보 폼은 폼관리 화면에서 설정 가능합니다.",
  549. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  550. #endif
  551. return;
  552. }
  553. // 소통정보 폼 정보구간 설정
  554. TVMSM610M *pIfscFrm = new TVMSM610M(this);
  555. pIfscFrm->FVmsNmbr = EdVmsNmbr->Text;
  556. pIfscFrm->FFormId = sFormId;
  557. pIfscFrm->FVmsTypeCd = FVmsTypeCd;
  558. pIfscFrm->FVmsWidth = FVmsWidth;
  559. pIfscFrm->FVmsHeight = FVmsHeight;
  560. pIfscFrm->FIfscId[0] = VarToStr(pGDC->Values[nRow][9]);
  561. pIfscFrm->FIfscId[1] = VarToStr(pGDC->Values[nRow][10]);
  562. pIfscFrm->FIfscId[2] = VarToStr(pGDC->Values[nRow][11]);
  563. pIfscFrm->FIfscId[3] = VarToStr(pGDC->Values[nRow][12]);
  564. pIfscFrm->FIfscId[4] = VarToStr(pGDC->Values[nRow][16]);
  565. pIfscFrm->FIfscId[5] = VarToStr(pGDC->Values[nRow][17]);
  566. pIfscFrm->FIfscId[6] = VarToStr(pGDC->Values[nRow][18]);
  567. pIfscFrm->FIfscId[7] = VarToStr(pGDC->Values[nRow][19]);
  568. //pIfscFrm->FVmsType = VarToStr(pGDC->Values[nRow][13]).ToIntDef(0);
  569. pIfscFrm->FFormColor = VarToStr(pGDC->Values[nRow][14]);
  570. pIfscFrm->FFormType = VarToStr(pGDC->Values[nRow][15]).ToIntDef(0);
  571. pIfscFrm->ShowModal();
  572. if (pIfscFrm->FSelected)
  573. {
  574. TStream *pImgStream = new TMemoryStream();
  575. try
  576. {
  577. void *p;
  578. Variant v;
  579. pIfscFrm->ImgForm->Picture->Bitmap->SaveToStream(pImgStream);
  580. int aBound[]={0, pImgStream->Size - 1};
  581. v = VarArrayCreate(aBound, 1, varByte);
  582. p = VarArrayLock(v);
  583. pImgStream->Position = 0;
  584. pImgStream->Read(p, pImgStream->Size);
  585. VarArrayUnlock(v);
  586. pGDC->Values[nRow][1] = v;
  587. }
  588. __finally
  589. {
  590. SAFE_DELETE(pImgStream);
  591. }
  592. pGDC->Values[nRow][ 9] = pIfscFrm->FIfscId[0];
  593. pGDC->Values[nRow][10] = pIfscFrm->FIfscId[1];
  594. pGDC->Values[nRow][11] = pIfscFrm->FIfscId[2];
  595. pGDC->Values[nRow][12] = pIfscFrm->FIfscId[3];
  596. pGDC->Values[nRow][16] = pIfscFrm->FIfscId[4];
  597. pGDC->Values[nRow][17] = pIfscFrm->FIfscId[5];
  598. pGDC->Values[nRow][18] = pIfscFrm->FIfscId[6];
  599. pGDC->Values[nRow][19] = pIfscFrm->FIfscId[7];
  600. }
  601. delete pIfscFrm;
  602. pIfscFrm = NULL;
  603. }
  604. #if 0
  605. else
  606. if (nSchFormType == eSchTp_congest)
  607. {
  608. // 정체정보 폼 정체구간 설정
  609. TVMSM660M *pIfscFrm = new TVMSM660M(this);
  610. pIfscFrm->FVmsNmbr = EdVmsNmbr->Text;
  611. pIfscFrm->FFormId = sFormId;
  612. pIfscFrm->FVmsTypeCd = FVmsTypeCd;
  613. pIfscFrm->FVmsWidth = FVmsWidth;
  614. pIfscFrm->FVmsHeight = FVmsHeight;
  615. pIfscFrm->FIfscId[0] = VarToStr(pGDC->Values[nRow][9]);
  616. pIfscFrm->FIfscId[1] = VarToStr(pGDC->Values[nRow][10]);
  617. pIfscFrm->FIfscId[2] = VarToStr(pGDC->Values[nRow][11]);
  618. pIfscFrm->FIfscId[3] = VarToStr(pGDC->Values[nRow][12]);
  619. pIfscFrm->FIfscId[4] = VarToStr(pGDC->Values[nRow][16]);
  620. pIfscFrm->FIfscId[5] = VarToStr(pGDC->Values[nRow][17]);
  621. pIfscFrm->FIfscId[6] = VarToStr(pGDC->Values[nRow][18]);
  622. pIfscFrm->FIfscId[7] = VarToStr(pGDC->Values[nRow][19]);
  623. pIfscFrm->FFormColor = VarToStr(pGDC->Values[nRow][14]);
  624. pIfscFrm->FFormType = VarToStr(pGDC->Values[nRow][15]).ToIntDef(0);
  625. pIfscFrm->ShowModal();
  626. if (pIfscFrm->FSelected)
  627. {
  628. TStream *pImgStream = new TMemoryStream();
  629. try
  630. {
  631. void *p;
  632. Variant v;
  633. pIfscFrm->ImgForm->Picture->Bitmap->SaveToStream(pImgStream);
  634. int aBound[]={0, pImgStream->Size - 1};
  635. v = VarArrayCreate(aBound, 1, varByte);
  636. p = VarArrayLock(v);
  637. pImgStream->Position = 0;
  638. pImgStream->Read(p, pImgStream->Size);
  639. VarArrayUnlock(v);
  640. pGDC->Values[nRow][1] = v;
  641. }
  642. __finally
  643. {
  644. SAFE_DELETE(pImgStream);
  645. }
  646. pGDC->Values[nRow][ 9] = pIfscFrm->FIfscId[0];
  647. pGDC->Values[nRow][10] = pIfscFrm->FIfscId[1];
  648. pGDC->Values[nRow][11] = pIfscFrm->FIfscId[2];
  649. pGDC->Values[nRow][12] = pIfscFrm->FIfscId[3];
  650. pGDC->Values[nRow][16] = pIfscFrm->FIfscId[4];
  651. pGDC->Values[nRow][17] = pIfscFrm->FIfscId[5];
  652. pGDC->Values[nRow][18] = pIfscFrm->FIfscId[6];
  653. pGDC->Values[nRow][19] = pIfscFrm->FIfscId[7];
  654. }
  655. delete pIfscFrm;
  656. pIfscFrm = NULL;
  657. }
  658. #endif
  659. else
  660. if (nSchFormType == eSchTp_video)
  661. {
  662. TVMSM620M *pVideoFrm = new TVMSM620M(this);
  663. pVideoFrm->FVmsNmbr = EdVmsNmbr->Text;
  664. pVideoFrm->FFormId = sFormId;
  665. pVideoFrm->FVmsTypeCd = FVmsTypeCd;
  666. pVideoFrm->FVmsWidth = FVmsWidth;
  667. pVideoFrm->FVmsHeight = FVmsHeight;
  668. pVideoFrm->FSymbLibNmbr = VarToStr(pGDC->Values[nRow][20]);
  669. pVideoFrm->FStreamAddr = VarToStr(pGDC->Values[nRow][21]);
  670. //pVideoFrm->FVmsType = VarToStr(pGDC->Values[nRow][13]).ToIntDef(0);
  671. pVideoFrm->FFormColor = VarToStr(pGDC->Values[nRow][14]);
  672. pVideoFrm->FFormType = VarToStr(pGDC->Values[nRow][15]).ToIntDef(0);
  673. pVideoFrm->ShowModal();
  674. if (pVideoFrm->FSelected)
  675. {
  676. TStream *pImgStream = new TMemoryStream();
  677. try
  678. {
  679. void *p;
  680. Variant v;
  681. pVideoFrm->ImgForm->Picture->Bitmap->SaveToStream(pImgStream);
  682. int aBound[]={0, pImgStream->Size - 1};
  683. v = VarArrayCreate(aBound, 1, varByte);
  684. p = VarArrayLock(v);
  685. pImgStream->Position = 0;
  686. pImgStream->Read(p, pImgStream->Size);
  687. VarArrayUnlock(v);
  688. pGDC->Values[nRow][1] = v;
  689. }
  690. __finally
  691. {
  692. SAFE_DELETE(pImgStream);
  693. }
  694. pGDC->Values[nRow][20] = pVideoFrm->FSymbLibNmbr;
  695. pGDC->Values[nRow][21] = pVideoFrm->FStreamAddr;
  696. }
  697. delete pVideoFrm;
  698. pVideoFrm = NULL;
  699. }
  700. else
  701. if (nSchFormType == eSchTp_stream)
  702. {
  703. TVMSM630M *pStreamFrm = new TVMSM630M(this);
  704. pStreamFrm->FVmsNmbr = EdVmsNmbr->Text;
  705. pStreamFrm->FFormId = sFormId;
  706. pStreamFrm->FVmsTypeCd = FVmsTypeCd;
  707. pStreamFrm->FVmsWidth = FVmsWidth;
  708. pStreamFrm->FVmsHeight = FVmsHeight;
  709. pStreamFrm->FSymbLibNmbr = VarToStr(pGDC->Values[nRow][20]);
  710. pStreamFrm->FStreamAddr = VarToStr(pGDC->Values[nRow][21]);
  711. //pStreamFrm->FVmsType = VarToStr(pGDC->Values[nRow][13]).ToIntDef(0);
  712. pStreamFrm->FFormColor = VarToStr(pGDC->Values[nRow][14]);
  713. pStreamFrm->FFormType = VarToStr(pGDC->Values[nRow][15]).ToIntDef(0);
  714. pStreamFrm->ShowModal();
  715. if (pStreamFrm->FSelected)
  716. {
  717. TStream *pImgStream = new TMemoryStream();
  718. try
  719. {
  720. void *p;
  721. Variant v;
  722. pStreamFrm->ImgForm->Picture->Bitmap->SaveToStream(pImgStream);
  723. int aBound[]={0, pImgStream->Size - 1};
  724. v = VarArrayCreate(aBound, 1, varByte);
  725. p = VarArrayLock(v);
  726. pImgStream->Position = 0;
  727. pImgStream->Read(p, pImgStream->Size);
  728. VarArrayUnlock(v);
  729. pGDC->Values[nRow][1] = v;
  730. }
  731. __finally
  732. {
  733. SAFE_DELETE(pImgStream);
  734. }
  735. pGDC->Values[nRow][20] = "300"; //스트리밍인경우 300 으로 고정, //pStreamFrm->FSymbLibNmbr;
  736. pGDC->Values[nRow][21] = pStreamFrm->FStreamAddr;
  737. }
  738. delete pStreamFrm;
  739. pStreamFrm = NULL;
  740. }
  741. #if 0
  742. else
  743. if (nSchFormType == eSchTp_atmp)
  744. {
  745. // 대기환경 폼 관측소 설정
  746. TVMSM640M *pAtmpFrm = new TVMSM640M(this);
  747. pAtmpFrm->FVmsNmbr = EdVmsNmbr->Text;
  748. pAtmpFrm->FFormId = sFormId;
  749. pAtmpFrm->FVmsTypeCd = FVmsTypeCd;
  750. pAtmpFrm->FVmsWidth = FVmsWidth;
  751. pAtmpFrm->FVmsHeight = FVmsHeight;
  752. pAtmpFrm->FIfscId[0] = VarToStr(pGDC->Values[nRow][9]);
  753. pAtmpFrm->FFormColor = VarToStr(pGDC->Values[nRow][14]);
  754. pAtmpFrm->FFormType = VarToStr(pGDC->Values[nRow][15]).ToIntDef(0);
  755. pAtmpFrm->ShowModal();
  756. if (pAtmpFrm->FSelected)
  757. {
  758. TStream *pImgStream = new TMemoryStream();
  759. try
  760. {
  761. void *p;
  762. Variant v;
  763. pAtmpFrm->ImgForm->Picture->Bitmap->SaveToStream(pImgStream);
  764. int aBound[]={0, pImgStream->Size - 1};
  765. v = VarArrayCreate(aBound, 1, varByte);
  766. p = VarArrayLock(v);
  767. pImgStream->Position = 0;
  768. pImgStream->Read(p, pImgStream->Size);
  769. VarArrayUnlock(v);
  770. pGDC->Values[nRow][1] = v;
  771. }
  772. __finally
  773. {
  774. SAFE_DELETE(pImgStream);
  775. }
  776. pGDC->Values[nRow][ 9] = pAtmpFrm->FIfscId[0];
  777. }
  778. delete pAtmpFrm;
  779. pAtmpFrm = NULL;
  780. }
  781. #endif
  782. }
  783. //---------------------------------------------------------------------------
  784. void __fastcall TVMSM600M::BtnAllEditClick(TObject *Sender)
  785. {
  786. TcxButton *pBtn = (TcxButton*)Sender;
  787. //등록되어 있는 스케줄 폼을 전체 VMS에 편집하는 기능
  788. int nTag = PgVmsSch->Properties->ActivePage->Tag;
  789. if (nTag < 0 || nTag >= eSchTp_max)
  790. {
  791. Application->MessageBox(FrmLang->lblRegErr1->Caption.c_str(),//L"VMS 스케줄 일괄 관리\r\n알수 없는 스케줄 유형입니다.",
  792. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  793. return;
  794. }
  795. TcxGridTableView *pTvList = TvGrid0;
  796. TcxGridDataController *pGDC;
  797. String sMode = "E";
  798. if (pBtn->Tag == 1)
  799. {
  800. sMode = "A"; //추가
  801. pTvList = FListFrm[nTag];
  802. }
  803. if (!pTvList) return;
  804. pGDC = pTvList->DataController;
  805. int nFormIdx = CMM_GetRecordIndex(pTvList);
  806. if (nFormIdx < 0)
  807. {
  808. Application->MessageBox(FrmLang->lblRegErr1->Caption.c_str(),//L"VMS 스케줄 일괄 관리\r\n등록되어 있는 스케줄 폼을 목록에서 먼저 선택하세요.",
  809. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  810. return;
  811. }
  812. if (pBtn->Tag == 0)
  813. {
  814. nTag = pGDC->Values[nFormIdx][Col23->Index];
  815. }
  816. String sSymbLibNmbr;
  817. String sStreamAddr;
  818. if (pBtn->Tag == 1)
  819. {
  820. sSymbLibNmbr = VarToStr(pGDC->Values[nFormIdx][3]);
  821. sStreamAddr = VarToStr(pGDC->Values[nFormIdx][4]);
  822. }
  823. else
  824. {
  825. sSymbLibNmbr = VarToStr(pGDC->Values[nFormIdx][Col20->Index]);
  826. sStreamAddr = VarToStr(pGDC->Values[nFormIdx][Col21->Index]);
  827. }
  828. String sFormId = VarToStr(pGDC->Values[nFormIdx][0]);
  829. TVmsSizeType *pVmsSizeType = APP_GetVmsSizeTypeObject(CbSizeType);
  830. if (pVmsSizeType == NULL)
  831. {
  832. Application->MessageBox(FrmLang->lblRegErr3->Caption.c_str(),//L"VMS 스케줄 일괄 관리\r\nVMS 유형을 알수 없습니다. VMS 크기 유형을 먼저 선택하세요.",
  833. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  834. return;
  835. }
  836. String sVmsType = pVmsSizeType->TypeCd;
  837. TVMSEDT0M *pFrmEdt = new TVMSEDT0M(this);
  838. pFrmEdt->FVmsTypeCd = sVmsType;
  839. pFrmEdt->FScheType = FVMS_SCH_TYPE;
  840. pFrmEdt->FScheFormType = String(nTag);
  841. pFrmEdt->FFormId = sFormId;
  842. pFrmEdt->FMode = sMode;
  843. pFrmEdt->FVmsNmbr = "";
  844. pFrmEdt->FSymbLibNmbr = sSymbLibNmbr;
  845. pFrmEdt->FStreamAddr = sStreamAddr;
  846. pFrmEdt->ShowModal();
  847. bool bOk = pFrmEdt->FSelected;
  848. delete pFrmEdt;
  849. pFrmEdt = NULL;
  850. if (bOk)
  851. {
  852. DisplayInfo();
  853. }
  854. VmsCtlrManager->LoadVmsFormUsage();
  855. FRAMEVmsSchList1->RefreshVmsFormUsage();
  856. }
  857. //---------------------------------------------------------------------------
  858. void __fastcall TVMSM600M::BtnSaveClick(TObject *Sender)
  859. {
  860. //작업한 스케줄 정보를 저장한다.
  861. if (EdVmsNmbr->Text.Trim().IsEmpty())
  862. {
  863. Application->MessageBox(lblErr2->Caption.c_str(),//L"VMS 자동 스케줄 관리\r\nVMS 목록에서 VMS를 먼저 선택한 후 작업을 진행하세요.",
  864. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  865. return;
  866. }
  867. bool bUpdate = true;
  868. String sVmsNmbr = EdVmsNmbr->Text.Trim();
  869. if (bUpdate)
  870. {
  871. String sMsg;
  872. sMsg = "VMS: " + sVmsNmbr;
  873. sMsg+= "\r\n" + lblErr3->Caption;//선택한 VMS의 자동 스케줄 정보를 저장하시겠습니까?";
  874. if (Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES) return;
  875. }
  876. try
  877. {
  878. ITSDb_GetConnection()->BeginTrans();
  879. DeleteVmsScenario(sVmsNmbr);
  880. SaveVmsScenario(sVmsNmbr, TvGrid0);
  881. }
  882. __finally
  883. {
  884. ITSDb_GetConnection()->CommitTrans();
  885. }
  886. Application->MessageBox(lblErr4->Caption.c_str(),//L"VMS 자동 스케줄 관리\r\nVMS 자동 스케줄 정보를 저장 하였습니다.",
  887. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  888. VmsCtlrManager->LoadVmsFormUsage();
  889. FRAMEVmsSchList1->RefreshVmsFormUsage();
  890. CMM_SetGridRow(FRAMEVmsSchList1->CxList, FRAMEVmsSchList1->TvList, sVmsNmbr, FRAMEVmsSchList1->Column01->Index);
  891. DisplayInfo();
  892. }
  893. //---------------------------------------------------------------------------
  894. bool __fastcall TVMSM600M::SaveVmsScenario(String AVmsNmbr, TcxGridTableView *AListSch)
  895. {
  896. bool bResult = false;
  897. String sQry;
  898. TADOQuery *pADO = NULL;
  899. TcxDataController *pGDC = AListSch->DataController;
  900. String sTypeCd = "";
  901. sQry = "INSERT INTO TB_VMS_DSPL_SCH ( \r\n"
  902. " VMS_CTLR_NMBR, \r\n"
  903. " VMS_SCH_TYPE, \r\n"
  904. " VMS_SCH_FORM_TYPE, \r\n"
  905. " PHASE, \r\n"
  906. " VMS_FORM_ID, \r\n"
  907. " DSPL_STRT_HH, \r\n"
  908. " DSPL_END_HH, \r\n"
  909. " DSPL_HH, \r\n"
  910. " FRST_VMS_IFSC_ID, \r\n"
  911. " SECD_VMS_IFSC_ID, \r\n"
  912. " THIR_VMS_IFSC_ID, \r\n"
  913. " FOUR_VMS_IFSC_ID, \r\n"
  914. " FRST_IMG_IFSC_ID, \r\n"
  915. " SECD_IMG_IFSC_ID, \r\n"
  916. " THIR_IMG_IFSC_ID, \r\n"
  917. " FOUR_IMG_IFSC_ID, \r\n"
  918. " SYMB_LIB_NMBR, \r\n"
  919. " STRM_ADDR, \r\n"
  920. " USE_YN, \r\n"
  921. " SCH_WEEK1, \r\n"
  922. " SCH_WEEK2, \r\n"
  923. " SCH_WEEK3, \r\n"
  924. " SCH_WEEK4, \r\n"
  925. " SCH_WEEK5, \r\n"
  926. " SCH_WEEK6, \r\n"
  927. " SCH_WEEK7, \r\n"
  928. " DSPL_CNGS_YN \r\n"
  929. " ) \r\n"
  930. " VALUES( \r\n"
  931. " :p01, :p02, :p03, \r\n"
  932. " :p04, :p05, :p06, \r\n"
  933. " :p07, :p08, :p09, \r\n"
  934. " :p10, :p11, :p12, \r\n"
  935. " :p13, :p14, :p15, \r\n"
  936. " :p16, :p17, :p18, \r\n"
  937. " :p19, \r\n"
  938. " :p20, \r\n"
  939. " :p21, \r\n"
  940. " :p22, \r\n"
  941. " :p23, \r\n"
  942. " :p24, \r\n"
  943. " :p25, \r\n"
  944. " :p26, \r\n"
  945. " :p27 \r\n"
  946. " ) \r\n";
  947. try
  948. {
  949. AListSch->BeginUpdate();
  950. pGDC->BeginUpdate();
  951. int nRows = pGDC->RecordCount;
  952. try
  953. {
  954. pADO = new TADOQuery(NULL);
  955. pADO->Close();
  956. pADO->Connection = ITSDb_GetConnection();
  957. ITSDb_SQLText(pADO, sQry);
  958. int ii;
  959. for (ii = 0; ii < nRows; ii++)
  960. {
  961. String sFormId = VarToStr(pGDC->Values[ii][ 0]);
  962. String sUseYn = VarToStr(pGDC->Values[ii][ 6]);
  963. if (sUseYn == "Y")
  964. {
  965. if (!CDSVmsFormManager->IsValid(sFormId))
  966. {
  967. pGDC->Values[ii][ 6] = "N";
  968. }
  969. }
  970. }
  971. for (ii = 0; ii < nRows; ii++)
  972. {
  973. String sFormId = VarToStr(pGDC->Values[ii][Col00->Index]);
  974. String sDispHH = VarToStr(pGDC->Values[ii][Col03->Index]);
  975. String sUseYn = VarToStr(pGDC->Values[ii][Col06->Index]);
  976. String sStrTime = VarToStr(pGDC->Values[ii][Col07->Index]);
  977. String sEndTime = VarToStr(pGDC->Values[ii][Col08->Index]);
  978. String sIfscId1 = VarToStr(pGDC->Values[ii][Col09->Index]);
  979. String sIfscId2 = VarToStr(pGDC->Values[ii][Col10->Index]);
  980. String sIfscId3 = VarToStr(pGDC->Values[ii][Col11->Index]);
  981. String sIfscId4 = VarToStr(pGDC->Values[ii][Col12->Index]);
  982. String sImgIfscId1 = VarToStr(pGDC->Values[ii][Col16->Index]);
  983. String sImgIfscId2 = VarToStr(pGDC->Values[ii][Col17->Index]);
  984. String sImgIfscId3 = VarToStr(pGDC->Values[ii][Col18->Index]);
  985. String sImgIfscId4 = VarToStr(pGDC->Values[ii][Col19->Index]);
  986. String sSymbLibNmbr = VarToStr(pGDC->Values[ii][Col20->Index]);
  987. String sStrmAddr = VarToStr(pGDC->Values[ii][Col21->Index]);
  988. sTypeCd = VarToStr(pGDC->Values[ii][Col23->Index]);
  989. String sSchWeek1 = VarToStr(pGDC->Values[ii][ColWeek1->Index]);
  990. String sSchWeek2 = VarToStr(pGDC->Values[ii][ColWeek2->Index]);
  991. String sSchWeek3 = VarToStr(pGDC->Values[ii][ColWeek3->Index]);
  992. String sSchWeek4 = VarToStr(pGDC->Values[ii][ColWeek4->Index]);
  993. String sSchWeek5 = VarToStr(pGDC->Values[ii][ColWeek5->Index]);
  994. String sSchWeek6 = VarToStr(pGDC->Values[ii][ColWeek6->Index]);
  995. String sSchWeek7 = VarToStr(pGDC->Values[ii][ColWeek7->Index]);
  996. String sDsplCngsYn = VarToStr(pGDC->Values[ii][Col25->Index]);
  997. if (sDsplCngsYn == "") sDsplCngsYn = "Y";
  998. if (sTypeCd == String(eSchTp_congest)) sDsplCngsYn = "Y";
  999. ITSDb_SQLBind(pADO, "p01", AVmsNmbr);
  1000. ITSDb_SQLBind(pADO, "p02", FVMS_SCH_TYPE);
  1001. ITSDb_SQLBind(pADO, "p03", sTypeCd);
  1002. ITSDb_SQLBind(pADO, "p04", String(ii+1));
  1003. ITSDb_SQLBind(pADO, "p05", sFormId);
  1004. ITSDb_SQLBind(pADO, "p06", sStrTime);
  1005. ITSDb_SQLBind(pADO, "p07", sEndTime);
  1006. ITSDb_SQLBind(pADO, "p08", sDispHH);
  1007. ITSDb_SQLBind(pADO, "p09", sIfscId1);
  1008. ITSDb_SQLBind(pADO, "p10", sIfscId2);
  1009. ITSDb_SQLBind(pADO, "p11", sIfscId3);
  1010. ITSDb_SQLBind(pADO, "p12", sIfscId4);
  1011. ITSDb_SQLBind(pADO, "p13", sImgIfscId1);
  1012. ITSDb_SQLBind(pADO, "p14", sImgIfscId2);
  1013. ITSDb_SQLBind(pADO, "p15", sImgIfscId3);
  1014. ITSDb_SQLBind(pADO, "p16", sImgIfscId4);
  1015. ITSDb_SQLBind(pADO, "p17", sSymbLibNmbr);
  1016. ITSDb_SQLBind(pADO, "p18", sStrmAddr);
  1017. ITSDb_SQLBind(pADO, "p19", sUseYn);
  1018. ITSDb_SQLBind(pADO, "p20", sSchWeek1);
  1019. ITSDb_SQLBind(pADO, "p21", sSchWeek2);
  1020. ITSDb_SQLBind(pADO, "p22", sSchWeek3);
  1021. ITSDb_SQLBind(pADO, "p23", sSchWeek4);
  1022. ITSDb_SQLBind(pADO, "p24", sSchWeek5);
  1023. ITSDb_SQLBind(pADO, "p25", sSchWeek6);
  1024. ITSDb_SQLBind(pADO, "p26", sSchWeek7);
  1025. ITSDb_SQLBind(pADO, "p27", sDsplCngsYn);
  1026. pADO->ExecSQL();
  1027. }
  1028. bResult = true;
  1029. }
  1030. catch(EDatabaseError &E)
  1031. {
  1032. ITSDb_GetConnection()->RollbackTrans();
  1033. DBERRORMSG("TVMSM600M::SaveVmsScenario", String(E.ClassName()), E.Message, sQry);
  1034. throw Exception(String(E.ClassName()) + E.Message);
  1035. }
  1036. catch(Exception &e)
  1037. {
  1038. ITSDb_GetConnection()->RollbackTrans();
  1039. DBERRORMSG("TVMSM600M::SaveVmsScenario", String(e.ClassName()), e.Message, sQry);
  1040. throw Exception(String(e.ClassName()) + e.Message);
  1041. }
  1042. }
  1043. __finally
  1044. {
  1045. if (pADO)
  1046. {
  1047. pADO->Close();
  1048. delete pADO;
  1049. }
  1050. pGDC->EndUpdate();
  1051. AListSch->EndUpdate();
  1052. }
  1053. return bResult;
  1054. }
  1055. //---------------------------------------------------------------------------
  1056. bool __fastcall TVMSM600M::SaveVmsScenarioWeek(String AVmsNmbr, TcxGridTableView *AListSch)
  1057. {
  1058. bool bResult = false;
  1059. #if 0
  1060. String sQry;
  1061. TADOQuery *pADO = NULL;
  1062. TcxDataController *pGDC = AListSch->DataController;
  1063. String sTypeCd = "";
  1064. sQry = "INSERT INTO TB_VMS_DSPL_SCH_WEEK ( \r\n"
  1065. " VMS_CTLR_NMBR, \r\n"
  1066. " VMS_SCH_TYPE, \r\n"
  1067. " PHASE, \r\n"
  1068. " WEEK_CD, \r\n"
  1069. " SCH_HH \r\n"
  1070. " ) \r\n"
  1071. " VALUES( \r\n"
  1072. " :p01, :p02, :p03, \r\n"
  1073. " :p04, :p05 \r\n"
  1074. " ) \r\n";
  1075. try
  1076. {
  1077. AListSch->BeginUpdate();
  1078. pGDC->BeginUpdate();
  1079. int nRows = pGDC->RecordCount;
  1080. try
  1081. {
  1082. pADO = new TADOQuery(NULL);
  1083. pADO->Close();
  1084. pADO->Connection = ITSDb_GetConnection();
  1085. ITSDb_SQLText(pADO, sQry);
  1086. int ii;
  1087. for (ii = 0; ii < nRows; ii++)
  1088. {
  1089. int PHASE = pGDC->Values[ii][Col24->Index];
  1090. TCDSVmsDsplSch *pObj = CDSVmsDsplSchManager->FPhases.Find(PHASE);
  1091. if (!pObj)
  1092. {
  1093. continue; //여기걸리면 안돼는데...
  1094. }
  1095. FOR_STL(TCDSVmsDsplSchWeek*, pWeek, pObj->FWeeks)
  1096. {
  1097. ITSDb_SQLBind(pADO, "p01", AVmsNmbr);
  1098. ITSDb_SQLBind(pADO, "p02", FVMS_SCH_TYPE);
  1099. ITSDb_SQLBind(pADO, "p03", String(PHASE));
  1100. ITSDb_SQLBind(pADO, "p04", pWeek->WEEK_CD);
  1101. ITSDb_SQLBind(pADO, "p05", pWeek->SCH_HH);
  1102. pADO->ExecSQL();
  1103. }
  1104. }
  1105. bResult = true;
  1106. }
  1107. catch(EDatabaseError &E)
  1108. {
  1109. ITSDb_GetConnection()->RollbackTrans();
  1110. DBERRORMSG("TVMSM600M::SaveVmsScenario", String(E.ClassName()), E.Message, sQry);
  1111. throw Exception(String(E.ClassName()) + E.Message);
  1112. }
  1113. catch(Exception &e)
  1114. {
  1115. ITSDb_GetConnection()->RollbackTrans();
  1116. DBERRORMSG("TVMSM600M::SaveVmsScenario", String(e.ClassName()), e.Message, sQry);
  1117. throw Exception(String(e.ClassName()) + e.Message);
  1118. }
  1119. }
  1120. __finally
  1121. {
  1122. if (pADO)
  1123. {
  1124. pADO->Close();
  1125. delete pADO;
  1126. }
  1127. pGDC->EndUpdate();
  1128. AListSch->EndUpdate();
  1129. }
  1130. #endif
  1131. return bResult;
  1132. }
  1133. //---------------------------------------------------------------------------
  1134. bool __fastcall TVMSM600M::DeleteVmsScenario(String AVmsNmbr)
  1135. {
  1136. bool bResult = false;
  1137. String sQry;
  1138. TADOQuery *pADO = NULL;
  1139. sQry = "DELETE TB_VMS_DSPL_SCH \r\n"
  1140. " WHERE VMS_SCH_TYPE = :p01 \r\n"
  1141. " AND VMS_CTLR_NMBR = :p02 \r\n";
  1142. try
  1143. {
  1144. try
  1145. {
  1146. pADO = new TADOQuery(NULL);
  1147. pADO->Close();
  1148. pADO->Connection = ITSDb_GetConnection();
  1149. ITSDb_SQLText(pADO, sQry);
  1150. ITSDb_SQLBind(pADO, "p01", FVMS_SCH_TYPE);
  1151. ITSDb_SQLBind(pADO, "p02", AVmsNmbr);
  1152. pADO->ExecSQL();
  1153. bResult = true;
  1154. }
  1155. catch(EDatabaseError &E)
  1156. {
  1157. ITSDb_GetConnection()->RollbackTrans();
  1158. DBERRORMSG("TVMSM600M::DeleteVmsScenario", String(E.ClassName()), E.Message, sQry);
  1159. throw Exception(String(E.ClassName()) + E.Message);
  1160. }
  1161. catch(Exception &e)
  1162. {
  1163. ITSDb_GetConnection()->RollbackTrans();
  1164. DBERRORMSG("TVMSM600M::DeleteVmsScenario", String(e.ClassName()), e.Message, sQry);
  1165. throw Exception(String(e.ClassName()) + e.Message);
  1166. }
  1167. }
  1168. __finally
  1169. {
  1170. if (pADO)
  1171. {
  1172. pADO->Close();
  1173. delete pADO;
  1174. }
  1175. }
  1176. return bResult;
  1177. }
  1178. //---------------------------------------------------------------------------
  1179. void __fastcall TVMSM600M::DrawTrafficScenarioForm()
  1180. {
  1181. TcxGridTableView *pGrid = TvGrid0;
  1182. if (!pGrid) return;
  1183. TcxDataController *pGDC = pGrid->DataController;
  1184. try
  1185. {
  1186. pGrid->BeginUpdate();
  1187. pGDC->BeginUpdate();
  1188. int nRows = pGDC->RecordCount;
  1189. try
  1190. {
  1191. for (int ii = 0; ii < nRows; ii++)
  1192. {
  1193. int nSchFormType = pGDC->Values[ii][Col23->Index];
  1194. if (nSchFormType != eSchTp_traffic) continue;
  1195. String sFormId = VarToStr(pGDC->Values[ii][Col00->Index]);
  1196. String sFormClr = VarToStr(pGDC->Values[ii][Col14->Index]);
  1197. int nFormType = VarToStr(pGDC->Values[ii][Col15->Index]).ToIntDef(0);
  1198. FIfscId[0] = VarToStr(pGDC->Values[ii][Col09->Index]);
  1199. FIfscId[1] = VarToStr(pGDC->Values[ii][Col10->Index]);
  1200. FIfscId[2] = VarToStr(pGDC->Values[ii][Col11->Index]);
  1201. FIfscId[3] = VarToStr(pGDC->Values[ii][Col12->Index]);
  1202. FIfscId[4] = VarToStr(pGDC->Values[ii][Col16->Index]);
  1203. FIfscId[5] = VarToStr(pGDC->Values[ii][Col17->Index]);
  1204. FIfscId[6] = VarToStr(pGDC->Values[ii][Col18->Index]);
  1205. FIfscId[7] = VarToStr(pGDC->Values[ii][Col19->Index]);
  1206. switch(nFormType)
  1207. {
  1208. case 11:// ' 소통상황(1단)
  1209. case 12:// ' 소통상황(2단)
  1210. case 13:// ' 소통상황(3단)
  1211. case 14:// ' 소통상황(4단)
  1212. if (LoadTrafficFormObjectInfo(sFormId, sFormClr, m_pEdtDesigner))
  1213. {
  1214. m_pEdtDesigner->GetVmsFormImage(ImgForm);
  1215. TStream *pImgStream = new TMemoryStream();
  1216. try
  1217. {
  1218. void *p;
  1219. Variant v;
  1220. ImgForm->Picture->Bitmap->SaveToStream(pImgStream);
  1221. int aBound[]={0, pImgStream->Size - 1};
  1222. v = VarArrayCreate(aBound, 1, varByte);
  1223. p = VarArrayLock(v);
  1224. pImgStream->Position = 0;
  1225. pImgStream->Read(p, pImgStream->Size);
  1226. VarArrayUnlock(v);
  1227. pGDC->Values[ii][1] = v;
  1228. }
  1229. __finally
  1230. {
  1231. SAFE_DELETE(pImgStream);
  1232. }
  1233. }
  1234. break;
  1235. }
  1236. }
  1237. }
  1238. catch(Exception &e)
  1239. {
  1240. }
  1241. }
  1242. __finally
  1243. {
  1244. pGDC->EndUpdate();
  1245. pGrid->EndUpdate();
  1246. }
  1247. }
  1248. //---------------------------------------------------------------------------
  1249. void __fastcall TVMSM600M::DrawAtmpScenarioForm()
  1250. {
  1251. TcxGridTableView *pGrid = TvGrid0;
  1252. if (!pGrid) return;
  1253. TcxDataController *pGDC = pGrid->DataController;
  1254. try
  1255. {
  1256. pGrid->BeginUpdate();
  1257. pGDC->BeginUpdate();
  1258. int nRows = pGDC->RecordCount;
  1259. try
  1260. {
  1261. for (int ii = 0; ii < nRows; ii++)
  1262. {
  1263. int nSchFormType = pGDC->Values[ii][Col23->Index];
  1264. if (nSchFormType != eSchTp_atmp) continue;
  1265. String sFormId = VarToStr(pGDC->Values[ii][Col00->Index]);
  1266. String sFormClr = VarToStr(pGDC->Values[ii][Col14->Index]);
  1267. int nFormType = VarToStr(pGDC->Values[ii][Col15->Index]).ToIntDef(0);
  1268. FIfscId[0] = VarToStr(pGDC->Values[ii][9]);
  1269. switch(nFormType)
  1270. {
  1271. case 90:// ' 소통상황(1단)
  1272. if (LoadTrafficFormObjectInfo(sFormId, sFormClr, m_pEdtDesigner))
  1273. {
  1274. m_pEdtDesigner->GetVmsFormImage(ImgForm);
  1275. TStream *pImgStream = new TMemoryStream();
  1276. try
  1277. {
  1278. void *p;
  1279. Variant v;
  1280. ImgForm->Picture->Bitmap->SaveToStream(pImgStream);
  1281. int aBound[]={0, pImgStream->Size - 1};
  1282. v = VarArrayCreate(aBound, 1, varByte);
  1283. p = VarArrayLock(v);
  1284. pImgStream->Position = 0;
  1285. pImgStream->Read(p, pImgStream->Size);
  1286. VarArrayUnlock(v);
  1287. pGDC->Values[ii][1] = v;
  1288. }
  1289. __finally
  1290. {
  1291. SAFE_DELETE(pImgStream);
  1292. }
  1293. }
  1294. break;
  1295. }
  1296. }
  1297. }
  1298. catch(Exception &e)
  1299. {
  1300. }
  1301. }
  1302. __finally
  1303. {
  1304. pGDC->EndUpdate();
  1305. pGrid->EndUpdate();
  1306. }
  1307. }
  1308. //---------------------------------------------------------------------------
  1309. bool __fastcall TVMSM600M::LoadTrafficFormObjectInfo(String AFormId, String ABkColor, TVmsFormDesigner *ADesigner)
  1310. {
  1311. ADesigner->Clear();
  1312. m_pEdtDesigner->BkColorCode = ABkColor;
  1313. String sQry;
  1314. TADOQuery *pADO = NULL;
  1315. sQry = "SELECT A.*, \r\n"
  1316. " C.VMS_FONT_NAME_NM, \r\n"
  1317. " B.IMAG_DATA AS SYMB_IMG, \r\n"
  1318. " B.SYMB_EXPL AS SYMB_IMG_NM, \r\n"
  1319. " D.VMS_FORM_TYPE_CD \r\n"
  1320. " FROM TB_VMS_FORM_OBJECT A, \r\n"
  1321. " TB_VMS_SYMB_LIB B, \r\n"
  1322. " TB_VMS_FONT_NAME C, \r\n"
  1323. " TB_VMS_FORM D \r\n"
  1324. " WHERE D.VMS_FORM_ID = :p01 \r\n"
  1325. " AND D.VMS_FORM_ID = A.VMS_FORM_ID \r\n"
  1326. " AND A.SYMB_LIB_NMBR = B.SYMB_LIB_NMBR(+) \r\n"
  1327. " AND A.VMS_FONT_NAME_CD = C.VMS_FONT_NAME_CD(+) \r\n"
  1328. " ORDER BY A.VMS_FORM_OBJECT_ID ASC \r\n";
  1329. int VMS_FORM_TYPE_CD = -1;
  1330. try
  1331. {
  1332. try
  1333. {
  1334. pADO = new TADOQuery(NULL);
  1335. pADO->Close();
  1336. pADO->Connection = ITSDb_GetConnection();
  1337. ITSDb_SQLText(pADO, sQry);
  1338. ITSDb_SQLBind(pADO, "p01", AFormId);
  1339. ITSDb_SQLOpen(pADO);
  1340. int nDrawType;
  1341. String sObjKind;
  1342. for( ; !pADO->Eof; pADO->Next())
  1343. {
  1344. VMS_FORM_TYPE_CD = pADO->FieldByName("VMS_FORM_TYPE_CD")->AsInteger;
  1345. int nFormId = pADO->FieldByName("VMS_FORM_ID")->AsInteger;
  1346. int nObjId = pADO->FieldByName("VMS_FORM_OBJECT_ID")->AsInteger;
  1347. int nObjType = pADO->FieldByName("VMS_FORM_OBJECT_TYPE_CD")->AsInteger;
  1348. if (nObjType == 1 || //심볼
  1349. nObjType == 2 || //이미지
  1350. nObjType == 3 || //배경이미지
  1351. nObjType == 17 || //@소통정보이미지 (1열)
  1352. nObjType == 27 || //@소통정보이미지2(2열)
  1353. nObjType == 37 || //@소통정보이미지3(3열)
  1354. nObjType == 47 || //소통이미지4
  1355. nObjType == 200 || //동영상
  1356. nObjType == 300 || //스트리밍영상
  1357. nObjType == 406 || //@통합대기등급 이미지
  1358. nObjType == 407 || //@미세먼지등급 이미지
  1359. nObjType == 408 || //@초미세먼지등급 이미지
  1360. nObjType == 413 //@오존등급이미지
  1361. )
  1362. {
  1363. if (nObjType == 1) sObjKind = OBJKIND_IMAGEID; //Image Id
  1364. else sObjKind = OBJKIND_IMAGE; //Image
  1365. nDrawType = 1; //이미지그리기
  1366. }
  1367. else
  1368. {
  1369. sObjKind = OBJKIND_TEXT; //문자열
  1370. nDrawType = 0; //문자열그리기
  1371. }
  1372. //실재 맵핑된 구간의 정보를 표출하도록 한다.
  1373. int nBlinking = pADO->FieldByName("VMS_DSPL_BLINKING")->AsInteger;
  1374. int nPosX = pADO->FieldByName("VMS_DSPL_XCRDN")->AsInteger;
  1375. int nPosY = pADO->FieldByName("VMS_DSPL_YCRDN")->AsInteger;
  1376. int nDsplW = pADO->FieldByName("VMS_DSPL_WIDTH")->AsInteger;
  1377. int nDsplH = pADO->FieldByName("VMS_DSPL_HEIGHT")->AsInteger;
  1378. TVmsFormObject *pObj = ADesigner->AddObject((VmsObjectDrawType)nDrawType);
  1379. if (!pObj) continue;
  1380. //11 , ' @구간명
  1381. //12 , ' @시점명
  1382. //13 , ' @종점명
  1383. //14 , ' @소통상황
  1384. //15 , ' @통행시간
  1385. //16 , ' @통행속도
  1386. //17 , ' @소통이미지
  1387. pObj->Text = pADO->FieldByName("VMS_DSPL_TXT")->AsString.Trim();
  1388. pObj->RunText = pObj->Text;
  1389. String sIfscId = "";
  1390. if (nObjType >= 11 && nObjType < 17)
  1391. sIfscId = FIfscId[0];
  1392. else
  1393. if (nObjType >= 21 && nObjType < 27)
  1394. sIfscId = FIfscId[1];
  1395. else
  1396. if (nObjType >= 31 && nObjType < 37)
  1397. sIfscId = FIfscId[2];
  1398. else
  1399. if (nObjType >= 41 && nObjType < 47)
  1400. sIfscId = FIfscId[3];
  1401. if (nObjType == 401)
  1402. sIfscId = FIfscId[0];
  1403. switch(nObjType)
  1404. {
  1405. case 17: sIfscId = FIfscId[4]; break;
  1406. case 27: sIfscId = FIfscId[5]; break;
  1407. case 37: sIfscId = FIfscId[6]; break;
  1408. case 47: sIfscId = FIfscId[7]; break;
  1409. }
  1410. if (sIfscId != "")
  1411. {
  1412. if (pADO->FieldByName("VMS_FORM_TYPE_CD")->AsInteger == 90)
  1413. {
  1414. TCDSAtmp *pAtmpObj = CDSAtmpManager->FLists.Find(sIfscId);
  1415. if (pAtmpObj)
  1416. {
  1417. pObj->RunText = pAtmpObj->VMS_DISP_NM;
  1418. }
  1419. }
  1420. else
  1421. {
  1422. TVmsIfsc *pIfscObj;
  1423. pIfscObj = VmsIfscManager->FLists.Find(sIfscId.ToIntDef(0));
  1424. if (pIfscObj)
  1425. {
  1426. switch(nObjType)
  1427. {
  1428. case 11: case 21: case 31: case 41:
  1429. pObj->RunText = pIfscObj->VMS_IFSC_NM;
  1430. break;
  1431. case 12: case 22: case 32: case 42:
  1432. pObj->RunText = pIfscObj->DSPL_STRT_NODE_NM;
  1433. break;
  1434. case 13: case 23: case 33: case 43:
  1435. pObj->RunText = pIfscObj->DSPL_END_NODE_NM;
  1436. break;
  1437. }
  1438. }
  1439. }
  1440. }
  1441. else
  1442. {
  1443. if (nObjType == 201)
  1444. {
  1445. }
  1446. else
  1447. if (nObjType == 301)
  1448. {
  1449. }
  1450. }
  1451. if (nObjType == 200 || nObjType == 300)
  1452. {
  1453. pObj->EditMode = false;
  1454. }
  1455. pObj->ObjSeq = nObjId;
  1456. pObj->ObjId = nObjId;
  1457. pObj->ObjKind = sObjKind;
  1458. pObj->Tag = pADO->FieldByName("VMS_IFSC_ID")->AsString;
  1459. pObj->ObjType = pADO->FieldByName("VMS_FORM_OBJECT_TYPE_CD")->AsString;
  1460. pObj->ObjSize = pADO->FieldByName("VMS_DSPL_SIZE")->AsInteger;
  1461. pObj->BkColorCode = pADO->FieldByName("VMS_DSPL_BKCOLOR")->AsString;
  1462. pObj->Blink = nBlinking == 1 ? true : false;
  1463. pObj->ImageId = pADO->FieldByName("SYMB_LIB_NMBR")->AsString;
  1464. pObj->SetPos(nPosX, nPosY);
  1465. if (pObj->ObjKind == OBJKIND_TEXT) // 문자열
  1466. {
  1467. int nFontBold = pADO->FieldByName("VMS_FONT_BOLD")->AsInteger;
  1468. pObj->FontName = pADO->FieldByName("VMS_FONT_NAME_NM")->AsString;
  1469. pObj->FontNameCode = pADO->FieldByName("VMS_FONT_NAME_CD")->AsString;
  1470. pObj->FontColorCode = pADO->FieldByName("VMS_FONT_COLR_CD")->AsString;
  1471. pObj->FontSize = pADO->FieldByName("VMS_FONT_SIZE")->AsInteger;
  1472. pObj->FontBold = nFontBold == 1 ? true : false;
  1473. pObj->TextAlign = pADO->FieldByName("VMS_FONT_ALIGN")->AsInteger;
  1474. //pObj->SetSize(pADO->FieldByName("VMS_DSPL_WIDTH")->AsInteger, pADO->FieldByName("VMS_DSPL_HEIGHT")->AsInteger);
  1475. pObj->SetRuntimeText(pObj->RunText);
  1476. #if 0
  1477. Label1->AutoSize = true;
  1478. Label1->Font->Name = pObj->FontName;
  1479. Label1->Font->Size = pObj->FontSize;
  1480. Label1->Caption = pObj->RunText;
  1481. if (pObj->FontBold)
  1482. Label1->Font->Style = TFontStyles() << fsBold;
  1483. else
  1484. Label1->Font->Style = TFontStyles();
  1485. //int nWidth = pADO->FieldByName("VMS_DSPL_WIDTH")->AsInteger;
  1486. //nWidth = Lavel1->Width;
  1487. #if 1
  1488. switch(pObj->TextAlign)
  1489. {
  1490. case 0://text_align_left:
  1491. //좌측정력인 경우 위치조정 필요 없음.
  1492. break;
  1493. case 1://text_align_right:
  1494. //좌측에서 글자길이를 뺀다음 만약 음수이면 0으로 설정
  1495. //pADO->FieldByName("VMS_DSPL_WIDTH")->AsInteger
  1496. nPosX = (nPosX+pADO->FieldByName("VMS_DSPL_WIDTH")->AsInteger) - Label1->Width;
  1497. break;
  1498. case 2://text_align_center:
  1499. //원래 글자의 중앙값을 얻은 다음에 조정된 글자의 1/2 크기를 뺀다음 음수이면 0으로 설정
  1500. nPosX = (nPosX+(pADO->FieldByName("VMS_DSPL_WIDTH")->AsInteger/2)) - (Label1->Width/2);
  1501. break;
  1502. }
  1503. if (nPosX < 0) nPosX = 0;
  1504. //AVmsObj->TextWidth = pLabel->Width;
  1505. #endif
  1506. pObj->SetSize(Label1->Width, pADO->FieldByName("VMS_DSPL_HEIGHT")->AsInteger);
  1507. #endif
  1508. }
  1509. else //if (sObjKind == "1" || sObjKind == "2") // 이미지(1), 이미지 ID(2)
  1510. {
  1511. if (pObj->ObjKind == OBJKIND_IMAGEID)
  1512. {
  1513. pObj->Text = pADO->FieldByName("SYMB_LIB_NMBR")->AsString;
  1514. }
  1515. TStream *pStream = NULL;
  1516. pStream = pADO->CreateBlobStream(pADO->FieldByName("VMS_DSPL_FIGR"), bmRead);
  1517. try
  1518. {
  1519. if (pStream && pStream->Size > 0)
  1520. {
  1521. Graphics::TBitmap *Bitmap = pObj->GetBitmap();
  1522. pStream->Position = 0;
  1523. Bitmap->LoadFromStream(pStream);
  1524. pObj->GetImage()->AutoSize= false;
  1525. pObj->GetImage()->Stretch = true;
  1526. pObj->GetImage()->Width = nDsplW;
  1527. pObj->GetImage()->Height = nDsplH;
  1528. pObj->SetSize(nDsplW, nDsplH);
  1529. pObj->SetPos(nPosX, nPosY);
  1530. //pObj->SetSize(Bitmap->Width, Bitmap->Height);
  1531. }
  1532. }
  1533. __finally
  1534. {
  1535. SAFE_DELETE(pStream);
  1536. }
  1537. }
  1538. //pObj->SetPos(nPosX, nPosY);
  1539. pObj->Show();
  1540. pObj->BringToFront();
  1541. }
  1542. if (VMS_FORM_TYPE_CD == eFormTp_traf_1)
  1543. {
  1544. TVmsFormObject *pArw = NULL;
  1545. TVmsFormObject *pStr = NULL;
  1546. TVmsFormObject *pEnd = NULL;
  1547. int nObjCnt = ADesigner->GetObjectCount();
  1548. for(int ii = 0; ii < nObjCnt; ii++)
  1549. {
  1550. TVmsFormObject *pObj = ADesigner->GetObject(ii);
  1551. if (!pObj) continue;
  1552. int nObjType = pObj->ObjType.ToIntDef(0);
  1553. switch(nObjType)
  1554. {
  1555. case 12: // @시점명 Y
  1556. pStr = pObj;
  1557. break;
  1558. case 13: // @종점명 Y
  1559. pEnd = pObj;
  1560. break;
  1561. }
  1562. }
  1563. for(int ii = 0; ii < nObjCnt; ii++)
  1564. {
  1565. TVmsFormObject *pObj = ADesigner->GetObject(ii);
  1566. if (!pObj) continue;
  1567. int nObjType = pObj->ObjType.ToIntDef(0);
  1568. switch(nObjType)
  1569. {
  1570. case 1: // @심볼 Y
  1571. case 2: // @이미지 Y
  1572. case 17: // @소통정보이미지 Y
  1573. //if (pFormObj->TRFC_FILL_CD == "T")
  1574. if (pStr && pObj->Top <= (pStr->Top+pStr->Height) )
  1575. {
  1576. pArw = pObj;
  1577. }
  1578. break;
  1579. }
  1580. }
  1581. if (pArw && pStr && pEnd)
  1582. {
  1583. int nRange = pStr->Top + pStr->Height;
  1584. if (pArw->Top <= nRange && pEnd->Top <= nRange)
  1585. {
  1586. int ARRAWGAP = 5;
  1587. int nLeft = 0;
  1588. int nTotW = pStr->Width + ARRAWGAP +
  1589. pArw->Width + ARRAWGAP +
  1590. pEnd->Width;
  1591. if (nTotW < ADesigner->Width)
  1592. {
  1593. nLeft = (ADesigner->Width - nTotW) / 2;
  1594. }
  1595. nLeft = (ADesigner->Width - nTotW) / 2;
  1596. pStr->Left = nLeft;
  1597. pArw->Left = pStr->Left + pStr->Width + ARRAWGAP;
  1598. pEnd->Left = pArw->Left + pArw->Width + ARRAWGAP;
  1599. }
  1600. }
  1601. }
  1602. }
  1603. catch(EDatabaseError &E)
  1604. {
  1605. DBERRORMSG("TVMSM600M::LoadTrafficFormObjectInfo", String(E.ClassName()), E.Message, sQry);
  1606. throw Exception(String(E.ClassName()) + E.Message);
  1607. }
  1608. catch(Exception &exception)
  1609. {
  1610. DBERRORMSG("TVMSM600M::LoadTrafficFormObjectInfo", String(exception.ClassName()), exception.Message, sQry);
  1611. throw Exception(String(exception.ClassName()) + exception.Message);
  1612. }
  1613. }
  1614. __finally
  1615. {
  1616. if (pADO)
  1617. {
  1618. pADO->Close();
  1619. delete pADO;
  1620. }
  1621. }
  1622. return true;
  1623. }
  1624. //---------------------------------------------------------------------------
  1625. void __fastcall TVMSM600M::DrawVideoStreamScenarioForm(int AFormScheType)
  1626. {
  1627. TcxGridTableView *pGrid = TvGrid0;
  1628. if (!pGrid) return;
  1629. TcxDataController *pGDC = pGrid->DataController;
  1630. try
  1631. {
  1632. pGrid->BeginUpdate();
  1633. pGDC->BeginUpdate();
  1634. int nRows = pGDC->RecordCount;
  1635. try
  1636. {
  1637. for (int ii = 0; ii < nRows; ii++)
  1638. {
  1639. int nSchFormType = pGDC->Values[ii][Col23->Index];
  1640. if (nSchFormType != AFormScheType) continue;
  1641. String sFormId = VarToStr(pGDC->Values[ii][Col00->Index]);
  1642. String sFormClr = VarToStr(pGDC->Values[ii][Col14->Index]);
  1643. int nFormType = VarToStr(pGDC->Values[ii][Col15->Index]).ToIntDef(0);
  1644. String sSymbLibNmbr = VarToStr(pGDC->Values[ii][Col20->Index]);
  1645. String sStreamAddr = VarToStr(pGDC->Values[ii][Col21->Index]);
  1646. switch(nFormType)
  1647. {
  1648. case 70:// ' 동영상 Y
  1649. case 80:// ' 스트리밍영상 Y
  1650. if (LoadVideoStreamFormObjectInfo(sFormId, sFormClr, m_pEdtDesigner, sSymbLibNmbr, sStreamAddr))
  1651. {
  1652. m_pEdtDesigner->GetVmsFormImage(ImgForm);
  1653. TStream *pImgStream = new TMemoryStream();
  1654. try
  1655. {
  1656. void *p;
  1657. Variant v;
  1658. ImgForm->Picture->Bitmap->SaveToStream(pImgStream);
  1659. int aBound[]={0, pImgStream->Size - 1};
  1660. v = VarArrayCreate(aBound, 1, varByte);
  1661. p = VarArrayLock(v);
  1662. pImgStream->Position = 0;
  1663. pImgStream->Read(p, pImgStream->Size);
  1664. VarArrayUnlock(v);
  1665. pGDC->Values[ii][1] = v;
  1666. }
  1667. __finally
  1668. {
  1669. SAFE_DELETE(pImgStream);
  1670. }
  1671. }
  1672. break;
  1673. }
  1674. }
  1675. }
  1676. catch(Exception &e)
  1677. {
  1678. }
  1679. }
  1680. __finally
  1681. {
  1682. pGDC->EndUpdate();
  1683. pGrid->EndUpdate();
  1684. }
  1685. }
  1686. //---------------------------------------------------------------------------
  1687. bool __fastcall TVMSM600M::LoadVideoStreamFormObjectInfo(String AFormId, String ABkColor, TVmsFormDesigner *ADesigner, String ASymbLibNmbr, String AStreamAddr)
  1688. {
  1689. ADesigner->Clear();
  1690. m_pEdtDesigner->BkColorCode = ABkColor;
  1691. String sQry;
  1692. TADOQuery *pADO = NULL;
  1693. sQry = "SELECT A.*, \r\n"
  1694. " C.VMS_FONT_NAME_NM, \r\n"
  1695. " B.IMAG_DATA AS SYMB_IMG, \r\n"
  1696. " B.SYMB_EXPL AS SYMB_IMG_NM, \r\n"
  1697. " B.SYMB_FILE_NM AS SYMB_FILE_NM \r\n"
  1698. " FROM TB_VMS_FORM_OBJECT A, \r\n"
  1699. " TB_VMS_SYMB_LIB B, \r\n"
  1700. " TB_VMS_FONT_NAME C, \r\n"
  1701. " TB_VMS_FORM D \r\n"
  1702. " WHERE D.VMS_FORM_ID = :p01 \r\n"
  1703. " AND D.VMS_FORM_ID = A.VMS_FORM_ID \r\n"
  1704. " AND B.SYMB_LIB_NMBR = :p02 \r\n"
  1705. " AND A.VMS_FONT_NAME_CD = C.VMS_FONT_NAME_CD(+) \r\n"
  1706. " ORDER BY A.VMS_FORM_OBJECT_ID ASC \r\n";
  1707. try
  1708. {
  1709. try
  1710. {
  1711. pADO = new TADOQuery(NULL);
  1712. pADO->Close();
  1713. pADO->Connection = ITSDb_GetConnection();
  1714. ITSDb_SQLText(pADO, sQry);
  1715. ITSDb_SQLBind(pADO, "p01", AFormId);
  1716. ITSDb_SQLBind(pADO, "p02", ASymbLibNmbr);
  1717. ITSDb_SQLOpen(pADO);
  1718. int nDrawType;
  1719. String sObjKind;
  1720. for( ; !pADO->Eof; pADO->Next())
  1721. {
  1722. int nFormId = pADO->FieldByName("VMS_FORM_ID")->AsInteger;
  1723. int nObjId = pADO->FieldByName("VMS_FORM_OBJECT_ID")->AsInteger;
  1724. int nObjType = pADO->FieldByName("VMS_FORM_OBJECT_TYPE_CD")->AsInteger;
  1725. if (nObjType == 1 || //심볼
  1726. nObjType == 2 || //이미지
  1727. nObjType == 3 || //배경이미지
  1728. nObjType == 17 || //@소통정보이미지 (1열)
  1729. nObjType == 27 || //@소통정보이미지2(2열)
  1730. nObjType == 37 || //@소통정보이미지3(3열)
  1731. nObjType == 47 || //소통이미지4
  1732. nObjType == 200 || //동영상
  1733. nObjType == 300 || //스트리밍영상
  1734. nObjType == 406 || //@통합대기등급 이미지
  1735. nObjType == 407 || //@미세먼지등급 이미지
  1736. nObjType == 408 || //@초미세먼지등급 이미지
  1737. nObjType == 413 //@오존등급이미지
  1738. )
  1739. {
  1740. sObjKind = OBJKIND_IMAGEID; //Image Id
  1741. nDrawType = 1; //이미지그리기
  1742. }
  1743. else
  1744. {
  1745. sObjKind = OBJKIND_TEXT; //문자열
  1746. nDrawType = 0; //문자열그리기
  1747. }
  1748. int nBlinking = pADO->FieldByName("VMS_DSPL_BLINKING")->AsInteger;
  1749. int nPosX = pADO->FieldByName("VMS_DSPL_XCRDN")->AsInteger;
  1750. int nPosY = pADO->FieldByName("VMS_DSPL_YCRDN")->AsInteger;
  1751. TVmsFormObject *pObj = ADesigner->AddObject((VmsObjectDrawType)nDrawType);
  1752. if (!pObj) continue;
  1753. pObj->Text = pADO->FieldByName("SYMB_IMG_NM")->AsString.Trim();
  1754. if (AStreamAddr == "") pObj->RunText = pObj->Text;
  1755. else pObj->RunText = AStreamAddr; //pObj->Text;
  1756. pObj->EditMode = false;
  1757. pObj->ObjSeq = nObjId;
  1758. pObj->ObjId = nObjId;
  1759. pObj->ObjKind = sObjKind;
  1760. pObj->Tag = pADO->FieldByName("VMS_IFSC_ID")->AsString;
  1761. pObj->ObjType = pADO->FieldByName("VMS_FORM_OBJECT_TYPE_CD")->AsString;
  1762. pObj->ObjSize = pADO->FieldByName("VMS_DSPL_SIZE")->AsInteger;
  1763. pObj->BkColorCode = pADO->FieldByName("VMS_DSPL_BKCOLOR")->AsString;
  1764. pObj->Blink = nBlinking == 1 ? true : false;
  1765. pObj->ImageId = ASymbLibNmbr; //pADO->FieldByName("SYMB_LIB_NMBR")->AsString;
  1766. pObj->SetPos(nPosX, nPosY);
  1767. if (pObj->ObjKind == OBJKIND_TEXT) // 문자열
  1768. {
  1769. int nFontBold = pADO->FieldByName("VMS_FONT_BOLD")->AsInteger;
  1770. pObj->FontName = pADO->FieldByName("VMS_FONT_NAME_NM")->AsString;
  1771. pObj->FontNameCode = pADO->FieldByName("VMS_FONT_NAME_CD")->AsString;
  1772. pObj->FontColorCode = pADO->FieldByName("VMS_FONT_COLR_CD")->AsString;
  1773. pObj->FontSize = pADO->FieldByName("VMS_FONT_SIZE")->AsInteger;
  1774. pObj->FontBold = nFontBold == 1 ? true : false;
  1775. pObj->TextAlign = pADO->FieldByName("VMS_FONT_ALIGN")->AsInteger;
  1776. pObj->SetSize(pADO->FieldByName("VMS_DSPL_WIDTH")->AsInteger, pADO->FieldByName("VMS_DSPL_HEIGHT")->AsInteger);
  1777. pObj->SetRuntimeText(pObj->RunText);
  1778. }
  1779. else //if (sObjKind == "1" || sObjKind == "2") // 이미지(1), 이미지 ID(2)
  1780. {
  1781. if (pObj->ObjKind == OBJKIND_IMAGEID)
  1782. {
  1783. pObj->Text = pADO->FieldByName("SYMB_LIB_NMBR")->AsString;
  1784. }
  1785. TStream *pStream = NULL;
  1786. //pStream = pADO->CreateBlobStream(pADO->FieldByName("VMS_DSPL_FIGR"), bmRead);
  1787. pStream = pADO->CreateBlobStream(pADO->FieldByName("SYMB_IMG"), bmRead);
  1788. try
  1789. {
  1790. if (pStream && pStream->Size > 0)
  1791. {
  1792. Graphics::TBitmap *Bitmap = pObj->GetBitmap();
  1793. pStream->Position = 0;
  1794. Bitmap->LoadFromStream(pStream);
  1795. pObj->SetSize(Bitmap->Width, Bitmap->Height);
  1796. if (ASymbLibNmbr != "200" && ASymbLibNmbr != "300")
  1797. pObj->SetPos(0, 0);
  1798. }
  1799. }
  1800. __finally
  1801. {
  1802. SAFE_DELETE(pStream);
  1803. }
  1804. }
  1805. #if 0
  1806. switch(nObjType)
  1807. {
  1808. case 200: pObj->Text = ASymbLibNmbr; break;
  1809. case 201: pObj->Text = AStreamAddr; break;
  1810. case 300: pObj->Text = ASymbLibNmbr; break;
  1811. case 301: pObj->Text = AStreamAddr; break;
  1812. }
  1813. #endif
  1814. pObj->Show();
  1815. pObj->BringToFront();
  1816. }
  1817. }
  1818. catch(EDatabaseError &E)
  1819. {
  1820. DBERRORMSG("TVMSM600M::LoadTrafficFormObjectInfo", String(E.ClassName()), E.Message, sQry);
  1821. throw Exception(String(E.ClassName()) + E.Message);
  1822. }
  1823. catch(Exception &exception)
  1824. {
  1825. DBERRORMSG("TVMSM600M::LoadTrafficFormObjectInfo", String(exception.ClassName()), exception.Message, sQry);
  1826. throw Exception(String(exception.ClassName()) + exception.Message);
  1827. }
  1828. }
  1829. __finally
  1830. {
  1831. if (pADO)
  1832. {
  1833. pADO->Close();
  1834. delete pADO;
  1835. }
  1836. }
  1837. return true;
  1838. }
  1839. //---------------------------------------------------------------------------
  1840. void __fastcall TVMSM600M::LoadVmsScheduleInfo(String AVmsNmbr)
  1841. {
  1842. int ii;
  1843. String sQry;
  1844. TADOQuery *pADO = NULL;
  1845. CMM_ClearGridTableView(TvGrid0);
  1846. sQry = "SELECT A.*, \r\n"
  1847. " B.VMS_FORM_IMAG, \r\n"
  1848. " B.VMS_TYPE_CD, \r\n"
  1849. " B.VMS_FORM_NM, \r\n"
  1850. " B.VMS_FORM_COLR_CD, \r\n"
  1851. " B.VMS_FORM_TYPE_CD \r\n"
  1852. " FROM TB_VMS_DSPL_SCH A, \r\n"
  1853. " TB_VMS_FORM B \r\n"
  1854. " WHERE A.VMS_SCH_TYPE = :p01 \r\n"
  1855. " AND A.VMS_CTLR_NMBR = :p02 \r\n"
  1856. " AND A.VMS_FORM_ID = B.VMS_FORM_ID \r\n"
  1857. // " AND B.VALID_YN = 'Y' \r\n"
  1858. " ORDER BY A.PHASE \r\n";
  1859. try
  1860. {
  1861. TvGrid0->BeginUpdate();
  1862. TcxDataController *pDcSch;
  1863. int nRow;
  1864. try
  1865. {
  1866. int nRow;
  1867. pADO = new TADOQuery(NULL);
  1868. pADO->Close();
  1869. pADO->Connection = ITSDb_GetConnection();
  1870. ITSDb_SQLText(pADO, sQry);
  1871. ITSDb_SQLBind(pADO, "p01", FVMS_SCH_TYPE);
  1872. ITSDb_SQLBind(pADO, "p02", AVmsNmbr);
  1873. ITSDb_SQLOpen(pADO);
  1874. int nFormType;
  1875. for( ; !pADO->Eof; pADO->Next())
  1876. {
  1877. nFormType = pADO->FieldByName("VMS_SCH_FORM_TYPE")->AsInteger;
  1878. if (nFormType < eSchTp_traffic && nFormType >= eSchTp_max) continue;
  1879. pDcSch = TvGrid0->DataController;
  1880. nRow = pDcSch->AppendRecord();
  1881. String sStrDate = pADO->FieldByName("DSPL_STRT_HH")->AsString;
  1882. String sEndDate = pADO->FieldByName("DSPL_END_HH")->AsString;
  1883. pDcSch->Values[nRow][Col00->Index] = pADO->FieldByName("VMS_FORM_ID")->AsString;
  1884. pDcSch->Values[nRow][Col01->Index] = pADO->FieldByName("VMS_FORM_IMAG")->AsVariant;
  1885. pDcSch->Values[nRow][Col02->Index] = pADO->FieldByName("FRST_VMS_IFSC_ID")->AsString;
  1886. pDcSch->Values[nRow][Col03->Index] = pADO->FieldByName("DSPL_HH")->AsString;
  1887. pDcSch->Values[nRow][Col04->Index] = ITSUtil_FormatStr(sStrDate, STR_HHNN);;
  1888. pDcSch->Values[nRow][Col05->Index] = ITSUtil_FormatStr(sEndDate, STR_HHNN);;
  1889. pDcSch->Values[nRow][Col06->Index] = pADO->FieldByName("USE_YN")->AsString;
  1890. pDcSch->Values[nRow][Col07->Index] = sStrDate;
  1891. pDcSch->Values[nRow][Col08->Index] = sEndDate;
  1892. pDcSch->Values[nRow][Col09->Index] = pADO->FieldByName("FRST_VMS_IFSC_ID")->AsString;
  1893. pDcSch->Values[nRow][Col10->Index] = pADO->FieldByName("SECD_VMS_IFSC_ID")->AsString;
  1894. pDcSch->Values[nRow][Col11->Index] = pADO->FieldByName("THIR_VMS_IFSC_ID")->AsString;
  1895. pDcSch->Values[nRow][Col12->Index] = pADO->FieldByName("FOUR_VMS_IFSC_ID")->AsString;
  1896. pDcSch->Values[nRow][Col13->Index] = pADO->FieldByName("VMS_TYPE_CD")->AsString;
  1897. pDcSch->Values[nRow][Col14->Index] = pADO->FieldByName("VMS_FORM_COLR_CD")->AsString;
  1898. pDcSch->Values[nRow][Col15->Index] = pADO->FieldByName("VMS_FORM_TYPE_CD")->AsString;
  1899. pDcSch->Values[nRow][Col16->Index] = pADO->FieldByName("FRST_IMG_IFSC_ID")->AsString;
  1900. pDcSch->Values[nRow][Col17->Index] = pADO->FieldByName("SECD_IMG_IFSC_ID")->AsString;
  1901. pDcSch->Values[nRow][Col18->Index] = pADO->FieldByName("THIR_IMG_IFSC_ID")->AsString;
  1902. pDcSch->Values[nRow][Col19->Index] = pADO->FieldByName("FOUR_IMG_IFSC_ID")->AsString;
  1903. pDcSch->Values[nRow][Col20->Index] = pADO->FieldByName("SYMB_LIB_NMBR")->AsString;
  1904. pDcSch->Values[nRow][Col21->Index] = pADO->FieldByName("STRM_ADDR")->AsString;
  1905. String sSchType = "교통";
  1906. switch(nFormType)
  1907. {
  1908. case eSchTp_traffic : sSchType = "교통"; break; // = 0, //0:교통,
  1909. case eSchTp_incident: sSchType = "돌발"; break; // = 1, //1:돌발,
  1910. case eSchTp_gongsa : sSchType = "공사"; break; // = 2, //2:공사행사,
  1911. case eSchTp_hongbo : sSchType = "홍보"; break; // = 3, //3:홍보,
  1912. case eSchTp_deture : sSchType = "우회"; break; // = 4, //4:우회,
  1913. case eSchTp_congest : sSchType = "정체"; break; // = 5, //5:정체,
  1914. case eSchTp_safe : sSchType = "안전"; break; // = 6, //6:안전,
  1915. case eSchTp_video : sSchType = "동영상"; break; // = 7, //7:동영상,
  1916. case eSchTp_stream : sSchType = "스트리밍영상"; break; // = 8, //8:스트리밍영상
  1917. case eSchTp_atmp : sSchType = "대기환경"; break; // = 9, //9:대기환경
  1918. case eSchTp_park : sSchType = "주차정보"; break; // = 10, //10:주차정보
  1919. }
  1920. pDcSch->Values[nRow][Col22->Index] = sSchType;
  1921. pDcSch->Values[nRow][Col23->Index] = nFormType;
  1922. pDcSch->Values[nRow][Col24->Index] = pADO->FieldByName("PHASE")->AsInteger;
  1923. pDcSch->Values[nRow][ColWeek1->Index] = pADO->FieldByName("SCH_WEEK1")->AsString;
  1924. pDcSch->Values[nRow][ColWeek2->Index] = pADO->FieldByName("SCH_WEEK2")->AsString;
  1925. pDcSch->Values[nRow][ColWeek3->Index] = pADO->FieldByName("SCH_WEEK3")->AsString;
  1926. pDcSch->Values[nRow][ColWeek4->Index] = pADO->FieldByName("SCH_WEEK4")->AsString;
  1927. pDcSch->Values[nRow][ColWeek5->Index] = pADO->FieldByName("SCH_WEEK5")->AsString;
  1928. pDcSch->Values[nRow][ColWeek6->Index] = pADO->FieldByName("SCH_WEEK6")->AsString;
  1929. pDcSch->Values[nRow][ColWeek7->Index] = pADO->FieldByName("SCH_WEEK7")->AsString;
  1930. pDcSch->Values[nRow][Col25->Index] = pADO->FieldByName("DSPL_CNGS_YN")->AsString;
  1931. }
  1932. }
  1933. catch(EDatabaseError &E)
  1934. {
  1935. DBERRORMSG("TVMSM600M::LoadVmsScheduleInfo", String(E.ClassName()), E.Message, sQry);
  1936. throw Exception(String(E.ClassName()) + E.Message);
  1937. }
  1938. catch(Exception &e)
  1939. {
  1940. DBERRORMSG("TVMSM600M::LoadVmsScheduleInfo", String(e.ClassName()), e.Message, sQry);
  1941. throw Exception(String(e.ClassName()) + e.Message);
  1942. }
  1943. }
  1944. __finally
  1945. {
  1946. if (pADO)
  1947. {
  1948. pADO->Close();
  1949. delete pADO;
  1950. }
  1951. TvGrid0->EndUpdate();
  1952. TvGrid0->ApplyBestFit(NULL, false, false);
  1953. }
  1954. }
  1955. //---------------------------------------------------------------------------
  1956. bool __fastcall TVMSM600M::LoadVmsFormList(String AFormSizeCd)
  1957. {
  1958. int ii;
  1959. for (ii = 0; ii < eSchTp_max; ii++)
  1960. {
  1961. if (FListFrm[ii]) CMM_ClearGridTableView(FListFrm[ii]);
  1962. }
  1963. String sQry;
  1964. TADOQuery *pADO = NULL;
  1965. //스케쥴에 등록할 폼은 유효성이 Y 인 것만 목록에 표출한다.
  1966. sQry = "SELECT A.* \r\n"
  1967. " FROM TB_VMS_FORM A \r\n"
  1968. " WHERE A.VMS_TYPE_CD = :p01 \r\n"
  1969. " AND A.VALID_YN = 'Y' \r\n"
  1970. " ORDER BY A.VMS_FORM_ID \r\n";
  1971. try
  1972. {
  1973. for (ii = 0; ii < eSchTp_max; ii++)
  1974. {
  1975. if (FListFrm[ii]) FListFrm[ii]->BeginUpdate();
  1976. }
  1977. TcxDataController *pGDC;
  1978. int nRow;
  1979. try
  1980. {
  1981. pADO = new TADOQuery(NULL);
  1982. pADO->Close();
  1983. pADO->Connection = ITSDb_GetConnection();
  1984. ITSDb_SQLText(pADO, sQry);
  1985. ITSDb_SQLBind(pADO, "p01", AFormSizeCd);
  1986. ITSDb_SQLOpen(pADO);
  1987. int nFormTypeCd, nFormIdx;
  1988. for( ; !pADO->Eof; pADO->Next())
  1989. {
  1990. nFormTypeCd = pADO->FieldByName("VMS_FORM_TYPE_CD")->AsInteger;
  1991. nFormIdx = VmsGetFormTypeIdx(nFormTypeCd);
  1992. if (nFormIdx < 0) continue;
  1993. if (!FListFrm[nFormIdx]) continue;
  1994. pGDC = FListFrm[nFormIdx]->DataController;
  1995. nRow = pGDC->AppendRecord();
  1996. pGDC->Values[nRow][0] = pADO->FieldByName("VMS_FORM_ID")->AsString;
  1997. pGDC->Values[nRow][1] = pADO->FieldByName("VMS_FORM_IMAG")->AsVariant;
  1998. pGDC->Values[nRow][2] = String(nFormTypeCd);
  1999. pGDC->Values[nRow][9] = pADO->FieldByName("VMS_FORM_NM")->AsString;
  2000. if (nFormTypeCd == 70)
  2001. {
  2002. pGDC->Values[nRow][3] = "200"; //동영상기본이미지번호
  2003. }
  2004. else
  2005. if (nFormTypeCd == 80)
  2006. {
  2007. pGDC->Values[nRow][3] = "300"; //스트리밍기본이미지번호
  2008. }
  2009. else
  2010. {
  2011. pGDC->Values[nRow][3] = "";
  2012. }
  2013. pGDC->Values[nRow][4] = "";
  2014. }
  2015. }
  2016. catch(EDatabaseError &E)
  2017. {
  2018. DBERRORMSG("TVMSM600M::LoadVmsFormList", String(E.ClassName()), E.Message, sQry);
  2019. throw Exception(String(E.ClassName()) + E.Message);
  2020. }
  2021. catch(Exception &e)
  2022. {
  2023. DBERRORMSG("TVMSM600M::LoadVmsFormList", String(e.ClassName()), e.Message, sQry);
  2024. throw Exception(String(e.ClassName()) + e.Message);
  2025. }
  2026. }
  2027. __finally
  2028. {
  2029. if (pADO)
  2030. {
  2031. pADO->Close();
  2032. delete pADO;
  2033. }
  2034. for (ii = 0; ii < eSchTp_max; ii++)
  2035. {
  2036. if (FListFrm[ii])
  2037. {
  2038. FListFrm[ii]->EndUpdate();
  2039. FListFrm[ii]->ApplyBestFit(NULL, false, false);
  2040. }
  2041. }
  2042. }
  2043. return true;
  2044. }
  2045. //---------------------------------------------------------------------------
  2046. void __fastcall TVMSM600M::BtnUpClick(TObject *Sender)
  2047. {
  2048. try
  2049. {
  2050. TvGrid0->BeginUpdate();
  2051. int nCurIdx = TvGrid0->DataController->FocusedRowIndex;//FocusedRecordIndex;
  2052. if (nCurIdx <= 0)
  2053. {
  2054. return;
  2055. }
  2056. int nUpIdx = nCurIdx-1;
  2057. try
  2058. {
  2059. int nCols = TvGrid0->ColumnCount;
  2060. for (int ii = 0; ii < nCols; ii++)
  2061. {
  2062. Variant va = TvGrid0->DataController->Values[nCurIdx][ii];
  2063. TvGrid0->DataController->Values[nCurIdx][ii] = TvGrid0->DataController->Values[nUpIdx][ii];
  2064. TvGrid0->DataController->Values[nUpIdx][ii] = va;
  2065. }
  2066. TvGrid0->Controller->ClearSelection();
  2067. TvGrid0->Controller->FocusedRowIndex = nUpIdx;
  2068. TvGrid0->ViewData->Records[nUpIdx]->Focused = true;
  2069. TvGrid0->ViewData->Records[nUpIdx]->Selected = true;
  2070. CxGrid0->SetFocus();
  2071. }
  2072. catch(...)
  2073. {
  2074. }
  2075. }
  2076. __finally
  2077. {
  2078. TvGrid0->EndUpdate();
  2079. }
  2080. }
  2081. //---------------------------------------------------------------------------
  2082. void __fastcall TVMSM600M::BtnDownClick(TObject *Sender)
  2083. {
  2084. try
  2085. {
  2086. TvGrid0->BeginUpdate();
  2087. int nCurIdx = TvGrid0->DataController->FocusedRowIndex;//FocusedRecordIndex;
  2088. if (nCurIdx < 0)
  2089. {
  2090. return;
  2091. }
  2092. if (nCurIdx == TvGrid0->DataController->RecordCount-1)
  2093. {
  2094. return;
  2095. }
  2096. int nDnIdx = nCurIdx+1;
  2097. try
  2098. {
  2099. int nCols = TvGrid0->ColumnCount;
  2100. for (int ii = 0; ii < nCols; ii++)
  2101. {
  2102. Variant va = TvGrid0->DataController->Values[nCurIdx][ii];
  2103. TvGrid0->DataController->Values[nCurIdx][ii] = TvGrid0->DataController->Values[nDnIdx][ii];
  2104. TvGrid0->DataController->Values[nDnIdx][ii] = va;
  2105. }
  2106. TvGrid0->Controller->ClearSelection();
  2107. TvGrid0->Controller->FocusedRowIndex = nDnIdx;
  2108. TvGrid0->ViewData->Records[nDnIdx]->Focused = true;
  2109. TvGrid0->ViewData->Records[nDnIdx]->Selected = true;
  2110. CxGrid0->SetFocus();
  2111. }
  2112. catch(...)
  2113. {
  2114. }
  2115. }
  2116. __finally
  2117. {
  2118. TvGrid0->EndUpdate();
  2119. }
  2120. }
  2121. //---------------------------------------------------------------------------
  2122. void __fastcall TVMSM600M::ChkAutoWidthPropertiesChange(TObject *Sender)
  2123. {
  2124. try
  2125. {
  2126. LockWindowUpdate(Handle);
  2127. TvGrid0->BeginUpdate();
  2128. if (ChkAutoWidth->Checked)
  2129. {
  2130. TvGrid0->OptionsView->DataRowHeight = 58;
  2131. TvGrid0->OptionsView->CellAutoHeight = false;
  2132. }
  2133. else
  2134. {
  2135. TvGrid0->OptionsView->DataRowHeight = 0;
  2136. TvGrid0->OptionsView->CellAutoHeight = true;
  2137. }
  2138. TvGrid0->OptionsView->ColumnAutoWidth = ChkAutoWidth->Checked;
  2139. }
  2140. __finally
  2141. {
  2142. TvGrid0->EndUpdate();
  2143. LockWindowUpdate(0);
  2144. //BtnBestFit->Visible = !ChkAutoWidth->Checked;
  2145. }
  2146. }
  2147. //---------------------------------------------------------------------------
  2148. void __fastcall TVMSM600M::BtnBestFitClick(TObject *Sender)
  2149. {
  2150. try
  2151. {
  2152. LockWindowUpdate(Handle);
  2153. TvGrid0->BeginUpdate();
  2154. TvGrid0->ApplyBestFit(NULL, false, false);
  2155. }
  2156. __finally
  2157. {
  2158. TvGrid0->EndUpdate();
  2159. LockWindowUpdate(0);
  2160. }
  2161. }
  2162. //---------------------------------------------------------------------------
  2163. void __fastcall TVMSM600M::BtnSchWeekClick(TObject *Sender)
  2164. {
  2165. TcxGridTableView *pTvList = TvGrid0;
  2166. TcxGridDataController *pGDC;
  2167. pGDC = pTvList->DataController;
  2168. int nFormIdx = CMM_GetRecordIndex(pTvList);
  2169. if (nFormIdx < 0)
  2170. {
  2171. Application->MessageBox(L"목록에서 VMS 스케쥴을 선택하세요.",
  2172. L"요일별 스케쥴 편집", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  2173. return;
  2174. }
  2175. //int PHASE = pGDC->Values[nFormIdx][Col24->Index];
  2176. int nIdx = ColWeek1->Index;
  2177. TVMSM650M *pFrm = new TVMSM650M(this);
  2178. for (int ii = 0; ii < 7; ii++)
  2179. {
  2180. pFrm->FSchWeek[ii] = pGDC->Values[nFormIdx][nIdx+ii];
  2181. }
  2182. pFrm->ShowModal();
  2183. if (pFrm->FSelected)
  2184. {
  2185. for (int ii = 0; ii < 7; ii++)
  2186. {
  2187. pGDC->Values[nFormIdx][nIdx+ii] = pFrm->FSchWeek[ii];
  2188. }
  2189. }
  2190. delete pFrm;
  2191. pFrm = NULL;
  2192. }
  2193. //---------------------------------------------------------------------------
  2194. void __fastcall TVMSM600M::Col05CustomDrawCell(TcxCustomGridTableView *Sender, TcxCanvas *ACanvas, TcxGridTableDataCellViewInfo *AViewInfo,
  2195. bool &ADone)
  2196. {
  2197. int nRecordIdx = AViewInfo->GridRecord->RecordIndex;
  2198. if (nRecordIdx < 0)
  2199. {
  2200. return;
  2201. }
  2202. try
  2203. {
  2204. int nItemIdx = AViewInfo->Item->Index;
  2205. if (VarIsNull(AViewInfo->GridRecord->DisplayTexts[nItemIdx])) return;
  2206. String sEndDt = AViewInfo->GridRecord->DisplayTexts[nItemIdx];
  2207. if (sEndDt < Now().FormatString(STR_HHNN))
  2208. {
  2209. ACanvas->Canvas->Brush->Color = clSilver;
  2210. }
  2211. }
  2212. catch(Exception &e)
  2213. {
  2214. }
  2215. }
  2216. //---------------------------------------------------------------------------
  2217. void __fastcall TVMSM600M::Col00CustomDrawCell(TcxCustomGridTableView *Sender, TcxCanvas *ACanvas, TcxGridTableDataCellViewInfo *AViewInfo,
  2218. bool &ADone)
  2219. {
  2220. #if 0
  2221. int nRecordIdx = AViewInfo->GridRecord->RecordIndex;
  2222. if (nRecordIdx < 0)
  2223. {
  2224. return;
  2225. }
  2226. try
  2227. {
  2228. if (VarToStr(AViewInfo->GridRecord->DisplayTexts[15]).ToIntDef(0) != eFormTp_congest)
  2229. {
  2230. return;
  2231. }
  2232. if (VarIsNull(AViewInfo->GridRecord->DisplayTexts[9]))
  2233. {
  2234. ACanvas->Canvas->Brush->Color = clRed;
  2235. }
  2236. else
  2237. {
  2238. String IFSC_ID = AViewInfo->GridRecord->DisplayTexts[9].Trim();
  2239. if (IFSC_ID == "" || IFSC_ID == "0")
  2240. {
  2241. ACanvas->Canvas->Brush->Color = clRed;
  2242. }
  2243. }
  2244. }
  2245. catch(Exception &e)
  2246. {
  2247. }
  2248. #endif
  2249. }
  2250. //---------------------------------------------------------------------------
  2251. void __fastcall TVMSM600M::Col06CustomDrawCell(TcxCustomGridTableView *Sender, TcxCanvas *ACanvas, TcxGridTableDataCellViewInfo *AViewInfo,
  2252. bool &ADone)
  2253. {
  2254. int nRecordIdx = AViewInfo->GridRecord->RecordIndex;
  2255. if (nRecordIdx < 0)
  2256. {
  2257. return;
  2258. }
  2259. try
  2260. {
  2261. int nItemIdx = AViewInfo->Item->Index;
  2262. if (VarIsNull(AViewInfo->GridRecord->DisplayTexts[nItemIdx])) return;
  2263. String sUseYn = AViewInfo->GridRecord->DisplayTexts[nItemIdx];
  2264. if (sUseYn == "N")
  2265. {
  2266. ACanvas->Canvas->Brush->Color = clRed;
  2267. }
  2268. }
  2269. catch(Exception &e)
  2270. {
  2271. }
  2272. }
  2273. //---------------------------------------------------------------------------