VMSM610MF.cpp 40 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #include "ITSSkinF.h"
  4. #include "ITSUtilF.h"
  5. #include "AppGlobalF.h"
  6. #include "CDSVmsIfscF.h"
  7. #include "CDSFontF.h"
  8. #pragma hdrstop
  9. #include "VMSM610MF.h"
  10. //---------------------------------------------------------------------------
  11. #pragma package(smart_init)
  12. #pragma link "cxButtons"
  13. #pragma link "cxCalendar"
  14. #pragma link "cxContainer"
  15. #pragma link "cxControls"
  16. #pragma link "cxDropDownEdit"
  17. #pragma link "cxEdit"
  18. #pragma link "cxGraphics"
  19. #pragma link "cxGroupBox"
  20. #pragma link "cxLabel"
  21. #pragma link "cxLookAndFeelPainters"
  22. #pragma link "cxLookAndFeels"
  23. #pragma link "cxMaskEdit"
  24. #pragma link "cxPC"
  25. #pragma link "cxPCdxBarPopupMenu"
  26. #pragma link "cxSpinEdit"
  27. #pragma link "cxSplitter"
  28. #pragma link "cxTextEdit"
  29. #pragma link "cxTimeEdit"
  30. #pragma link "dxSkinBlack"
  31. #pragma link "dxSkinBlue"
  32. #pragma link "dxSkinCaramel"
  33. #pragma link "dxSkinCoffee"
  34. #pragma link "dxSkinDarkRoom"
  35. #pragma link "dxSkinDarkSide"
  36. #pragma link "dxSkinFoggy"
  37. #pragma link "dxSkinGlassOceans"
  38. #pragma link "dxSkiniMaginary"
  39. #pragma link "dxSkinLilian"
  40. #pragma link "dxSkinLiquidSky"
  41. #pragma link "dxSkinLondonLiquidSky"
  42. #pragma link "dxSkinMcSkin"
  43. #pragma link "dxSkinMoneyTwins"
  44. #pragma link "dxSkinOffice2007Black"
  45. #pragma link "dxSkinOffice2007Blue"
  46. #pragma link "dxSkinOffice2007Green"
  47. #pragma link "dxSkinOffice2007Pink"
  48. #pragma link "dxSkinOffice2007Silver"
  49. #pragma link "dxSkinOffice2010Black"
  50. #pragma link "dxSkinOffice2010Blue"
  51. #pragma link "dxSkinOffice2010Silver"
  52. #pragma link "dxSkinsCore"
  53. #pragma link "dxSkinscxPCPainter"
  54. #pragma link "dxSkinSeven"
  55. #pragma link "dxSkinSharp"
  56. #pragma link "dxSkinSilver"
  57. #pragma link "dxSkinStardust"
  58. #pragma link "cxRadioGroup"
  59. #pragma link "cxClasses"
  60. #pragma link "cxCustomData"
  61. #pragma link "cxData"
  62. #pragma link "cxDataStorage"
  63. #pragma link "cxDBData"
  64. #pragma link "cxFilter"
  65. #pragma link "cxGrid"
  66. #pragma link "cxGridCustomTableView"
  67. #pragma link "cxGridCustomView"
  68. #pragma link "cxGridDBTableView"
  69. #pragma link "cxGridLevel"
  70. #pragma link "cxGridTableView"
  71. #pragma link "cxStyles"
  72. #pragma link "cxCheckBox"
  73. #pragma link "cxImage"
  74. #pragma link "cxButtonEdit"
  75. #pragma link "cxBlobEdit"
  76. #pragma link "VmsDesignerF"
  77. #pragma link "cxColorComboBox"
  78. #pragma link "cxCalc"
  79. #pragma resource "*.dfm"
  80. TVMSM610M *VMSM610M = NULL;
  81. //---------------------------------------------------------------------------
  82. __fastcall TVMSM610M::TVMSM610M(TComponent* Owner)
  83. : TForm(Owner)
  84. {
  85. ITSSkin_Load(this);
  86. ////CMM_LoadForm(g_sFormsDir, this);
  87. FSelected = false;
  88. FUpdate= false;
  89. FTitle = Caption;//"VMS 교통상황 폼 관리";
  90. }
  91. //---------------------------------------------------------------------------
  92. void __fastcall TVMSM610M::CommClose()
  93. {
  94. try
  95. {
  96. if (m_pEdtDesigner)
  97. {
  98. delete m_pEdtDesigner;
  99. m_pEdtDesigner = NULL;
  100. }
  101. ////CMM_SaveForm(g_sFormsDir, this);
  102. }
  103. catch(...)
  104. {
  105. }
  106. }
  107. //---------------------------------------------------------------------------
  108. void __fastcall TVMSM610M::FormCreate(TObject *Sender)
  109. {
  110. m_pEdtDesigner = new TVmsFormDesigner(PnlEditForm);
  111. //FOR_STL(TCDSFontColor*, pObj, CDSFontManager->FColors)
  112. {
  113. ////m_pEdtDesigner->InitFontColor(pObj->VMS_FONT_COLR_CD, (TColor)pObj->VMS_FONT_COLR_VAL);
  114. }
  115. }
  116. //---------------------------------------------------------------------------
  117. void __fastcall TVMSM610M::FormShow(TObject *Sender)
  118. {
  119. Refresh();
  120. FormInit();
  121. PnlEdtBack->Width = FVmsWidth+4;
  122. PnlEdtBack->Height= FVmsHeight+4;
  123. LoadVmsIfsc(FVmsNmbr);
  124. TmrShow->Enabled = true;
  125. }
  126. //---------------------------------------------------------------------------
  127. void __fastcall TVMSM610M::FormInit()
  128. {
  129. //TvObjList->OptionsView->NoDataToDisplayInfoText = "<등록되어 있는 객체 정보가 없습니다>";
  130. m_pEdtDesigner->ApplicationHandle = (long)Handle;
  131. FNewDb = false;
  132. }
  133. //---------------------------------------------------------------------------
  134. void __fastcall TVMSM610M::LoadVmsIfsc(String AVmsNmbr)
  135. {
  136. CMM_ClearGridTableView(TvAxis);
  137. String sQry;
  138. TADOQuery *pADO = NULL;
  139. sQry = "SELECT C.VMS_CTLR_ID, C.VMS_CTLR_ID, C.VMS_NM, \r\n"
  140. " A.VMS_IFSC_ID, A.VMS_IFSC_NM, \r\n"
  141. " A.DSPL_STRT_NODE_NM, A.DSPL_END_NODE_NM, \r\n"
  142. " A.AXIS_YN \r\n"
  143. " FROM TB_VMS_IFSC A, \r\n"
  144. " TB_VMS_RLTN_IFSC B, \r\n"
  145. " (SELECT VMS_CTLR_ID, \r\n"
  146. " VMS_CTLR_ID, \r\n"
  147. " VMS_NM \r\n"
  148. " FROM TB_VMS_CTLR \r\n"
  149. " WHERE VMS_CTLR_ID = :p01) C \r\n"
  150. " WHERE A.USE_YN = 'Y' \r\n"
  151. " AND A.VMS_IFSC_ID = B.VMS_IFSC_ID \r\n"
  152. " AND B.VMS_CTLR_ID = C.VMS_CTLR_ID \r\n";
  153. try
  154. {
  155. int nRow;
  156. TcxDataController *pGDC = TvAxis->DataController;
  157. TvAxis->BeginUpdate();
  158. try
  159. {
  160. pADO = new TADOQuery(NULL);
  161. pADO->Close();
  162. pADO->Connection = ITSDb_GetConnection();
  163. ITSDb_SQLText(pADO, sQry);
  164. ITSDb_SQLBind(pADO, "p01", AVmsNmbr);
  165. ITSDb_SQLOpen(pADO);
  166. for( ; !pADO->Eof; pADO->Next())
  167. {
  168. nRow = pGDC->AppendRecord();
  169. pGDC->Values[nRow][Col00->Index] = pADO->FieldByName("VMS_CTLR_ID")->AsString;
  170. pGDC->Values[nRow][Col01->Index] = pADO->FieldByName("VMS_IFSC_ID")->AsString;
  171. pGDC->Values[nRow][Col02->Index] = pADO->FieldByName("VMS_IFSC_NM")->AsString;
  172. pGDC->Values[nRow][Col03->Index] = pADO->FieldByName("DSPL_STRT_NODE_NM")->AsString;
  173. pGDC->Values[nRow][Col04->Index] = pADO->FieldByName("DSPL_END_NODE_NM")->AsString;
  174. pGDC->Values[nRow][Col05->Index] = pADO->FieldByName("AXIS_YN")->AsString;
  175. }
  176. }
  177. catch(EDatabaseError &E)
  178. {
  179. DBERRORMSG("VMS Sect Query", String(E.ClassName()), E.Message, sQry);
  180. throw Exception(String(E.ClassName()) + E.Message);
  181. }
  182. catch(Exception &e)
  183. {
  184. DBERRORMSG("VMS Sect Query", String(e.ClassName()), e.Message, sQry);
  185. throw Exception(String(e.ClassName()) + e.Message);
  186. }
  187. }
  188. __finally
  189. {
  190. if (pADO)
  191. {
  192. pADO->Close();
  193. delete pADO;
  194. }
  195. TvAxis->EndUpdate();
  196. CMM_ExpandCollapseChk(TvAxis, true);
  197. }
  198. }
  199. //---------------------------------------------------------------------------
  200. void __fastcall TVMSM610M::TmrShowTimer(TObject *Sender)
  201. {
  202. TmrShow->Enabled = false;
  203. BtnSearchClick(NULL);
  204. }
  205. //---------------------------------------------------------------------------
  206. void __fastcall TVMSM610M::BtnSearchClick(TObject *Sender)
  207. {
  208. RefreshData();
  209. EdFocus->SetFocus();
  210. }
  211. //---------------------------------------------------------------------------
  212. void __fastcall TVMSM610M::RefreshData()
  213. {
  214. // 검색조건에 의한 링크 데이터 조회
  215. FormClear();
  216. m_pEdtDesigner->Clear();
  217. m_pEdtDesigner->SizeType = FVmsTypeCd;
  218. m_pEdtDesigner->SetSize(FVmsWidth, FVmsHeight);
  219. m_pEdtDesigner->SetPos(0, 0);
  220. m_pEdtDesigner->BkColorCode = FFormColor;
  221. m_pEdtDesigner->EditMode = true;
  222. m_pEdtDesigner->Show();
  223. InitObjectList();
  224. LoadFormObjectInfo(FFormId, m_pEdtDesigner);
  225. DispObjectListData();
  226. }
  227. //---------------------------------------------------------------------------
  228. void __fastcall TVMSM610M::AddTrafficTypeObject(int ARow, String AIfscId)
  229. {
  230. TVmsIfsc *pObj;
  231. TcxGridDataController *pGDC = TvObjList->DataController;
  232. pGDC->Values[ARow][ColIfscId->Index] = AIfscId;
  233. //pObj = VmsIfscManager->FLists.Find(FIfscId[0].ToIntDef(0));
  234. pObj = VmsIfscManager->FLists.Find(AIfscId.ToIntDef(0));
  235. if (!pObj) return;
  236. pGDC->Values[ARow][ColIfscNm->Index] = pObj->VMS_IFSC_NM;
  237. pGDC->Values[ARow][ColIfscStr->Index] = pObj->DSPL_STRT_NODE_NM;
  238. pGDC->Values[ARow][ColIfscEnd->Index] = pObj->DSPL_END_NODE_NM;
  239. }
  240. //---------------------------------------------------------------------------
  241. void __fastcall TVMSM610M::InitObjectList()
  242. {
  243. CMM_ClearGridTableView(TvObjList);
  244. TcxGridDataController *pGDC = TvObjList->DataController;
  245. ColObj03->Visible = false;
  246. ColObj04->Visible = false;
  247. try
  248. {
  249. TvObjList->BeginUpdate();
  250. pGDC->BeginUpdate();
  251. int nRow;
  252. switch(FFormType)
  253. {
  254. case 11:// ' 소통상황(1단)
  255. nRow = pGDC->AppendRecord();
  256. pGDC->Values[nRow][ColObj01->Index] = "11";
  257. pGDC->Values[nRow][ColObj02->Index] = FrmLang->lblForm11->Caption;//"1Row Traffic";//"1단 소통정보";
  258. pGDC->Values[nRow][ColObjType->Index] = "Form";
  259. AddTrafficTypeObject(nRow, FIfscId[0]);
  260. break;
  261. case 12:// ' 소통상황(2단)
  262. nRow = pGDC->AppendRecord();
  263. pGDC->Values[nRow][ColObj01->Index] = "11";
  264. pGDC->Values[nRow][ColObj02->Index] = FrmLang->lblForm11->Caption;//"1Row Traffic";//"1단 소통정보";
  265. pGDC->Values[nRow][ColObjType->Index] = "Form";
  266. AddTrafficTypeObject(nRow, FIfscId[0]);
  267. nRow = pGDC->AppendRecord();
  268. pGDC->Values[nRow][ColObj01->Index] = "12";
  269. pGDC->Values[nRow][ColObj02->Index] = FrmLang->lblForm12->Caption;//"2Row Traffic";//"2단 소통정보";
  270. pGDC->Values[nRow][ColObjType->Index] = "Form";
  271. AddTrafficTypeObject(nRow, FIfscId[1]);
  272. break;
  273. case 13:// ' 소통상황(3단)
  274. nRow = pGDC->AppendRecord();
  275. pGDC->Values[nRow][ColObj01->Index] = "11";
  276. pGDC->Values[nRow][ColObj02->Index] = FrmLang->lblForm11->Caption;//"1Row Traffic";//"1단 소통정보";
  277. pGDC->Values[nRow][ColObjType->Index] = "Form";
  278. AddTrafficTypeObject(nRow, FIfscId[0]);
  279. nRow = pGDC->AppendRecord();
  280. pGDC->Values[nRow][ColObj01->Index] = "12";
  281. pGDC->Values[nRow][ColObj02->Index] = FrmLang->lblForm12->Caption;//"2Row Traffic";//"2단 소통정보";
  282. pGDC->Values[nRow][ColObjType->Index] = "Form";
  283. AddTrafficTypeObject(nRow, FIfscId[1]);
  284. nRow = pGDC->AppendRecord();
  285. pGDC->Values[nRow][ColObj01->Index] = "13";
  286. pGDC->Values[nRow][ColObj02->Index] = FrmLang->lblForm13->Caption;//"3Row Traffic";//"3단 소통정보";
  287. pGDC->Values[nRow][ColObjType->Index] = "Form";
  288. AddTrafficTypeObject(nRow, FIfscId[2]);
  289. break;
  290. case 14:// ' 소통상황(4단)
  291. nRow = pGDC->AppendRecord();
  292. pGDC->Values[nRow][ColObj01->Index] = "11";
  293. pGDC->Values[nRow][ColObj02->Index] = FrmLang->lblForm11->Caption;//"1Row Traffic";//"1단 소통정보";
  294. pGDC->Values[nRow][ColObjType->Index] = "Form";
  295. AddTrafficTypeObject(nRow, FIfscId[0]);
  296. nRow = pGDC->AppendRecord();
  297. pGDC->Values[nRow][ColObj01->Index] = "12";
  298. pGDC->Values[nRow][ColObj02->Index] = FrmLang->lblForm12->Caption;//"2Row Traffic";//"2단 소통정보";
  299. pGDC->Values[nRow][ColObjType->Index] = "Form";
  300. AddTrafficTypeObject(nRow, FIfscId[1]);
  301. nRow = pGDC->AppendRecord();
  302. pGDC->Values[nRow][ColObj01->Index] = "13";
  303. pGDC->Values[nRow][ColObj02->Index] = FrmLang->lblForm13->Caption;//""3Row Traffic";//"3단 소통정보";
  304. pGDC->Values[nRow][ColObjType->Index] = "Form";
  305. AddTrafficTypeObject(nRow, FIfscId[2]);
  306. nRow = pGDC->AppendRecord();
  307. pGDC->Values[nRow][ColObj01->Index] = "14";
  308. pGDC->Values[nRow][ColObj02->Index] = FrmLang->lblForm14->Caption;//""4Row Traffic";//"4단 소통정보";
  309. pGDC->Values[nRow][ColObjType->Index] = "Form";
  310. AddTrafficTypeObject(nRow, FIfscId[2]);
  311. break;
  312. case 15:// ' 소통상황(도형식)
  313. ColObj03->Visible = true;
  314. break;
  315. default:
  316. break;
  317. }
  318. }
  319. __finally
  320. {
  321. pGDC->EndUpdate();
  322. TvObjList->EndUpdate();
  323. }
  324. }
  325. //---------------------------------------------------------------------------
  326. void __fastcall TVMSM610M::DispObjectListData()
  327. {
  328. TcxGridDataController *pGDC = TvObjList->DataController;
  329. int nRow;
  330. TVmsFormObject *pObj;
  331. int nObjCnt = m_pEdtDesigner->GetObjectCount();
  332. for(int ii = 0; ii < nObjCnt; ii++)
  333. {
  334. pObj = m_pEdtDesigner->GetObject(ii);
  335. if (pObj)
  336. {
  337. switch(pObj->ObjType.ToIntDef(0))
  338. {
  339. case 91: //@축통행시간(고정)
  340. nRow = pGDC->AppendRecord();
  341. pGDC->Values[nRow][ColObj01->Index] = "15";
  342. pGDC->Values[nRow][ColObj02->Index] = FrmLang->lblFill91->Caption;//"AxisTravelTime";//"축통행시간(고정)";
  343. pGDC->Values[nRow][ColObj03->Index] = String(pObj->ObjSeq);
  344. pGDC->Values[nRow][ColObjType->Index] = "x";
  345. AddTrafficTypeObject(nRow, pObj->Tag);
  346. break;
  347. case 92: //@축소통상황(고정)
  348. nRow = pGDC->AppendRecord();
  349. pGDC->Values[nRow][ColObj01->Index] = "15";
  350. pGDC->Values[nRow][ColObj02->Index] = FrmLang->lblFill92->Caption;//"Traffic(Fix)";//"소통상황(고정)";
  351. pGDC->Values[nRow][ColObj03->Index] = String(pObj->ObjSeq);
  352. pGDC->Values[nRow][ColObjType->Index] = "x";
  353. AddTrafficTypeObject(nRow, pObj->Tag);
  354. break;
  355. #if 0
  356. case 17: //@소통정보이미지1
  357. nRow = pGDC->AppendRecord();
  358. pGDC->Values[nRow][ColObj01->Index] = String(FFormType);//"17";
  359. pGDC->Values[nRow][ColObj02->Index] = FrmLang->lblFill17->Caption;//"TrafficImage";//"소통정보이미지";
  360. pGDC->Values[nRow][ColObj03->Index] = String(pObj->ObjSeq);
  361. pGDC->Values[nRow][ColObjType->Index] = "17";
  362. AddTrafficTypeObject(nRow, FIfscId[4]);
  363. break;
  364. case 27: //@소통정보이미지2
  365. nRow = pGDC->AppendRecord();
  366. pGDC->Values[nRow][ColObj01->Index] = String(FFormType);//"27";
  367. pGDC->Values[nRow][ColObj02->Index] = FrmLang->lblFill27->Caption;//"TrafficImage2";//"소통정보이미지2";
  368. pGDC->Values[nRow][ColObj03->Index] = String(pObj->ObjSeq);
  369. pGDC->Values[nRow][ColObjType->Index] = "27";
  370. AddTrafficTypeObject(nRow, FIfscId[5]);
  371. break;
  372. case 37: //@소통정보이미지3
  373. nRow = pGDC->AppendRecord();
  374. pGDC->Values[nRow][ColObj01->Index] = String(FFormType);//"37";
  375. pGDC->Values[nRow][ColObj02->Index] = FrmLang->lblFill37->Caption;//"TrafficImage3";//"소통정보이미지3";
  376. pGDC->Values[nRow][ColObj03->Index] = String(pObj->ObjSeq);
  377. pGDC->Values[nRow][ColObjType->Index] = "37";
  378. AddTrafficTypeObject(nRow, FIfscId[6]);
  379. break;
  380. case 47: //@소통정보이미지4
  381. nRow = pGDC->AppendRecord();
  382. pGDC->Values[nRow][ColObj01->Index] = String(FFormType);//"47";
  383. pGDC->Values[nRow][ColObj02->Index] = FrmLang->lblFill47->Caption;//"TrafficImage4";//"소통정보이미지4";
  384. pGDC->Values[nRow][ColObj03->Index] = String(pObj->ObjSeq);
  385. pGDC->Values[nRow][ColObjType->Index] = "47";
  386. AddTrafficTypeObject(nRow, FIfscId[7]);
  387. break;
  388. #endif
  389. }
  390. }
  391. }
  392. }
  393. //---------------------------------------------------------------------------
  394. void __fastcall TVMSM610M::BtnClosexClick(TObject *Sender)
  395. {
  396. FSelected = false;
  397. Close();
  398. }
  399. //---------------------------------------------------------------------------
  400. void __fastcall TVMSM610M::FormClose(TObject *Sender, TCloseAction &Action)
  401. {
  402. CommClose();
  403. VMSM610M = NULL;
  404. //Action = caFree;
  405. }
  406. //---------------------------------------------------------------------------
  407. void __fastcall TVMSM610M::LoadFormObjectInfo(String AFormId, TVmsFormDesigner *ADesigner)
  408. {
  409. ADesigner->Clear();
  410. String sQry;
  411. TADOQuery *pADO = NULL;
  412. sQry = "SELECT A.*, \r\n"
  413. " C.VMS_FONT_NAME_NM, \r\n"
  414. " B.IMAG_DATA AS SYMB_IMG, \r\n"
  415. " B.SYMB_EXPL AS SYMB_IMG_NM, \r\n"
  416. " D.VMS_FORM_TYPE_CD \r\n"
  417. " FROM TB_VMS_FORM_OBJECT A, \r\n"
  418. " TB_VMS_SYMB_LIB B, \r\n"
  419. " TB_VMS_FONT_NAME C, \r\n"
  420. " TB_VMS_FORM D \r\n"
  421. " WHERE D.VMS_FORM_ID = :p01 \r\n"
  422. " AND D.VMS_FORM_ID = A.VMS_FORM_ID \r\n"
  423. " AND A.SYMB_LIB_NMBR = B.SYMB_LIB_NMBR(+) \r\n"
  424. " AND A.VMS_FONT_NAME_CD = C.VMS_FONT_NAME_CD(+) \r\n"
  425. " ORDER BY A.VMS_FORM_OBJECT_ID ASC \r\n";
  426. int VMS_FORM_TYPE_CD = -1;
  427. try
  428. {
  429. try
  430. {
  431. pADO = new TADOQuery(NULL);
  432. pADO->Close();
  433. pADO->Connection = ITSDb_GetConnection();
  434. ITSDb_SQLText(pADO, sQry);
  435. ITSDb_SQLBind(pADO, "p01", AFormId);
  436. ITSDb_SQLOpen(pADO);
  437. int nDrawType;
  438. String sObjKind;
  439. for( ; !pADO->Eof; pADO->Next())
  440. {
  441. VMS_FORM_TYPE_CD = pADO->FieldByName("VMS_FORM_TYPE_CD")->AsInteger;
  442. int nFormId = pADO->FieldByName("VMS_FORM_ID")->AsInteger;
  443. int nObjId = pADO->FieldByName("VMS_FORM_OBJECT_ID")->AsInteger;
  444. int nObjType = pADO->FieldByName("VMS_FORM_OBJECT_TYPE_CD")->AsInteger;
  445. if (nObjType == 1 || //심볼
  446. nObjType == 2 || //이미지
  447. nObjType == 3 || //배경이미지
  448. nObjType == 17 || //@소통정보이미지 (1열)
  449. nObjType == 27 || //@소통정보이미지2(2열)
  450. nObjType == 37 || //@소통정보이미지3(3열)
  451. nObjType == 47 || //@소통정보이미지4(3열)
  452. nObjType == 200 || //동영상
  453. nObjType == 300 || //스트리밍영상
  454. nObjType == 406 || //@통합대기등급 이미지
  455. nObjType == 407 || //@미세먼지등급 이미지
  456. nObjType == 408 || //@초미세먼지등급 이미지
  457. nObjType == 413 //@오존등급이미지
  458. )
  459. {
  460. if (nObjType == 1) sObjKind = OBJKIND_IMAGEID; //Image Id
  461. else sObjKind = OBJKIND_IMAGE; //Image
  462. nDrawType = 1; //이미지그리기
  463. }
  464. else
  465. {
  466. sObjKind = OBJKIND_TEXT; //문자열
  467. nDrawType = 0; //문자열그리기
  468. }
  469. //실재 맵핑된 구간의 정보를 표출하도록 한다.
  470. int nBlinking = pADO->FieldByName("VMS_DSPL_BLINKING")->AsInteger;
  471. int nPosX = pADO->FieldByName("VMS_DSPL_XCRDN")->AsInteger;
  472. int nPosY = pADO->FieldByName("VMS_DSPL_YCRDN")->AsInteger;
  473. int nDsplW = pADO->FieldByName("VMS_DSPL_WIDTH")->AsInteger;
  474. int nDsplH = pADO->FieldByName("VMS_DSPL_HEIGHT")->AsInteger;
  475. TVmsFormObject *pObj = ADesigner->AddObject((VmsObjectDrawType)nDrawType);
  476. if (!pObj) continue;
  477. //11 , ' @구간명
  478. //12 , ' @시점명
  479. //13 , ' @종점명
  480. //14 , ' @소통상황
  481. //15 , ' @통행시간
  482. //16 , ' @통행속도
  483. //17 , ' @방향
  484. pObj->Text = pADO->FieldByName("VMS_DSPL_TXT")->AsString.Trim();
  485. pObj->RunText = pObj->Text;
  486. String sIfscId = "";
  487. if (nObjType >= 11 && nObjType < 17)
  488. sIfscId = FIfscId[0];
  489. else
  490. if (nObjType >= 21 && nObjType < 27)
  491. sIfscId = FIfscId[1];
  492. else
  493. if (nObjType >= 31 && nObjType < 37)
  494. sIfscId = FIfscId[2];
  495. else
  496. if (nObjType >= 41 && nObjType < 47)
  497. sIfscId = FIfscId[3];
  498. switch(nObjType)
  499. {
  500. case 17: sIfscId = FIfscId[4]; break;
  501. case 27: sIfscId = FIfscId[5]; break;
  502. case 37: sIfscId = FIfscId[6]; break;
  503. case 47: sIfscId = FIfscId[7]; break;
  504. }
  505. if (sIfscId != "")
  506. {
  507. TVmsIfsc *pIfscObj;
  508. pIfscObj = VmsIfscManager->FLists.Find(sIfscId.ToIntDef(0));
  509. if (pIfscObj)
  510. {
  511. switch(nObjType)
  512. {
  513. case 11: case 21: case 31: case 41:
  514. pObj->RunText = pIfscObj->VMS_IFSC_NM;
  515. break;
  516. case 12: case 22: case 32: case 42:
  517. pObj->RunText = pIfscObj->DSPL_STRT_NODE_NM;
  518. break;
  519. case 13: case 23: case 33: case 43:
  520. pObj->RunText = pIfscObj->DSPL_END_NODE_NM;
  521. break;
  522. }
  523. }
  524. }
  525. if (nObjType == 200 || nObjType == 300)
  526. {
  527. pObj->EditMode = false;
  528. }
  529. pObj->ObjSeq = nObjId;
  530. pObj->ObjId = nObjId;
  531. pObj->ObjKind = sObjKind;
  532. pObj->Tag = pADO->FieldByName("VMS_IFSC_ID")->AsString;
  533. pObj->ObjType = pADO->FieldByName("VMS_FORM_OBJECT_TYPE_CD")->AsString;
  534. pObj->ObjSize = pADO->FieldByName("VMS_DSPL_SIZE")->AsInteger;
  535. pObj->BkColorCode = pADO->FieldByName("VMS_DSPL_BKCOLOR")->AsString;
  536. pObj->Blink = nBlinking == 1 ? true : false;
  537. pObj->ImageId = pADO->FieldByName("SYMB_LIB_NMBR")->AsString;
  538. pObj->SetPos(nPosX, nPosY);
  539. if (pObj->ObjKind == OBJKIND_TEXT) // 문자열
  540. {
  541. int nFontBold = pADO->FieldByName("VMS_FONT_BOLD")->AsInteger;
  542. pObj->FontName = pADO->FieldByName("VMS_FONT_NAME_NM")->AsString;
  543. pObj->FontNameCode = pADO->FieldByName("VMS_FONT_NAME_CD")->AsString;
  544. pObj->FontColorCode = pADO->FieldByName("VMS_FONT_COLR_CD")->AsString;
  545. pObj->FontSize = pADO->FieldByName("VMS_FONT_SIZE")->AsInteger;
  546. pObj->FontBold = nFontBold == 1 ? true : false;
  547. pObj->TextAlign = pADO->FieldByName("VMS_FONT_ALIGN")->AsInteger;
  548. //pObj->SetSize(pADO->FieldByName("VMS_DSPL_WIDTH")->AsInteger, pADO->FieldByName("VMS_DSPL_HEIGHT")->AsInteger);
  549. //pObj->SetPos(nPosX, nPosY);
  550. pObj->SetRuntimeText(pObj->RunText);
  551. #if 0
  552. Label1->AutoSize = true;
  553. Label1->Font->Name = pObj->FontName;
  554. Label1->Font->Size = pObj->FontSize;
  555. Label1->Caption = pObj->RunText;
  556. if (pObj->FontBold)
  557. Label1->Font->Style = TFontStyles() << fsBold;
  558. else
  559. Label1->Font->Style = TFontStyles();
  560. //int nWidth = pADO->FieldByName("VMS_DSPL_WIDTH")->AsInteger;
  561. //nWidth = Lavel1->Width;
  562. #if 0
  563. switch(pObj->TextAlign)
  564. {
  565. case 0://text_align_left:
  566. //좌측정력인 경우 위치조정 필요 없음.
  567. break;
  568. case 1://text_align_right:
  569. //좌측에서 글자길이를 뺀다음 만약 음수이면 0으로 설정
  570. //pADO->FieldByName("VMS_DSPL_WIDTH")->AsInteger
  571. nPosX = (nPosX+pADO->FieldByName("VMS_DSPL_WIDTH")->AsInteger) - Label1->Width;
  572. break;
  573. case 2://text_align_center:
  574. //원래 글자의 중앙값을 얻은 다음에 조정된 글자의 1/2 크기를 뺀다음 음수이면 0으로 설정
  575. nPosX = (nPosX+(pADO->FieldByName("VMS_DSPL_WIDTH")->AsInteger/2)) - (Label1->Width/2);
  576. break;
  577. }
  578. if (nPosX < 0) nPosX = 0;
  579. //AVmsObj->TextWidth = pLabel->Width;
  580. #endif
  581. pObj->SetSize(Label1->Width, pADO->FieldByName("VMS_DSPL_HEIGHT")->AsInteger);
  582. #endif
  583. }
  584. else //if (sObjKind == "1" || sObjKind == "2") // 이미지(1), 이미지 ID(2)
  585. {
  586. if (pObj->ObjKind == OBJKIND_IMAGEID)
  587. {
  588. pObj->Text = pADO->FieldByName("SYMB_LIB_NMBR")->AsString;
  589. }
  590. TStream *pStream = NULL;
  591. pStream = pADO->CreateBlobStream(pADO->FieldByName("VMS_DSPL_FIGR"), bmRead);
  592. try
  593. {
  594. if (pStream && pStream->Size > 0)
  595. {
  596. Graphics::TBitmap *Bitmap = pObj->GetBitmap();
  597. pStream->Position = 0;
  598. Bitmap->LoadFromStream(pStream);
  599. pObj->GetImage()->AutoSize= false;
  600. pObj->GetImage()->Stretch = true;
  601. pObj->GetImage()->Width = nDsplW;
  602. pObj->GetImage()->Height = nDsplH;
  603. pObj->SetSize(nDsplW, nDsplH);
  604. pObj->SetPos(nPosX, nPosY);
  605. //pObj->SetSize(Bitmap->Width, Bitmap->Height);
  606. }
  607. }
  608. __finally
  609. {
  610. SAFE_DELETE(pStream);
  611. }
  612. }
  613. //pObj->SetPos(nPosX, nPosY);
  614. pObj->Show();
  615. pObj->BringToFront();
  616. }
  617. if (VMS_FORM_TYPE_CD == eFormTp_traf_1 && FVmsTypeCd == "VMP2")
  618. {
  619. TVmsFormObject *pArw = NULL;
  620. TVmsFormObject *pStr = NULL;
  621. TVmsFormObject *pEnd = NULL;
  622. int nObjCnt = ADesigner->GetObjectCount();
  623. for(int ii = 0; ii < nObjCnt; ii++)
  624. {
  625. TVmsFormObject *pObj = ADesigner->GetObject(ii);
  626. if (!pObj) continue;
  627. int nObjType = pObj->ObjType.ToIntDef(0);
  628. switch(nObjType)
  629. {
  630. case 12: // @시점명 Y
  631. pStr = pObj;
  632. break;
  633. case 13: // @종점명 Y
  634. pEnd = pObj;
  635. break;
  636. }
  637. }
  638. for(int ii = 0; ii < nObjCnt; ii++)
  639. {
  640. TVmsFormObject *pObj = ADesigner->GetObject(ii);
  641. if (!pObj) continue;
  642. int nObjType = pObj->ObjType.ToIntDef(0);
  643. switch(nObjType)
  644. {
  645. case 1: // @심볼 Y
  646. case 2: // @이미지 Y
  647. case 17: // @소통정보이미지 Y
  648. //if (pFormObj->TRFC_FILL_CD == "T")
  649. if (pStr && pObj->Top <= (pStr->Top+pStr->Height) )
  650. {
  651. pArw = pObj;
  652. }
  653. break;
  654. }
  655. }
  656. if (pArw && pStr && pEnd)
  657. {
  658. int nRange = pStr->Top + pStr->Height;
  659. if (pArw->Top <= nRange && pEnd->Top <= nRange)
  660. {
  661. int ARRAWGAP = 5;
  662. int nLeft = 0;
  663. int nTotW = pStr->Width + ARRAWGAP +
  664. pArw->Width + ARRAWGAP +
  665. pEnd->Width;
  666. if (nTotW < ADesigner->Width)
  667. {
  668. nLeft = (ADesigner->Width - nTotW) / 2;
  669. }
  670. nLeft = (ADesigner->Width - nTotW) / 2;
  671. pStr->Left = nLeft;
  672. pArw->Left = pStr->Left + pStr->Width + ARRAWGAP;
  673. pEnd->Left = pArw->Left + pArw->Width + ARRAWGAP;
  674. }
  675. }
  676. }
  677. }
  678. catch(EDatabaseError &E)
  679. {
  680. DBERRORMSG("TVMSM610M::LoadFormObjectInfo", String(E.ClassName()), E.Message, sQry);
  681. throw Exception(String(E.ClassName()) + E.Message);
  682. }
  683. catch(Exception &exception)
  684. {
  685. DBERRORMSG("TVMSM610M::LoadFormObjectInfo", String(exception.ClassName()), exception.Message, sQry);
  686. throw Exception(String(exception.ClassName()) + exception.Message);
  687. }
  688. }
  689. __finally
  690. {
  691. if (pADO)
  692. {
  693. pADO->Close();
  694. delete pADO;
  695. }
  696. }
  697. }
  698. //---------------------------------------------------------------------------
  699. void __fastcall TVMSM610M::FormClear()
  700. {
  701. FSelIdx = -1;
  702. EdFormId->Clear();
  703. EdObjId->Clear();
  704. FNewDb = false;
  705. }
  706. //---------------------------------------------------------------------------
  707. void __fastcall TVMSM610M::TvObjListFocusedRecordChanged(TcxCustomGridTableView *Sender,
  708. TcxCustomGridRecord *APrevFocusedRecord, TcxCustomGridRecord *AFocusedRecord,
  709. bool ANewItemRecordFocusingChanged)
  710. {
  711. if (TvObjList->ViewData->RecordCount <= 0) return;
  712. if (TvObjList->DataController->FocusedRowIndex < 0) return;
  713. m_pEdtDesigner->SelectedObjectAll(false);
  714. TcxDataController *pGDC = TvObjList->DataController;
  715. int nIndex = pGDC->FocusedRecordIndex;
  716. String sObjType = pGDC->Values[nIndex][ColObjType->Index];
  717. String sFormType = pGDC->Values[nIndex][ColObj01->Index];
  718. int nFormType = sFormType.ToIntDef(0);
  719. if (nFormType == 11 || nFormType == 12 || nFormType == 13 || nFormType == 14)
  720. {
  721. BtnListAdd->Enabled = true;
  722. BtnListDelete->Enabled = true;
  723. }
  724. else
  725. {
  726. BtnListAdd->Enabled = true;
  727. BtnListDelete->Enabled = true;
  728. }
  729. if (nFormType == 15) //도형식 배경소통정보 폼
  730. {
  731. int nObjSeq = VarToStr(pGDC->Values[nIndex][ColObj03->Index]).ToIntDef(0);
  732. m_pEdtDesigner->SelectObject(nObjSeq);
  733. return;
  734. }
  735. TVmsFormObject *pObj;
  736. int nObjCnt = m_pEdtDesigner->GetObjectCount();
  737. for(int ii = 0; ii < nObjCnt; ii++)
  738. {
  739. pObj = m_pEdtDesigner->GetObject(ii);
  740. if (!pObj) continue;
  741. int nObjType = pObj->ObjType.ToIntDef(0);
  742. /*
  743. switch(sObjType.ToIntDef(-1))
  744. {
  745. case 17:
  746. case 27:
  747. case 37:
  748. case 47:
  749. if (sObjType.ToIntDef(-1) == nObjType)
  750. {
  751. m_pEdtDesigner->SelectObject(pObj->ObjSeq, true);
  752. }
  753. break;
  754. default:
  755. */
  756. switch(nFormType)
  757. {
  758. case 11:// ' 소통상황(1단)
  759. //@구간명, @시점명, @종점명
  760. if (nObjType >= 11 && nObjType <= 17)
  761. {
  762. m_pEdtDesigner->SelectObject(pObj->ObjSeq, true);
  763. }
  764. break;
  765. case 12:// ' 소통상황(2단)
  766. if (nObjType >= 21 && nObjType <= 27)
  767. {
  768. m_pEdtDesigner->SelectObject(pObj->ObjSeq, true);
  769. }
  770. break;
  771. case 13:// ' 소통상황(3단)
  772. if (nObjType >= 31 && nObjType <= 37)
  773. {
  774. m_pEdtDesigner->SelectObject(pObj->ObjSeq, true);
  775. }
  776. break;
  777. case 14:// ' 소통상황(4단)
  778. if (nObjType >= 41 && nObjType <= 47)
  779. {
  780. m_pEdtDesigner->SelectObject(pObj->ObjSeq, true);
  781. }
  782. break;
  783. default:
  784. break;
  785. }
  786. /*
  787. }
  788. */
  789. }
  790. }
  791. //---------------------------------------------------------------------------
  792. void __fastcall TVMSM610M::BtnListAddClick(TObject *Sender)
  793. {
  794. int nCellIdx = CMM_GetRecordIndex(TvObjList);
  795. if (nCellIdx < 0) return;
  796. int nIfscIdx = CMM_GetRecordIndex(TvAxis);
  797. if (nIfscIdx < 0) return;
  798. TcxGridDataController *pDcCell = TvObjList->DataController;
  799. TcxGridDataController *pDcIfsc = TvAxis->DataController;
  800. pDcCell->Values[nCellIdx][ColIfscId->Index] = pDcIfsc->Values[nIfscIdx][Col01->Index];
  801. pDcCell->Values[nCellIdx][ColIfscNm->Index] = pDcIfsc->Values[nIfscIdx][Col02->Index];
  802. pDcCell->Values[nCellIdx][ColIfscStr->Index] = pDcIfsc->Values[nIfscIdx][Col03->Index];
  803. pDcCell->Values[nCellIdx][ColIfscEnd->Index] = pDcIfsc->Values[nIfscIdx][Col04->Index];
  804. TVmsFormObject *pObj;
  805. int nObjCnt = m_pEdtDesigner->GetObjectCount();
  806. for(int ii = 0; ii < nObjCnt; ii++)
  807. {
  808. pObj = m_pEdtDesigner->GetObject(ii);
  809. if (!pObj) continue;
  810. if (!pObj->Selected) continue;
  811. int nObjType = pObj->ObjType.ToIntDef(0);
  812. switch(nObjType)
  813. {
  814. case 11: case 21: case 31: case 41:
  815. pObj->RunText = VarToStr(pDcCell->Values[nCellIdx][ColIfscNm->Index]);
  816. pObj->SetRuntimeText(pObj->RunText);
  817. break;
  818. case 12: case 22: case 32: case 42:
  819. pObj->RunText = VarToStr(pDcCell->Values[nCellIdx][ColIfscStr->Index]);
  820. pObj->SetRuntimeText(pObj->RunText);
  821. break;
  822. case 13: case 23: case 33: case 43:
  823. pObj->RunText = VarToStr(pDcCell->Values[nCellIdx][ColIfscEnd->Index]);
  824. pObj->SetRuntimeText(pObj->RunText);
  825. break;
  826. }
  827. }
  828. if (FFormType == eFormTp_traf_1 && FVmsTypeCd == "VMP2")
  829. {
  830. TVmsFormObject *pArw = NULL;
  831. TVmsFormObject *pStr = NULL;
  832. TVmsFormObject *pEnd = NULL;
  833. int nObjCnt = m_pEdtDesigner->GetObjectCount();
  834. for(int ii = 0; ii < nObjCnt; ii++)
  835. {
  836. TVmsFormObject *pObj = m_pEdtDesigner->GetObject(ii);
  837. if (!pObj) continue;
  838. int nObjType = pObj->ObjType.ToIntDef(0);
  839. switch(nObjType)
  840. {
  841. case 12: // @시점명 Y
  842. pStr = pObj;
  843. break;
  844. case 13: // @종점명 Y
  845. pEnd = pObj;
  846. break;
  847. }
  848. }
  849. for(int ii = 0; ii < nObjCnt; ii++)
  850. {
  851. TVmsFormObject *pObj = m_pEdtDesigner->GetObject(ii);
  852. if (!pObj) continue;
  853. int nObjType = pObj->ObjType.ToIntDef(0);
  854. switch(nObjType)
  855. {
  856. case 1: // @심볼 Y
  857. case 2: // @이미지 Y
  858. case 17: // @소통정보이미지 Y
  859. //if (pFormObj->TRFC_FILL_CD == "T")
  860. if (pStr && pObj->Top <= (pStr->Top+pStr->Height) )
  861. {
  862. pArw = pObj;
  863. }
  864. break;
  865. }
  866. }
  867. if (pArw && pStr && pEnd)
  868. {
  869. int nRange = pStr->Top + pStr->Height;
  870. if (pArw->Top <= nRange && pEnd->Top <= nRange)
  871. {
  872. int ARRAWGAP = 5;
  873. int nLeft = 0;
  874. int nTotW = pStr->Width + ARRAWGAP +
  875. pArw->Width + ARRAWGAP +
  876. pEnd->Width;
  877. if (nTotW < m_pEdtDesigner->Width)
  878. {
  879. nLeft = (m_pEdtDesigner->Width - nTotW) / 2;
  880. }
  881. nLeft = (m_pEdtDesigner->Width - nTotW) / 2;
  882. pStr->Left = nLeft;
  883. pArw->Left = pStr->Left + pStr->Width + ARRAWGAP;
  884. pEnd->Left = pArw->Left + pArw->Width + ARRAWGAP;
  885. }
  886. }
  887. }
  888. }
  889. //---------------------------------------------------------------------------
  890. void __fastcall TVMSM610M::BtnListDeleteClick(TObject *Sender)
  891. {
  892. int nCellIdx = CMM_GetRecordIndex(TvObjList);
  893. if (nCellIdx < 0) return;
  894. TcxGridDataController *pDcCell = TvObjList->DataController;
  895. pDcCell->Values[nCellIdx][ColIfscId->Index] = "";
  896. pDcCell->Values[nCellIdx][ColIfscNm->Index] = "";
  897. pDcCell->Values[nCellIdx][ColIfscStr->Index] = "";
  898. pDcCell->Values[nCellIdx][ColIfscEnd->Index] = "";
  899. TVmsFormObject *pObj;
  900. int nObjCnt = m_pEdtDesigner->GetObjectCount();
  901. for(int ii = 0; ii < nObjCnt; ii++)
  902. {
  903. pObj = m_pEdtDesigner->GetObject(ii);
  904. if (!pObj) continue;
  905. if (!pObj->Selected) continue;
  906. int nObjType = pObj->ObjType.ToIntDef(0);
  907. switch(nObjType)
  908. {
  909. case 11: case 21: case 31: case 41:
  910. pObj->SetRuntimeText(pObj->Text);
  911. break;
  912. case 12: case 22: case 32: case 42:
  913. pObj->SetRuntimeText(pObj->Text);
  914. break;
  915. case 13: case 23: case 33: case 43:
  916. pObj->SetRuntimeText(pObj->Text);
  917. break;
  918. }
  919. }
  920. }
  921. //---------------------------------------------------------------------------
  922. void __fastcall TVMSM610M::BtnSaveClick(TObject *Sender)
  923. {
  924. TcxDataController *pGDC = TvObjList->DataController;
  925. try
  926. {
  927. TvObjList->BeginUpdate();
  928. pGDC->BeginUpdate();
  929. int nRows = pGDC->RecordCount;
  930. try
  931. {
  932. for (int ii = 0; ii < nRows; ii++)
  933. {
  934. int nObjType = VarToStr(pGDC->Values[ii][ColObjType->Index]).ToIntDef(-1);
  935. int nFormType = VarToStr(pGDC->Values[ii][ColObj01->Index]).ToIntDef(0);
  936. String sIfscId = VarToStr(pGDC->Values[ii][ColIfscId->Index]);
  937. /*
  938. switch(nObjType)
  939. {
  940. case 17: FIfscId[4] = sIfscId; break;
  941. case 27: FIfscId[5] = sIfscId; break;
  942. case 37: FIfscId[6] = sIfscId; break;
  943. case 47: FIfscId[7] = sIfscId; break;
  944. default:
  945. */
  946. switch(nFormType)
  947. {
  948. case 11: FIfscId[0] = sIfscId; break; // ' 소통상황(1단)
  949. case 12: FIfscId[1] = sIfscId; break; // ' 소통상황(2단)
  950. case 13: FIfscId[2] = sIfscId; break; // ' 소통상황(3단)
  951. case 14: FIfscId[3] = sIfscId; break; // ' 소통상황(4단)
  952. }
  953. //break;
  954. /*
  955. }
  956. */
  957. }
  958. }
  959. catch(Exception &e)
  960. {
  961. }
  962. }
  963. __finally
  964. {
  965. pGDC->EndUpdate();
  966. TvObjList->EndUpdate();
  967. }
  968. m_pEdtDesigner->GetVmsFormImage(ImgForm);
  969. FSelected = true;
  970. Close();
  971. }
  972. //---------------------------------------------------------------------------
  973. void __fastcall TVMSM610M::Col05CustomDrawCell(TcxCustomGridTableView *Sender, TcxCanvas *ACanvas, TcxGridTableDataCellViewInfo *AViewInfo,
  974. bool &ADone)
  975. {
  976. int nRecordIdx = AViewInfo->GridRecord->RecordIndex;
  977. if (nRecordIdx < 0)
  978. {
  979. return;
  980. }
  981. try
  982. {
  983. int nItemIdx = AViewInfo->Item->Index;
  984. if (VarIsNull(AViewInfo->GridRecord->DisplayTexts[nItemIdx])) return;
  985. String sData = AViewInfo->GridRecord->DisplayTexts[nItemIdx];
  986. if (sData == "Y")
  987. {
  988. ACanvas->Canvas->Brush->Color = clLime;
  989. }
  990. }
  991. catch(Exception &e)
  992. {
  993. }
  994. }
  995. //---------------------------------------------------------------------------