VMSM700MF.cpp 66 KB

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