VMSM410MF.cpp 45 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465
  1. /****************************************************************************
  2. * @source :
  3. * @description :
  4. ****************************************************************************
  5. * DATE AUTHOR DESCRIPTION
  6. * --------------------------------------------------------------------------
  7. * 2016/07/10 shjung 최초작성
  8. *
  9. ****************************************************************************/
  10. //---------------------------------------------------------------------------
  11. #include <vcl.h>
  12. #include "ITSSkinF.h"
  13. #include "ITSUtilF.h"
  14. #include "AppGlobalF.h"
  15. #include "ITSLangTransF.h"
  16. #pragma hdrstop
  17. #include "VMSM410MF.h"
  18. //---------------------------------------------------------------------------
  19. #pragma package(smart_init)
  20. #pragma link "cxButtons"
  21. #pragma link "cxCalendar"
  22. #pragma link "cxContainer"
  23. #pragma link "cxControls"
  24. #pragma link "cxDropDownEdit"
  25. #pragma link "cxEdit"
  26. #pragma link "cxGraphics"
  27. #pragma link "cxGroupBox"
  28. #pragma link "cxLabel"
  29. #pragma link "cxLookAndFeelPainters"
  30. #pragma link "cxLookAndFeels"
  31. #pragma link "cxMaskEdit"
  32. #pragma link "cxPC"
  33. #pragma link "cxPCdxBarPopupMenu"
  34. #pragma link "cxSpinEdit"
  35. #pragma link "cxSplitter"
  36. #pragma link "cxTextEdit"
  37. #pragma link "cxTimeEdit"
  38. #pragma link "dxSkinBlack"
  39. #pragma link "dxSkinBlue"
  40. #pragma link "dxSkinCaramel"
  41. #pragma link "dxSkinCoffee"
  42. #pragma link "dxSkinDarkRoom"
  43. #pragma link "dxSkinDarkSide"
  44. #pragma link "dxSkinFoggy"
  45. #pragma link "dxSkinGlassOceans"
  46. #pragma link "dxSkiniMaginary"
  47. #pragma link "dxSkinLilian"
  48. #pragma link "dxSkinLiquidSky"
  49. #pragma link "dxSkinLondonLiquidSky"
  50. #pragma link "dxSkinMcSkin"
  51. #pragma link "dxSkinMoneyTwins"
  52. #pragma link "dxSkinOffice2007Black"
  53. #pragma link "dxSkinOffice2007Blue"
  54. #pragma link "dxSkinOffice2007Green"
  55. #pragma link "dxSkinOffice2007Pink"
  56. #pragma link "dxSkinOffice2007Silver"
  57. #pragma link "dxSkinOffice2010Black"
  58. #pragma link "dxSkinOffice2010Blue"
  59. #pragma link "dxSkinOffice2010Silver"
  60. #pragma link "dxSkinsCore"
  61. #pragma link "dxSkinscxPCPainter"
  62. #pragma link "dxSkinSeven"
  63. #pragma link "dxSkinSharp"
  64. #pragma link "dxSkinSilver"
  65. #pragma link "dxSkinStardust"
  66. #pragma link "cxRadioGroup"
  67. #pragma link "cxClasses"
  68. #pragma link "cxCustomData"
  69. #pragma link "cxData"
  70. #pragma link "cxDataStorage"
  71. #pragma link "cxDBData"
  72. #pragma link "cxFilter"
  73. #pragma link "cxGrid"
  74. #pragma link "cxGridCustomTableView"
  75. #pragma link "cxGridCustomView"
  76. #pragma link "cxGridDBTableView"
  77. #pragma link "cxGridLevel"
  78. #pragma link "cxGridTableView"
  79. #pragma link "cxStyles"
  80. #pragma link "cxCheckBox"
  81. #pragma link "cxImage"
  82. #pragma link "cxButtonEdit"
  83. #pragma link "cxBlobEdit"
  84. #pragma resource "*.dfm"
  85. TVMSM410M *VMSM410M = NULL;
  86. //---------------------------------------------------------------------------
  87. __fastcall TVMSM410M::TVMSM410M(TComponent* Owner)
  88. : TForm(Owner)
  89. {
  90. LangTrans->Translate(this, ITSDb_GetConnection());
  91. ITSSkin_Load(this);
  92. CMM_LoadForm(g_sFormsDir, this);
  93. FUpdate= false;
  94. FTitle = Caption;//"VMS 소통정보 배경이미지관리";
  95. FListSymb = new TList;
  96. EditMode = false;
  97. APP_InitDisplayColor();
  98. TvList->OptionsView->DataRowHeight = 0;
  99. TvList->OptionsView->CellAutoHeight = true;
  100. TvList->OptionsView->Indicator = false;
  101. TvList->OptionsCustomize->ColumnMoving = false;
  102. TvList->OptionsCustomize->ColumnSorting = false;
  103. TvList->Columns[0]->Width = 60;
  104. TvList->Columns[0]->Options->HorzSizing = false;
  105. }
  106. //---------------------------------------------------------------------------
  107. /*
  108. * 닫기버튼 이나 x버튼 클릭시 공통으로 처리하는 로직이들어간다..
  109. * Form과 DataModule class를 delete시킨다.
  110. * arguments
  111. *
  112. * return
  113. * void
  114. */
  115. void __fastcall TVMSM410M::CommClose()
  116. {
  117. try
  118. {
  119. ClearSymbloList();
  120. SAFE_DELETE(FListSymb);
  121. CMM_SaveForm(g_sFormsDir, this);
  122. }
  123. catch(...)
  124. {
  125. }
  126. }
  127. //---------------------------------------------------------------------------
  128. /*
  129. * Form을 보여줄때 호출되는 event 메서드이다.
  130. * arguments
  131. * Sender : event handler 객체
  132. * return
  133. * void
  134. */
  135. void __fastcall TVMSM410M::FormShow(TObject *Sender)
  136. {
  137. Refresh();
  138. FormInit();
  139. ChangeEditMode(1);
  140. TmrShow->Enabled = true;
  141. }
  142. //---------------------------------------------------------------------------
  143. /*
  144. * form 초기화
  145. *
  146. * arguments
  147. *
  148. * return
  149. * void
  150. */
  151. void __fastcall TVMSM410M::FormInit()
  152. {
  153. EdNmbr->Text = "";
  154. EdExpl->Text = "";
  155. EdImageFileName->Text = "";
  156. ImgPreView->Picture->Bitmap->FreeImage();
  157. ImgPreView->Picture->Bitmap = NULL;
  158. ImgTemp->Picture->Bitmap->FreeImage();
  159. ImgTemp->Picture->Bitmap = NULL;
  160. SePosX->Value = 0;
  161. SePosY->Value = 0;
  162. SeCellId->Value = 1;
  163. CMM_ClearGridTableView(TvImageCell);
  164. FNewDb = false;
  165. }
  166. //---------------------------------------------------------------------------
  167. /*
  168. * Form이 Show되고 난 후 최초 1회 수행되는 타이머 이벤트
  169. * arguments
  170. * Sender : event handler 객체
  171. * return
  172. * void
  173. */
  174. void __fastcall TVMSM410M::TmrShowTimer(TObject *Sender)
  175. {
  176. TmrShow->Enabled = false;
  177. LoadVmsIfsc();
  178. LoadImageSymbol();
  179. }
  180. //---------------------------------------------------------------------------
  181. /*
  182. * Close 버튼 클릭 이벤트 핸들러
  183. * arguments
  184. * Sender : event handler 객체
  185. * return
  186. * void
  187. */
  188. void __fastcall TVMSM410M::BtnCloseClick(TObject *Sender)
  189. {
  190. Close();
  191. }
  192. //---------------------------------------------------------------------------
  193. void __fastcall TVMSM410M::FormClose(TObject *Sender, TCloseAction &Action)
  194. {
  195. CommClose();
  196. VMSM410M = NULL;
  197. Action = caFree;
  198. }
  199. //---------------------------------------------------------------------------
  200. void __fastcall TVMSM410M::FormCloseQuery(TObject *Sender, bool &CanClose)
  201. {
  202. if (FUpdate)
  203. {
  204. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_14, 0);
  205. }
  206. }
  207. //---------------------------------------------------------------------------
  208. void __fastcall TVMSM410M::DisplayInfo()
  209. {
  210. FormInit();
  211. int nRow = TvList->DataController->FocusedRecordIndex;
  212. if( nRow <= -1 )
  213. return;
  214. TcxGridDataController *pDc = TvList->DataController;
  215. nRow = pDc->FocusedRecordIndex;
  216. if (nRow < FListSymb->Count)
  217. {
  218. Graphics::TBitmap *bitmap = (Graphics::TBitmap*)FListSymb->Items[nRow];
  219. ImgPreView->Picture->Bitmap->Assign(bitmap);
  220. ImgTemp->Picture->Bitmap->Assign(bitmap);
  221. }
  222. EdNmbr->Text = VarToStr(pDc->Values[nRow][ColLink1->Index]);
  223. EdExpl->Text = VarToStr(pDc->Values[nRow][ColLink3->Index]);
  224. EdVmsCd->Text = VarToStr(pDc->Values[nRow][ColLink4->Index]);
  225. //셀정보 업데이트
  226. LoadImageSymbolCell(EdNmbr->Text);
  227. UpdateCellColor();
  228. ChangeEditMode(3);
  229. }
  230. //---------------------------------------------------------------------------
  231. void __fastcall TVMSM410M::BtnEditClick(TObject *Sender)
  232. {
  233. if (BtnEdit->Caption == FrmLang->lblEdit->Caption)//"편집")
  234. {
  235. ChangeEditMode(0);
  236. FNewDb = false;
  237. }
  238. else
  239. {
  240. String sId = EdNmbr->Text;
  241. ChangeEditMode(1);
  242. if (CMM_FindGridData(TvList->DataController, sId, ColLink1->Index) >= 0)
  243. {
  244. CMM_SetGridRow(CxList, TvList, sId, ColLink1->Index);
  245. DisplayInfo();
  246. }
  247. }
  248. }
  249. //---------------------------------------------------------------------------
  250. void __fastcall TVMSM410M::ChangeEditMode(int AEdit)
  251. {
  252. LblWarn->Visible = false;
  253. FImageUpdate = false;
  254. bool bEnabled = false;
  255. switch(AEdit)
  256. {
  257. case 0: //편집버튼클릭
  258. {
  259. BtnEdit->Enabled = true;
  260. BtnInsert->Enabled = false;
  261. BtnDelete->Enabled = false;
  262. BtnSave->Enabled = true;
  263. BtnEdit->Caption = FrmLang->lblCancel->Caption;//"취소";
  264. BtnEdit->Hint = FrmLang->lblCancel->Hint;//데이터 편집 취소";
  265. EditMode = true;
  266. //EdImageFileName->Enabled = false;
  267. EdImageFileName->Enabled = true;
  268. LblWarn->Visible = true;
  269. }
  270. break;
  271. case 1: //편집[취소]버튼클릭
  272. {
  273. FormInit(); //화면을 모두 지운다.
  274. BtnEdit->Enabled = false;
  275. BtnInsert->Enabled = true;
  276. BtnDelete->Enabled = false;
  277. BtnSave->Enabled = false;
  278. BtnEdit->Caption = FrmLang->lblEdit->Caption;//"편집";
  279. BtnEdit->Hint = FrmLang->lblEdit->Hint;//데이터 편집";
  280. //bEnabled = true;
  281. EditMode = false;
  282. EdImageFileName->Enabled = false;
  283. }
  284. break;
  285. case 2: //추가
  286. {
  287. BtnEdit->Enabled = true;
  288. BtnInsert->Enabled = false;
  289. BtnDelete->Enabled = false;
  290. BtnSave->Enabled = true;
  291. BtnEdit->Caption = FrmLang->lblCancel->Caption;//"취소";
  292. BtnEdit->Hint = FrmLang->lblCancel->Hint;//데이터 편집 취소";
  293. EditMode = true;
  294. EdImageFileName->Enabled = true;
  295. }
  296. break;
  297. case 3: //수정모드
  298. {
  299. BtnEdit->Enabled = true;
  300. BtnInsert->Enabled = true;
  301. BtnDelete->Enabled = true;
  302. BtnSave->Enabled = false;
  303. BtnEdit->Caption = FrmLang->lblEdit->Caption;//"편집";
  304. BtnEdit->Hint = FrmLang->lblEdit->Hint;//데이터 편집";
  305. bEnabled = true;
  306. EditMode = false;
  307. //EdImageFileName->Enabled = false;
  308. EdImageFileName->Enabled = true;
  309. }
  310. break;
  311. }
  312. BtnSaveImgFile->Enabled = false;
  313. if (ImgPreView->Picture->Bitmap != NULL)
  314. {
  315. if (ImgPreView->Picture->Bitmap->Height != 0)
  316. {
  317. BtnSaveImgFile->Enabled = true;
  318. }
  319. }
  320. if (AEdit == 0 || AEdit == 2)
  321. {
  322. PnlCmd->Enabled = true;
  323. GrpList->Enabled = false;
  324. }
  325. else
  326. {
  327. PnlCmd->Enabled = false;
  328. GrpList->Enabled = true;
  329. }
  330. //PnlEdit->Enabled = EditMode;
  331. }
  332. //---------------------------------------------------------------------------
  333. bool __fastcall TVMSM410M::UpdateVmsImage(String ANmbr, String AExpl)
  334. {
  335. String sQry;
  336. TADOQuery *pADO = NULL;
  337. sQry = "UPDATE TB_VMS_SYMB_LIB \r\n"
  338. " SET RGST_DT = TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS'), \r\n"
  339. " SYMB_EXPL = :p02, \r\n"
  340. " IMAG_DATA = :p03 \r\n"
  341. " WHERE SYMBLIB_NMBR = :p01 \r\n";
  342. TMemoryStream *dataStream = new TMemoryStream();
  343. //ImgPreView->Picture->Bitmap->SaveToStream(dataStream);
  344. ImgTemp->Picture->Bitmap->SaveToStream(dataStream);
  345. int nRowHeight = 0;
  346. try
  347. {
  348. try
  349. {
  350. pADO = new TADOQuery(NULL);
  351. pADO->Close();
  352. pADO->Connection = ITSDb_GetConnection();
  353. ITSDb_SQLText(pADO, sQry);
  354. ITSDb_SQLBind(pADO, "p01", ANmbr);
  355. ITSDb_SQLBind(pADO, "p02", AExpl);
  356. pADO->Parameters->ParamByName("p03")->LoadFromStream(dataStream, ftBlob);
  357. pADO->ExecSQL();
  358. if (FImageUpdate)
  359. {
  360. sQry = "UPDATE TB_VMS_FORM_OBJECT \r\n"
  361. " SET VMS_DSPL_FIGR = :p03 \r\n"
  362. " WHERE SYMBLIB_NMBR = :p01 \r\n";
  363. ITSDb_SQLText(pADO, sQry);
  364. ITSDb_SQLBind(pADO, "p01", ANmbr);
  365. pADO->Parameters->ParamByName("p03")->LoadFromStream(dataStream, ftBlob);
  366. pADO->ExecSQL();
  367. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_14, 0);
  368. VComm_VmsFormUpdate();
  369. }
  370. return true;
  371. }
  372. catch(EDatabaseError &E)
  373. {
  374. DBERRORMSG("VMS image update", String(E.ClassName()), E.Message, sQry);
  375. throw Exception(String(E.ClassName()) + E.Message);
  376. }
  377. catch(Exception &e)
  378. {
  379. DBERRORMSG("VMS image update", String(e.ClassName()), e.Message, sQry);
  380. throw Exception(String(e.ClassName()) + e.Message);
  381. }
  382. }
  383. __finally
  384. {
  385. if (pADO)
  386. {
  387. pADO->Close();
  388. delete pADO;
  389. }
  390. if (dataStream) delete dataStream;
  391. dataStream = NULL;
  392. }
  393. return true;
  394. }
  395. //---------------------------------------------------------------------------
  396. bool __fastcall TVMSM410M::InsertVmsImage(String ANmbr, String AExpl, String ATypeCd)
  397. {
  398. String sQry;
  399. TADOQuery *pADO = NULL;
  400. sQry = "INSERT INTO TB_VMS_SYMB_LIB(SYMBLIB_NMBR, RGST_DT, SYMB_EXPL, IMAG_DATA, VMS_TYPE_CD) \r\n"
  401. " VALUES(:p01, :p02, :p03, :p04, :p05) \r\n";
  402. int nRowHeight = 0;
  403. TMemoryStream *dataStream = new TMemoryStream();
  404. //ImgPreView->Picture->Bitmap->SaveToStream(dataStream);
  405. ImgTemp->Picture->Bitmap->SaveToStream(dataStream);
  406. try
  407. {
  408. try
  409. {
  410. pADO = new TADOQuery(NULL);
  411. pADO->Close();
  412. pADO->Connection = ITSDb_GetConnection();
  413. ITSDb_SQLText(pADO, sQry);
  414. ITSDb_SQLBind(pADO, "p01", ANmbr);
  415. ITSDb_SQLBind(pADO, "p02", Now().FormatString("yyyymmddhhnnss"));
  416. ITSDb_SQLBind(pADO, "p03", AExpl);
  417. pADO->Parameters->ParamByName("p04")->LoadFromStream(dataStream, ftBlob);
  418. ITSDb_SQLBind(pADO, "p05", ATypeCd);
  419. pADO->ExecSQL();
  420. return true;
  421. }
  422. catch(EDatabaseError &E)
  423. {
  424. DBERRORMSG("VMS image update", String(E.ClassName()), E.Message, sQry);
  425. throw Exception(String(E.ClassName()) + E.Message);
  426. }
  427. catch(Exception &e)
  428. {
  429. DBERRORMSG("VMS image update", String(e.ClassName()), e.Message, sQry);
  430. throw Exception(String(e.ClassName()) + e.Message);
  431. }
  432. }
  433. __finally
  434. {
  435. if (pADO)
  436. {
  437. pADO->Close();
  438. delete pADO;
  439. }
  440. if (dataStream) delete dataStream;
  441. dataStream = NULL;
  442. }
  443. return true;
  444. }
  445. //---------------------------------------------------------------------------
  446. void __fastcall TVMSM410M::BtnSaveClick(TObject *Sender)
  447. {
  448. if (EdNmbr->Text.IsEmpty())
  449. {
  450. Application->MessageBox(FrmLang->lblImage1->Caption.c_str(),//L"VMS 이미지정보 저장\r\n이미지 번호를 입력하세요.",
  451. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  452. return;
  453. }
  454. if (EdExpl->Text.Trim().IsEmpty())
  455. {
  456. Application->MessageBox(FrmLang->lblImage2->Caption.c_str(),//L"VMS 이미지정보 저장\r\n이미지 설명을 입력하세요.",
  457. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  458. return;
  459. }
  460. String sNmbr = EdNmbr->Text;
  461. String sExpl = EdExpl->Text.Trim();
  462. if (TvImageCell->DataController->RecordCount == 0)
  463. {
  464. String sMsg;
  465. sMsg = FrmLang->lblImage7->Caption + ": " + sNmbr;//"VMS이미지번호: " + sNmbr;
  466. sMsg+= "\r\n" + lblText1->Caption;//"이미지 셀 정보가 없습니다.\r\n소통정보 배경이미지 정보를 저장하시겠습니까?";
  467. if (Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES) return;
  468. }
  469. bool bIfscSet = true;
  470. TcxGridDataController *pGDC = TvImageCell->DataController;
  471. int nRows = pGDC->RecordCount;
  472. for (int ii = 0; ii < nRows; ii++)
  473. {
  474. String sIfscId = VarToStr(pGDC->Values[ii][ColIfscId->Index]);
  475. if (sIfscId == "")
  476. {
  477. bIfscSet = false;
  478. break;
  479. }
  480. }
  481. if (!bIfscSet)
  482. {
  483. String sMsg;
  484. sMsg = FrmLang->lblImage7->Caption + ": " + sNmbr;//"VMS이미지번호: " + sNmbr;
  485. sMsg+= "\r\n" + lblText2->Caption;//"이미지 셀 정보에 VMS 정보제공구간이 설정되어 있지 않습니다.\r\n소통정보 배경이미지 정보를 저장하시겠습니까?";
  486. if (Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES) return;
  487. }
  488. bool bResult = false;
  489. if (!FNewDb)
  490. {
  491. bResult = UpdateVmsImage(sNmbr, sExpl);
  492. }
  493. else
  494. {
  495. if (EdImageFileName->Text.Trim().IsEmpty())
  496. {
  497. Application->MessageBox(FrmLang->lblImage3->Caption.c_str(),//L"VMS 이미지정보 저장\r\n이미지를 선택하셔야 합니다.",
  498. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  499. return;
  500. }
  501. bResult = InsertVmsImage(sNmbr, sExpl, "VMP1");
  502. }
  503. if (!bResult) return;
  504. String ANmbr = sNmbr;
  505. String sQry;
  506. TADOQuery *pADO = NULL;
  507. try
  508. {
  509. try
  510. {
  511. pADO = new TADOQuery(NULL);
  512. pADO->Close();
  513. pADO->Connection = ITSDb_GetConnection();
  514. sQry = "DELETE TB_VMS_SYMB_IFSC \r\n"
  515. " WHERE SYMBLIB_NMBR = :p01 \r\n";
  516. ITSDb_SQLText(pADO, sQry);
  517. ITSDb_SQLBind(pADO, "p01", ANmbr);
  518. pADO->ExecSQL();
  519. sQry = "INSERT INTO TB_VMS_SYMB_IFSC ( \r\n"
  520. " SYMBLIB_NMBR, \r\n"
  521. " CELL_ID, \r\n"
  522. " POSX, \r\n"
  523. " POSY, \r\n"
  524. " VMS_IFSC_ID) \r\n"
  525. " VALUES ( \r\n"
  526. " :p01, \r\n"
  527. " :p02, \r\n"
  528. " :p03, \r\n"
  529. " :p04, \r\n"
  530. " :p05 ) \r\n";
  531. ITSDb_SQLText(pADO, sQry);
  532. ITSDb_GetConnection()->BeginTrans();
  533. TcxGridDataController *pGDC = TvImageCell->DataController;
  534. int nRows = pGDC->RecordCount;
  535. for (int ii = 0; ii < nRows; ii++)
  536. {
  537. String sCellId = VarToStr(pGDC->Values[ii][ColCellId->Index]);
  538. String sPosX = VarToStr(pGDC->Values[ii][ColCellPosX->Index]);
  539. String sPosY = VarToStr(pGDC->Values[ii][ColCellPosY->Index]);
  540. String sIfscId = VarToStr(pGDC->Values[ii][ColIfscId->Index]);
  541. ITSDb_SQLBind(pADO, "p01", ANmbr);
  542. ITSDb_SQLBind(pADO, "p02", sCellId);
  543. ITSDb_SQLBind(pADO, "p03", sPosX);
  544. ITSDb_SQLBind(pADO, "p04", sPosY);
  545. ITSDb_SQLBind(pADO, "p05", sIfscId);
  546. ITSDb_SQLExec(pADO);
  547. }
  548. ITSDb_GetConnection()->CommitTrans();
  549. bResult = true;
  550. }
  551. catch(EDatabaseError &E)
  552. {
  553. ITSDb_GetConnection()->RollbackTrans();
  554. DBERRORMSG("VMS image cell save", String(E.ClassName()), E.Message, sQry);
  555. throw Exception(String(E.ClassName()) + E.Message);
  556. }
  557. catch(Exception &e)
  558. {
  559. ITSDb_GetConnection()->RollbackTrans();
  560. DBERRORMSG("VMS image cell save", String(e.ClassName()), e.Message, sQry);
  561. throw Exception(String(e.ClassName()) + e.Message);
  562. }
  563. }
  564. __finally
  565. {
  566. if (pADO)
  567. {
  568. pADO->Close();
  569. delete pADO;
  570. }
  571. }
  572. if (bResult)
  573. {
  574. Application->MessageBox(lblText3->Caption.c_str(),//L"VMS 소통정보 배경이미지정보 저장\r\nVMS 소통정보 배경이미지정보를 저장 하였습니다.",
  575. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  576. FUpdate = true;
  577. LoadImageSymbol();
  578. CMM_SetGridRow(CxList, TvList, sNmbr, ColLink1->Index);
  579. DisplayInfo();
  580. VComm_VmsImageTrafficUpdate(); // VMS서버로 이미지가 업데이트 되었음을 알린다.
  581. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_14, 0);
  582. }
  583. }
  584. //---------------------------------------------------------------------------
  585. void __fastcall TVMSM410M::BtnInsertClick(TObject *Sender)
  586. {
  587. FormInit();
  588. //신규아이디를 얻어와서 화면을 초기화한다.
  589. int nNmbr;
  590. if (!GetNextVmsImgeId(nNmbr))
  591. {
  592. Application->MessageBox(FrmLang->lblImage4->Caption.c_str(),//L"새로운 VMS 이미지정보를 생성하지 못하였습니다.\r\n프로그램 종료후에 다시 시도해 보세요.",
  593. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  594. return;
  595. }
  596. EdNmbr->Text = String(nNmbr);
  597. ChangeEditMode(2);
  598. FNewDb = true;
  599. }
  600. //---------------------------------------------------------------------------
  601. bool __fastcall TVMSM410M::GetNextVmsImgeId(int &ANmbr)
  602. {
  603. String sQry;
  604. TADOQuery *pADO = NULL;
  605. sQry = "SELECT NVL(MAX(SYMBLIB_NMBR), 6999)+1 AS NEWID FROM TB_VMS_SYMB_LIB WHERE SYMBLIB_NMBR BETWEEN 7000 AND 7999 \r\n";
  606. try
  607. {
  608. try
  609. {
  610. pADO = new TADOQuery(NULL);
  611. pADO->Close();
  612. pADO->Connection = ITSDb_GetConnection();
  613. pADO->SQL->Clear();
  614. pADO->SQL->Text = sQry;
  615. pADO->Open();
  616. ANmbr = pADO->FieldByName("NEWID")->AsInteger;
  617. return true;
  618. }
  619. catch(EDatabaseError &E)
  620. {
  621. DBERRORLOG("VMS image id query", String(E.ClassName()), E.Message, sQry);
  622. throw Exception(String(E.ClassName()) + E.Message);
  623. }
  624. catch(Exception &e)
  625. {
  626. DBERRORLOG("VMS image id query", String(e.ClassName()), e.Message, sQry);
  627. throw Exception(String(e.ClassName()) + e.Message);
  628. }
  629. }
  630. __finally
  631. {
  632. if (pADO)
  633. {
  634. pADO->Close();
  635. delete pADO;
  636. }
  637. }
  638. return false;
  639. }
  640. //---------------------------------------------------------------------------
  641. bool __fastcall TVMSM410M::CheckImageUse(String ANmbr)
  642. {
  643. String sQry;
  644. TADOQuery *pADO = NULL;
  645. sQry = "SELECT COUNT(1) AS CNT \r\n"
  646. " FROM TB_VMS_FORM_OBJECT \r\n"
  647. " WHERE SYMBLIB_NMBR = :p01 \r\n";
  648. int nRowHeight = 0;
  649. try
  650. {
  651. try
  652. {
  653. pADO = new TADOQuery(NULL);
  654. pADO->Close();
  655. pADO->Connection = ITSDb_GetConnection();
  656. ITSDb_SQLText(pADO, sQry);
  657. ITSDb_SQLBind(pADO, "p01", ANmbr);
  658. ITSDb_SQLOpen(pADO);
  659. if (pADO->FieldByName("CNT")->AsInteger > 0)
  660. {
  661. Application->MessageBox(FrmLang->lblImage5->Caption.c_str(),//L"삭제할 이미지가 VMS 폼에서 사용되고 있습니다.\r\n먼저 해당 폼에서 삭제해주시기 바랍니다.",
  662. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  663. return false;
  664. }
  665. }
  666. catch(EDatabaseError &E)
  667. {
  668. DBERRORMSG("VMS image usage query", String(E.ClassName()), E.Message, sQry);
  669. throw Exception(String(E.ClassName()) + E.Message);
  670. }
  671. catch(Exception &e)
  672. {
  673. DBERRORMSG("VMS image usage query", String(e.ClassName()), e.Message, sQry);
  674. throw Exception(String(e.ClassName()) + e.Message);
  675. }
  676. }
  677. __finally
  678. {
  679. if (pADO)
  680. {
  681. pADO->Close();
  682. delete pADO;
  683. }
  684. }
  685. return true;
  686. }
  687. //---------------------------------------------------------------------------
  688. bool __fastcall TVMSM410M::DelVmsImage(String ANmbr)
  689. {
  690. String sQry;
  691. TADOQuery *pADO = NULL;
  692. int nRowHeight = 0;
  693. try
  694. {
  695. try
  696. {
  697. pADO = new TADOQuery(NULL);
  698. pADO->Close();
  699. pADO->Connection = ITSDb_GetConnection();
  700. sQry = "DELETE TB_VMS_SYMB_IFSC \r\n"
  701. " WHERE SYMBLIB_NMBR = :p01 \r\n";
  702. ITSDb_SQLText(pADO, sQry);
  703. ITSDb_SQLBind(pADO, "p01", ANmbr);
  704. pADO->ExecSQL();
  705. sQry = "DELETE TB_VMS_SYMB_LIB \r\n"
  706. " WHERE SYMBLIB_NMBR = :p01 \r\n";
  707. ITSDb_SQLText(pADO, sQry);
  708. ITSDb_SQLBind(pADO, "p01", ANmbr);
  709. pADO->ExecSQL();
  710. return true;
  711. }
  712. catch(EDatabaseError &E)
  713. {
  714. DBERRORMSG("VMS image delete", String(E.ClassName()), E.Message, sQry);
  715. throw Exception(String(E.ClassName()) + E.Message);
  716. }
  717. catch(Exception &e)
  718. {
  719. DBERRORMSG("VMS image delete", String(e.ClassName()), e.Message, sQry);
  720. throw Exception(String(e.ClassName()) + e.Message);
  721. }
  722. }
  723. __finally
  724. {
  725. if (pADO)
  726. {
  727. pADO->Close();
  728. delete pADO;
  729. }
  730. }
  731. return true;
  732. }
  733. //---------------------------------------------------------------------------
  734. void __fastcall TVMSM410M::BtnDeleteClick(TObject *Sender)
  735. {
  736. int nIdx = TvList->DataController->FocusedRecordIndex;
  737. if (nIdx < 0) return;
  738. String sId = EdNmbr->Text;
  739. if (sId.IsEmpty())
  740. {
  741. Application->MessageBox(FrmLang->lblImage6->Caption.c_str(),//L"삭제할 VMS 이미지를 목록에서 선택하세요.\r\n목록에서 더블클릭하여 선택합니다.",
  742. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  743. return;
  744. }
  745. if (!CheckImageUse(sId)) return;
  746. String sMsg;
  747. sMsg = FrmLang->lblImage7->Caption + ": " + sId;//"VMS이미지번호: " + sId;
  748. sMsg+= "\r\n" + FrmLang->lblImage8->Caption;//"선택하신 VMS 이미지 정보를 삭제하시겠습니까?";
  749. if (Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES) return;
  750. if (DelVmsImage(sId))
  751. {
  752. FUpdate = true;
  753. Application->MessageBox(FrmLang->lblImage9->Caption.c_str(),//L"VMS 이미지정보삭제\r\nVMS 이미지정보를 삭제 하였습니다.",
  754. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  755. FormInit();
  756. ChangeEditMode(1);
  757. LoadImageSymbol();
  758. VComm_VmsImageTrafficUpdate(); // VMS서버로 이미지가 업데이트 되었음을 알린다.
  759. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_14, 0);
  760. }
  761. }
  762. //---------------------------------------------------------------------------
  763. void __fastcall TVMSM410M::BtnSaveImgFileClick(TObject *Sender)
  764. {
  765. SaveDialog->Title = FTitle;
  766. SaveDialog->InitialDir = ExtractFilePath(Application->ExeName);
  767. SaveDialog->Filter = "Bitmap image Files (*.bmp)|*.bmp";
  768. SaveDialog->FileName = EdNmbr->Text + ".bmp";
  769. if (SaveDialog->Execute())
  770. {
  771. try {
  772. String sFileName = SaveDialog->FileName;
  773. int iRet = sFileName.Pos(".bmp");
  774. if (iRet == 0)
  775. {
  776. sFileName = SaveDialog->FileName + ".bmp";
  777. }
  778. //ImgPreView->Picture->SaveToFile(sFileName);
  779. ImgTemp->Picture->SaveToFile(sFileName);
  780. }
  781. catch (Exception &exception)
  782. {
  783. Application->ShowException(&exception);
  784. }
  785. }
  786. }
  787. //---------------------------------------------------------------------------
  788. void __fastcall TVMSM410M::EdImageFileNameClick(TObject *Sender)
  789. {
  790. OpenBmp->Title = FTitle;
  791. OpenBmp->FileName = "";
  792. OpenBmp->Execute();
  793. }
  794. //---------------------------------------------------------------------------
  795. void __fastcall TVMSM410M::OpenBmpCanClose(TObject *Sender, bool &CanClose)
  796. {
  797. String sFName = OpenBmp->FileName;
  798. sFName = sFName.UpperCase();
  799. String sMsgTitle, sMsgString;
  800. sMsgTitle = FrmLang->lblImage10->Caption;//"VMS 이미지 선택";
  801. if (sFName.SubString(sFName.Length()-2, 3) != "BMP")
  802. {
  803. sMsgString = FrmLang->lblImage11->Caption;//"BMP 파일만 적용 가능합니다.";
  804. Application->MessageBox(sMsgString.c_str(), sMsgTitle.c_str(), MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  805. return;
  806. }
  807. try
  808. {
  809. DWORD dwFileSize = ITSUtil_GetFileSize(sFName);
  810. if (dwFileSize <= 0)
  811. {
  812. sMsgString = FrmLang->lblImage12->Caption;//"이미지 파일을 읽어 오는데 실패하였습니다.";
  813. Application->MessageBox(sMsgString.c_str(), sMsgTitle.c_str(), MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  814. return;
  815. }
  816. if (dwFileSize > (1024 * 32)) // Max 32Kbytes
  817. {
  818. sMsgString = FrmLang->lblImage13->Caption;//"이미지 파일의 최대 크기는 32KBytes를 넘을 수 없습니다.\r\n이미지 파일의 용량을 줄여 주세요.";
  819. Application->MessageBox(sMsgString.c_str(), sMsgTitle.c_str(), MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  820. return;
  821. }
  822. //EdImageSize->Text = String(dwFileSize);//GetFileSize(sFName));
  823. EdImageFileName->Text = sFName;
  824. ImgPreView->Picture->Bitmap->FreeImage();
  825. ImgPreView->Picture->Bitmap = NULL;
  826. ImgPreView->Picture->Bitmap->LoadFromFile(sFName);
  827. ImgTemp->Picture->Bitmap->FreeImage();
  828. ImgTemp->Picture->Bitmap = NULL;
  829. ImgTemp->Picture->Bitmap->LoadFromFile(sFName);
  830. FImageUpdate = true;
  831. }
  832. catch(...)
  833. {
  834. }
  835. }
  836. //---------------------------------------------------------------------------
  837. void __fastcall TVMSM410M::ClearSymbloList()
  838. {
  839. for(int ii = 0; ii < FListSymb->Count; ii++)
  840. {
  841. Graphics::TBitmap *bitmap = (Graphics::TBitmap *)FListSymb->Items[ii];
  842. delete bitmap;
  843. }
  844. FListSymb->Clear();
  845. }
  846. //---------------------------------------------------------------------------
  847. void __fastcall TVMSM410M::LoadImageSymbol()
  848. {
  849. FormInit();
  850. CMM_ClearGridTableView(TvList);
  851. ClearSymbloList();
  852. String sQry;
  853. TADOQuery *pADO = NULL;
  854. sQry = "SELECT SYMBLIB_NMBR, \r\n"
  855. " IMAG_DATA, \r\n"
  856. " SYMB_EXPL, VMS_TYPE_CD \r\n"
  857. " FROM TB_VMS_SYMB_LIB \r\n"
  858. " WHERE SYMBLIB_NMBR BETWEEN 7000 AND 7999 \r\n"
  859. " ORDER BY SYMBLIB_NMBR \r\n";
  860. int nRowHeight = 0;
  861. try
  862. {
  863. int nRow;
  864. TcxDataController *pGDC = TvList->DataController;
  865. TvList->BeginUpdate();
  866. try
  867. {
  868. pADO = new TADOQuery(NULL);
  869. pADO->Close();
  870. pADO->Connection = ITSDb_GetConnection();
  871. ITSDb_SQLText(pADO, sQry);
  872. ITSDb_SQLOpen(pADO);
  873. for( ; !pADO->Eof; pADO->Next())
  874. {
  875. nRow = pGDC->AppendRecord();
  876. pGDC->Values[nRow][ColLink1->Index] = pADO->FieldByName("SYMBLIB_NMBR")->AsString;
  877. pGDC->Values[nRow][ColLink2->Index] = pADO->FieldByName("IMAG_DATA")->AsVariant;
  878. pGDC->Values[nRow][ColLink3->Index] = pADO->FieldByName("SYMB_EXPL")->AsString;
  879. pGDC->Values[nRow][ColLink4->Index] = pADO->FieldByName("VMS_TYPE_CD")->AsString;
  880. Graphics::TBitmap *bitmap = new Graphics::TBitmap;
  881. bitmap->LoadFromStream(pADO->CreateBlobStream(pADO->FieldByName("IMAG_DATA"), bmRead));
  882. FListSymb->Add(bitmap);
  883. if (bitmap->Height+2 > nRowHeight) nRowHeight = bitmap->Height+3;
  884. }
  885. }
  886. catch(EDatabaseError &E)
  887. {
  888. DBERRORMSG("VMS image query", String(E.ClassName()), E.Message, sQry);
  889. throw Exception(String(E.ClassName()) + E.Message);
  890. }
  891. catch(Exception &e)
  892. {
  893. DBERRORMSG("VMS image query", String(e.ClassName()), e.Message, sQry);
  894. throw Exception(String(e.ClassName()) + e.Message);
  895. }
  896. }
  897. __finally
  898. {
  899. if (pADO)
  900. {
  901. pADO->Close();
  902. delete pADO;
  903. }
  904. TvList->OptionsView->DataRowHeight = nRowHeight;
  905. TvList->EndUpdate();
  906. }
  907. }
  908. //---------------------------------------------------------------------------
  909. void __fastcall TVMSM410M::LoadVmsIfsc()
  910. {
  911. CMM_ClearGridTableView(TvAxis);
  912. String sQry;
  913. TADOQuery *pADO = NULL;
  914. sQry = "SELECT C.VMS_CTLR_NMBR, C.VMS_CTLR_ID, C.VMS_NM, \r\n"
  915. " A.VMS_IFSC_ID, A.VMS_IFSC_NM, \r\n"
  916. " A.DSPL_STRT_NODE_NM, A.DSPL_END_NODE_NM, \r\n"
  917. " A.AXIS_YN \r\n"
  918. " FROM TB_VMS_IFSC A, \r\n"
  919. " TB_VMS_IFSC_RLTN B, \r\n"
  920. " (SELECT VMS_CTLR_NMBR, \r\n"
  921. " VMS_CTLR_ID, \r\n"
  922. " VMS_NM \r\n"
  923. " FROM TB_VMS_CTLR \r\n"
  924. " WHERE VMS_TYPE_CD = 'VMP1') C \r\n"
  925. " WHERE A.EDTN_CD != 'EDI2' \r\n"
  926. " AND A.VMS_IFSC_ID = B.VMS_IFSC_ID \r\n"
  927. " AND B.VMS_CTLR_NMBR = C.VMS_CTLR_NMBR \r\n";
  928. try
  929. {
  930. int nRow;
  931. TcxDataController *pGDC = TvAxis->DataController;
  932. TvAxis->BeginUpdate();
  933. try
  934. {
  935. pADO = new TADOQuery(NULL);
  936. pADO->Close();
  937. pADO->Connection = ITSDb_GetConnection();
  938. ITSDb_SQLText(pADO, sQry);
  939. ITSDb_SQLOpen(pADO);
  940. for( ; !pADO->Eof; pADO->Next())
  941. {
  942. nRow = pGDC->AppendRecord();
  943. pGDC->Values[nRow][Col00->Index] = pADO->FieldByName("VMS_CTLR_ID")->AsString;
  944. pGDC->Values[nRow][Col01->Index] = pADO->FieldByName("VMS_IFSC_ID")->AsString;
  945. pGDC->Values[nRow][Col02->Index] = pADO->FieldByName("VMS_IFSC_NM")->AsString;
  946. pGDC->Values[nRow][Col03->Index] = pADO->FieldByName("DSPL_STRT_NODE_NM")->AsString;
  947. pGDC->Values[nRow][Col04->Index] = pADO->FieldByName("DSPL_END_NODE_NM")->AsString;
  948. pGDC->Values[nRow][Col05->Index] = pADO->FieldByName("AXIS_YN")->AsString;
  949. }
  950. }
  951. catch(EDatabaseError &E)
  952. {
  953. DBERRORMSG("VMS section query", String(E.ClassName()), E.Message, sQry);
  954. throw Exception(String(E.ClassName()) + E.Message);
  955. }
  956. catch(Exception &e)
  957. {
  958. DBERRORMSG("VMS section query", String(e.ClassName()), e.Message, sQry);
  959. throw Exception(String(e.ClassName()) + e.Message);
  960. }
  961. }
  962. __finally
  963. {
  964. if (pADO)
  965. {
  966. pADO->Close();
  967. delete pADO;
  968. }
  969. TvAxis->EndUpdate();
  970. CMM_ExpandCollapseChk(TvAxis, ChkExpand->Checked);
  971. }
  972. }
  973. //---------------------------------------------------------------------------
  974. void __fastcall TVMSM410M::LoadImageSymbolCell(String ANmbr)
  975. {
  976. CMM_ClearGridTableView(TvImageCell);
  977. String sQry;
  978. TADOQuery *pADO = NULL;
  979. sQry = "SELECT A.SYMBLIB_NMBR, \r\n"
  980. " A.CELL_ID, \r\n"
  981. " A.POSX, POSY, \r\n"
  982. " A.VMS_IFSC_ID, \r\n"
  983. " B.VMS_IFSC_NM, \r\n"
  984. " B.DSPL_STRT_NODE_NM, \r\n"
  985. " B.DSPL_END_NODE_NM \r\n"
  986. " FROM TB_VMS_SYMB_IFSC A, \r\n"
  987. " TB_VMS_IFSC B \r\n"
  988. " WHERE A.SYMBLIB_NMBR = :p01 \r\n"
  989. " AND A.VMS_IFSC_ID = B.VMS_IFSC_ID(+) \r\n"
  990. " ORDER BY CELL_ID \r\n";
  991. try
  992. {
  993. int nRow;
  994. TcxDataController *pGDC = TvImageCell->DataController;
  995. TvImageCell->BeginUpdate();
  996. try
  997. {
  998. pADO = new TADOQuery(NULL);
  999. pADO->Close();
  1000. pADO->Connection = ITSDb_GetConnection();
  1001. ITSDb_SQLText(pADO, sQry);
  1002. ITSDb_SQLBind(pADO, "p01", ANmbr);
  1003. ITSDb_SQLOpen(pADO);
  1004. for( ; !pADO->Eof; pADO->Next())
  1005. {
  1006. nRow = pGDC->AppendRecord();
  1007. pGDC->Values[nRow][ColCellId->Index] = pADO->FieldByName("CELL_ID")->AsString;
  1008. pGDC->Values[nRow][ColCellPosX->Index] = pADO->FieldByName("POSX")->AsString;
  1009. pGDC->Values[nRow][ColCellPosY->Index] = pADO->FieldByName("POSY")->AsString;
  1010. pGDC->Values[nRow][ColIfscId->Index] = pADO->FieldByName("VMS_IFSC_ID")->AsString;
  1011. pGDC->Values[nRow][ColIfscNm->Index] = pADO->FieldByName("VMS_IFSC_NM")->AsString;
  1012. pGDC->Values[nRow][ColStrNm->Index] = pADO->FieldByName("DSPL_STRT_NODE_NM")->AsString;
  1013. pGDC->Values[nRow][ColEndNm->Index] = pADO->FieldByName("DSPL_END_NODE_NM")->AsString;
  1014. }
  1015. }
  1016. catch(EDatabaseError &E)
  1017. {
  1018. DBERRORMSG("VMS image query", String(E.ClassName()), E.Message, sQry);
  1019. throw Exception(String(E.ClassName()) + E.Message);
  1020. }
  1021. catch(Exception &e)
  1022. {
  1023. DBERRORMSG("VMS image query", String(e.ClassName()), e.Message, sQry);
  1024. throw Exception(String(e.ClassName()) + e.Message);
  1025. }
  1026. }
  1027. __finally
  1028. {
  1029. if (pADO)
  1030. {
  1031. pADO->Close();
  1032. delete pADO;
  1033. }
  1034. TvImageCell->EndUpdate();
  1035. }
  1036. }
  1037. //---------------------------------------------------------------------------
  1038. void __fastcall TVMSM410M::TvListCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo,
  1039. TMouseButton AButton, TShiftState AShift,
  1040. bool &AHandled)
  1041. {
  1042. if (!ACellViewInfo) return;
  1043. DisplayInfo();
  1044. }
  1045. //---------------------------------------------------------------------------
  1046. void __fastcall TVMSM410M::ColLink2CustomDrawCell(TcxCustomGridTableView *Sender,
  1047. TcxCanvas *ACanvas, TcxGridTableDataCellViewInfo *AViewInfo,
  1048. bool &ADone)
  1049. {
  1050. #if 0
  1051. int nRow = AViewInfo->GridRecord->RecordIndex;
  1052. if (nRow < 0) return;
  1053. if (nRow >= FListSymb->Count)
  1054. {
  1055. return;
  1056. }
  1057. try
  1058. {
  1059. Graphics::TBitmap *pBmp = (Graphics::TBitmap*)FListSymb->Items[nRow];
  1060. TRect rc;
  1061. TRect rcOrg = AViewInfo->Bounds;
  1062. int nH = ( (rcOrg.Bottom - rcOrg.Top) - pBmp->Height ) / 2;
  1063. rc.Top = rcOrg.Top + nH+1;
  1064. rc.Bottom = rcOrg.Bottom - nH+1;
  1065. rc.Left = rcOrg.Left + 1;
  1066. rc.Right = rc.Left + pBmp->Width;
  1067. ACanvas->Canvas->StretchDraw(rc, pBmp);
  1068. ADone = true;
  1069. }
  1070. catch(Exception &e)
  1071. {
  1072. }
  1073. #endif
  1074. }
  1075. //---------------------------------------------------------------------------
  1076. void __fastcall TVMSM410M::BtnCellDeleteClick(TObject *Sender)
  1077. {
  1078. TcxGridDataController *pGDC = TvImageCell->DataController;
  1079. int nSelIdx = pGDC->FocusedRecordIndex;
  1080. if (nSelIdx < 0) return;
  1081. pGDC->BeginUpdate();
  1082. pGDC->DeleteRecord(nSelIdx);
  1083. pGDC->EndUpdate();
  1084. UpdateCellColor();
  1085. }
  1086. //---------------------------------------------------------------------------
  1087. void __fastcall TVMSM410M::BtnCellApplyClick(TObject *Sender)
  1088. {
  1089. TcxGridDataController *pGDC = TvImageCell->DataController;
  1090. String sCellId;
  1091. String sPosX;
  1092. String sPosY;
  1093. int nCellId = SeCellId->Value;
  1094. int nPosX = SePosX->Value;
  1095. int nPosY = SePosY->Value;
  1096. int nMaxCellId = 0;
  1097. bool bFound = false;
  1098. sCellId = String(nCellId);
  1099. sPosX = String(nPosX);
  1100. sPosY = String(nPosY);
  1101. int nFocusedIndex = 0;
  1102. try
  1103. {
  1104. int nRows = pGDC->RecordCount;
  1105. TvImageCell->BeginUpdate();
  1106. pGDC->BeginUpdate();
  1107. for (int ii = 0; ii < nRows; ii++)
  1108. {
  1109. String sTmpId = pGDC->Values[ii][ColCellId->Index];
  1110. if (sTmpId == sCellId)
  1111. {
  1112. nFocusedIndex = ii;
  1113. bFound = true;
  1114. }
  1115. }
  1116. if (!bFound)
  1117. {
  1118. nFocusedIndex = pGDC->AppendRecord();
  1119. //SeCellId->Value = nRows+1;
  1120. pGDC->Values[nFocusedIndex][ColCellId->Index] = String(nRows+1);
  1121. }
  1122. pGDC->Values[nFocusedIndex][ColCellPosX->Index] = sPosX;
  1123. pGDC->Values[nFocusedIndex][ColCellPosY->Index] = sPosY;
  1124. }
  1125. __finally
  1126. {
  1127. pGDC->EndUpdate();
  1128. TvImageCell->EndUpdate();
  1129. //if (pGDC->RecordCount > 0) pGDC->FocusedRecordIndex = nFocusedIndex;
  1130. SeCellId->Value = pGDC->RecordCount+1;
  1131. }
  1132. UpdateCellColor();
  1133. }
  1134. //---------------------------------------------------------------------------
  1135. void __fastcall TVMSM410M::ImgPreViewMouseDown(TObject *Sender, TMouseButton Button,
  1136. TShiftState Shift, int X, int Y)
  1137. {
  1138. try {
  1139. SePosX->Value = X;
  1140. SePosY->Value = Y;
  1141. UpdateCellColor();
  1142. TColor FOldColor = ImgPreView->Picture->Bitmap->Canvas->Pixels[SePosX->Value][SePosY->Value];
  1143. ImgPreView->Picture->Bitmap->Canvas->Brush->Color = clWhite;
  1144. ImgPreView->Picture->Bitmap->Canvas->FloodFill(SePosX->Value, SePosY->Value, FOldColor, fsSurface);
  1145. } catch(...) {}
  1146. }
  1147. //---------------------------------------------------------------------------
  1148. void __fastcall TVMSM410M::ColAreaCustomDrawCell(TcxCustomGridTableView *Sender,
  1149. TcxCanvas *ACanvas, TcxGridTableDataCellViewInfo *AViewInfo,
  1150. bool &ADone)
  1151. {
  1152. int nIdx = AViewInfo->GridRecord->RecordIndex;
  1153. if (nIdx < 0)
  1154. return;
  1155. try
  1156. {
  1157. String sCellId = VarToStr(TvImageCell->DataController->Values[nIdx][ColCellId->Index]);
  1158. nIdx = sCellId.ToIntDef(0);
  1159. ACanvas->Brush->Color = APP_GetDisplayColor(nIdx);
  1160. ACanvas->Font->Color = ACanvas->Brush->Color;
  1161. }
  1162. catch(...)
  1163. {
  1164. }
  1165. }
  1166. //---------------------------------------------------------------------------
  1167. void __fastcall TVMSM410M::TvImageCellFocusedRecordChanged(TcxCustomGridTableView *Sender,
  1168. TcxCustomGridRecord *APrevFocusedRecord, TcxCustomGridRecord *AFocusedRecord,
  1169. bool ANewItemRecordFocusingChanged)
  1170. {
  1171. TcxGridDataController *pGDC = TvImageCell->DataController;
  1172. int nSelIdx = pGDC->FocusedRecordIndex;
  1173. if (nSelIdx < 0) return;
  1174. String sCellId = VarToStr(pGDC->Values[nSelIdx][ColCellId->Index]);
  1175. String sPosX = VarToStr(pGDC->Values[nSelIdx][ColCellPosX->Index]);
  1176. String sPosY = VarToStr(pGDC->Values[nSelIdx][ColCellPosY->Index]);
  1177. SeCellId->Value = sCellId.ToIntDef(0);
  1178. SePosX->Value = sPosX.ToIntDef(0);
  1179. SePosY->Value = sPosY.ToIntDef(0);
  1180. #if 0
  1181. try {
  1182. TColor FOldColor = ImgPreView->Picture->Bitmap->Canvas->Pixels[SePosX->Value][SePosY->Value];
  1183. if (FOldColor == clYellow) return;
  1184. ImgPreView->Picture->Bitmap->Canvas->Brush->Color = clYellow;
  1185. ImgPreView->Picture->Bitmap->Canvas->FloodFill(SePosX->Value, SePosY->Value, FOldColor, fsSurface);
  1186. } catch(...) {}
  1187. #endif
  1188. }
  1189. //---------------------------------------------------------------------------
  1190. void __fastcall TVMSM410M::UpdateCellColor()
  1191. {
  1192. ImgPreView->Picture->Bitmap->FreeImage();
  1193. ImgPreView->Picture->Bitmap = NULL;
  1194. ImgPreView->Picture->Bitmap->Assign(ImgTemp->Picture->Bitmap);
  1195. ImgPreView->Width = ImgPreView->Picture->Bitmap->Width;
  1196. ImgPreView->Height = ImgPreView->Picture->Bitmap->Height;
  1197. TcxGridDataController *pGDC = TvImageCell->DataController;
  1198. int nRows = pGDC->RecordCount;
  1199. try
  1200. {
  1201. TvImageCell->BeginUpdate();
  1202. pGDC->BeginUpdate();
  1203. for (int ii = 0; ii < nRows; ii++)
  1204. {
  1205. String sCellId = VarToStr(pGDC->Values[ii][ColCellId->Index]);
  1206. String sPosX = VarToStr(pGDC->Values[ii][ColCellPosX->Index]);
  1207. String sPosY = VarToStr(pGDC->Values[ii][ColCellPosY->Index]);
  1208. int X = sPosX.ToIntDef(0);
  1209. int Y = sPosY.ToIntDef(0);
  1210. TColor FOldColor = ImgPreView->Picture->Bitmap->Canvas->Pixels[X][Y];
  1211. int nIdx = sCellId.ToIntDef(0);
  1212. ImgPreView->Picture->Bitmap->Canvas->Brush->Color = APP_GetDisplayColor(nIdx);
  1213. ImgPreView->Picture->Bitmap->Canvas->FloodFill(X, Y, FOldColor, fsSurface);
  1214. }
  1215. }
  1216. __finally
  1217. {
  1218. pGDC->EndUpdate();
  1219. TvImageCell->EndUpdate();
  1220. }
  1221. }
  1222. //---------------------------------------------------------------------------
  1223. void __fastcall TVMSM410M::SeCellIdPropertiesChange(TObject *Sender)
  1224. {
  1225. if (((TcxSpinEdit*)Sender)->Value < ((TcxSpinEdit*)Sender)->Properties->MinValue)
  1226. ((TcxSpinEdit*)Sender)->Value = ((TcxSpinEdit*)Sender)->Properties->MinValue;
  1227. else if(((TcxSpinEdit*)Sender)->Value > ((TcxSpinEdit*)Sender)->Properties->MaxValue &&
  1228. ((TcxSpinEdit*)Sender)->Properties->MaxValue)
  1229. ((TcxSpinEdit*)Sender)->Value = ((TcxSpinEdit*)Sender)->Properties->MaxValue;
  1230. }
  1231. //---------------------------------------------------------------------------
  1232. void __fastcall TVMSM410M::TvListFocusedRecordChanged(TcxCustomGridTableView *Sender,
  1233. TcxCustomGridRecord *APrevFocusedRecord, TcxCustomGridRecord *AFocusedRecord,
  1234. bool ANewItemRecordFocusingChanged)
  1235. {
  1236. if (!AFocusedRecord) return;
  1237. DisplayInfo();
  1238. }
  1239. //---------------------------------------------------------------------------
  1240. void __fastcall TVMSM410M::BtnListAddClick(TObject *Sender)
  1241. {
  1242. int nCellIdx = CMM_GetRecordIndex(TvImageCell);
  1243. if (nCellIdx < 0) return;
  1244. int nIfscIdx = CMM_GetRecordIndex(TvAxis);
  1245. if (nIfscIdx < 0) return;
  1246. TcxGridDataController *pDcCell = TvImageCell->DataController;
  1247. TcxGridDataController *pDcIfsc = TvAxis->DataController;
  1248. pDcCell->Values[nCellIdx][ColIfscId->Index] = pDcIfsc->Values[nIfscIdx][Col01->Index];
  1249. pDcCell->Values[nCellIdx][ColIfscNm->Index] = pDcIfsc->Values[nIfscIdx][Col02->Index];
  1250. pDcCell->Values[nCellIdx][ColStrNm->Index] = pDcIfsc->Values[nIfscIdx][Col03->Index];
  1251. pDcCell->Values[nCellIdx][ColEndNm->Index] = pDcIfsc->Values[nIfscIdx][Col04->Index];
  1252. }
  1253. //---------------------------------------------------------------------------
  1254. void __fastcall TVMSM410M::BtnListDeleteClick(TObject *Sender)
  1255. {
  1256. int nCellIdx = CMM_GetRecordIndex(TvImageCell);
  1257. if (nCellIdx < 0) return;
  1258. TcxGridDataController *pDcCell = TvImageCell->DataController;
  1259. pDcCell->Values[nCellIdx][ColIfscId->Index] = "";
  1260. pDcCell->Values[nCellIdx][ColIfscNm->Index] = "";
  1261. pDcCell->Values[nCellIdx][ColStrNm->Index] = "";
  1262. pDcCell->Values[nCellIdx][ColEndNm->Index] = "";
  1263. }
  1264. //---------------------------------------------------------------------------
  1265. void __fastcall TVMSM410M::ChkExpandClick(TObject *Sender)
  1266. {
  1267. CMM_ExpandCollapseChk(TvAxis, ChkExpand->Checked);
  1268. }
  1269. //---------------------------------------------------------------------------