VMSM600MF.cpp 92 KB

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