VMSM400MF.cpp 29 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048
  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. #pragma hdrstop
  16. #include "VMSM400MF.h"
  17. //---------------------------------------------------------------------------
  18. #pragma package(smart_init)
  19. #pragma link "cxButtons"
  20. #pragma link "cxCalendar"
  21. #pragma link "cxContainer"
  22. #pragma link "cxControls"
  23. #pragma link "cxDropDownEdit"
  24. #pragma link "cxEdit"
  25. #pragma link "cxGraphics"
  26. #pragma link "cxGroupBox"
  27. #pragma link "cxLabel"
  28. #pragma link "cxLookAndFeelPainters"
  29. #pragma link "cxLookAndFeels"
  30. #pragma link "cxMaskEdit"
  31. #pragma link "cxPC"
  32. #pragma link "cxPCdxBarPopupMenu"
  33. #pragma link "cxSpinEdit"
  34. #pragma link "cxSplitter"
  35. #pragma link "cxTextEdit"
  36. #pragma link "cxTimeEdit"
  37. #pragma link "dxSkinBlack"
  38. #pragma link "dxSkinBlue"
  39. #pragma link "dxSkinCaramel"
  40. #pragma link "dxSkinCoffee"
  41. #pragma link "dxSkinDarkRoom"
  42. #pragma link "dxSkinDarkSide"
  43. #pragma link "dxSkinFoggy"
  44. #pragma link "dxSkinGlassOceans"
  45. #pragma link "dxSkiniMaginary"
  46. #pragma link "dxSkinLilian"
  47. #pragma link "dxSkinLiquidSky"
  48. #pragma link "dxSkinLondonLiquidSky"
  49. #pragma link "dxSkinMcSkin"
  50. #pragma link "dxSkinMoneyTwins"
  51. #pragma link "dxSkinOffice2007Black"
  52. #pragma link "dxSkinOffice2007Blue"
  53. #pragma link "dxSkinOffice2007Green"
  54. #pragma link "dxSkinOffice2007Pink"
  55. #pragma link "dxSkinOffice2007Silver"
  56. #pragma link "dxSkinOffice2010Black"
  57. #pragma link "dxSkinOffice2010Blue"
  58. #pragma link "dxSkinOffice2010Silver"
  59. #pragma link "dxSkinsCore"
  60. #pragma link "dxSkinscxPCPainter"
  61. #pragma link "dxSkinSeven"
  62. #pragma link "dxSkinSharp"
  63. #pragma link "dxSkinSilver"
  64. #pragma link "dxSkinStardust"
  65. #pragma link "cxRadioGroup"
  66. #pragma link "cxClasses"
  67. #pragma link "cxCustomData"
  68. #pragma link "cxData"
  69. #pragma link "cxDataStorage"
  70. #pragma link "cxDBData"
  71. #pragma link "cxFilter"
  72. #pragma link "cxGrid"
  73. #pragma link "cxGridCustomTableView"
  74. #pragma link "cxGridCustomView"
  75. #pragma link "cxGridDBTableView"
  76. #pragma link "cxGridLevel"
  77. #pragma link "cxGridTableView"
  78. #pragma link "cxStyles"
  79. #pragma link "cxCheckBox"
  80. #pragma link "cxImage"
  81. #pragma link "cxButtonEdit"
  82. #pragma link "cxBlobEdit"
  83. #pragma resource "*.dfm"
  84. TVMSM400M *VMSM400M = NULL;
  85. //---------------------------------------------------------------------------
  86. __fastcall TVMSM400M::TVMSM400M(TComponent* Owner)
  87. : TForm(Owner)
  88. {
  89. ITSSkin_Load(this);
  90. PnlVmsList->Visible = false;
  91. cxSplitter2->Visible = false;
  92. PnlSymbol->Align = alClient;
  93. CMM_LoadForm(g_sFormsDir, this);
  94. FUpdate= false;
  95. #if 0
  96. FTitle = "VMS 심볼이미지 관리";
  97. #else
  98. FTitle = "Symbol Management";
  99. #endif
  100. //FRAMEVmsList1->Column02->Visible = false;
  101. FRAMEVmsList1->PnlTop->Visible = true;
  102. FRAMEVmsList1->PnlBottom->Visible = false;
  103. FRAMEVmsList1->ColumnSel->Visible = true;
  104. m_pGDC = FRAMEVmsList1->TvList->DataController;
  105. FListSymb = new TList;
  106. EditMode = false;
  107. TvList->OptionsView->DataRowHeight = 0;
  108. TvList->OptionsView->CellAutoHeight = true;
  109. TvList->OptionsView->Indicator = false;
  110. TvList->OptionsCustomize->ColumnMoving = false;
  111. TvList->OptionsCustomize->ColumnSorting = false;
  112. TvList->Columns[0]->Width = 60;
  113. TvList->Columns[0]->Options->HorzSizing = false;
  114. BtnSaveImgFile->Caption = "Save as image file";
  115. BtnSaveImgFile->Hint = "Save as image file";
  116. }
  117. //---------------------------------------------------------------------------
  118. /*
  119. * 닫기버튼 이나 x버튼 클릭시 공통으로 처리하는 로직이들어간다..
  120. * Form과 DataModule class를 delete시킨다.
  121. * arguments
  122. *
  123. * return
  124. * void
  125. */
  126. void __fastcall TVMSM400M::CommClose()
  127. {
  128. try
  129. {
  130. ClearSymbloList();
  131. SAFE_DELETE(FListSymb);
  132. CMM_SaveForm(g_sFormsDir, this);
  133. }
  134. catch(...)
  135. {
  136. }
  137. }
  138. //---------------------------------------------------------------------------
  139. /*
  140. * Form을 보여줄때 호출되는 event 메서드이다.
  141. * arguments
  142. * Sender : event handler 객체
  143. * return
  144. * void
  145. */
  146. void __fastcall TVMSM400M::FormShow(TObject *Sender)
  147. {
  148. Refresh();
  149. FormInit();
  150. ChangeEditMode(1);
  151. TmrShow->Enabled = true;
  152. }
  153. //---------------------------------------------------------------------------
  154. /*
  155. * form 초기화
  156. *
  157. * arguments
  158. *
  159. * return
  160. * void
  161. */
  162. void __fastcall TVMSM400M::FormInit()
  163. {
  164. EdNmbr->Text = "";
  165. EdExpl->Text = "";
  166. EdImageFileName->Text = "";
  167. ImgPreView->Picture->Bitmap->FreeImage();
  168. ImgPreView->Picture->Bitmap = NULL;
  169. FNewDb = false;
  170. }
  171. //---------------------------------------------------------------------------
  172. /*
  173. * Form이 Show되고 난 후 최초 1회 수행되는 타이머 이벤트
  174. * arguments
  175. * Sender : event handler 객체
  176. * return
  177. * void
  178. */
  179. void __fastcall TVMSM400M::TmrShowTimer(TObject *Sender)
  180. {
  181. TmrShow->Enabled = false;
  182. FRAMEVmsList1->UpdateList();
  183. LoadImageSymbol();
  184. }
  185. //---------------------------------------------------------------------------
  186. /*
  187. * Close 버튼 클릭 이벤트 핸들러
  188. * arguments
  189. * Sender : event handler 객체
  190. * return
  191. * void
  192. */
  193. void __fastcall TVMSM400M::BtnCloseClick(TObject *Sender)
  194. {
  195. Close();
  196. }
  197. //---------------------------------------------------------------------------
  198. void __fastcall TVMSM400M::FormClose(TObject *Sender, TCloseAction &Action)
  199. {
  200. CommClose();
  201. VMSM400M = NULL;
  202. Action = caFree;
  203. }
  204. //---------------------------------------------------------------------------
  205. void __fastcall TVMSM400M::FormCloseQuery(TObject *Sender, bool &CanClose)
  206. {
  207. if (FUpdate)
  208. {
  209. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_14, 0);
  210. }
  211. FRAMEVmsList1->OnCloseQuery(CanClose);
  212. }
  213. //---------------------------------------------------------------------------
  214. void __fastcall TVMSM400M::DisplayInfo()
  215. {
  216. FormInit();
  217. int nRow = TvList->DataController->FocusedRecordIndex;
  218. if( nRow <= -1 )
  219. return;
  220. TcxGridDataController *pDc = TvList->DataController;
  221. nRow = pDc->FocusedRecordIndex;
  222. if (nRow < FListSymb->Count)
  223. {
  224. Graphics::TBitmap *bitmap = (Graphics::TBitmap*)FListSymb->Items[nRow];
  225. ImgPreView->Picture->Bitmap->Assign(bitmap);
  226. }
  227. EdNmbr->Text = VarToStr(pDc->Values[nRow][ColLink1->Index]);
  228. EdExpl->Text = VarToStr(pDc->Values[nRow][ColLink3->Index]);
  229. EdVmsCd->Text = VarToStr(pDc->Values[nRow][ColLink4->Index]);
  230. ChangeEditMode(3);
  231. }
  232. //---------------------------------------------------------------------------
  233. void __fastcall TVMSM400M::BtnEditClick(TObject *Sender)
  234. {
  235. if (BtnEdit->Caption == MSG903)
  236. {
  237. ChangeEditMode(0);
  238. FNewDb = false;
  239. }
  240. else
  241. {
  242. String sId = EdNmbr->Text;
  243. ChangeEditMode(1);
  244. if (CMM_FindGridData(TvList->DataController, sId, ColLink1->Index) >= 0)
  245. {
  246. CMM_SetGridRow(CxList, TvList, sId, ColLink1->Index);
  247. DisplayInfo();
  248. }
  249. }
  250. }
  251. //---------------------------------------------------------------------------
  252. void __fastcall TVMSM400M::ChangeEditMode(int AEdit)
  253. {
  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 = MSG901;
  264. BtnEdit->Hint = MSG902;
  265. EditMode = true;
  266. EdImageFileName->Enabled = false;
  267. }
  268. break;
  269. case 1: //편집[취소]버튼클릭
  270. {
  271. FormInit(); //화면을 모두 지운다.
  272. BtnEdit->Enabled = false;
  273. BtnInsert->Enabled = true;
  274. BtnDelete->Enabled = false;
  275. BtnSave->Enabled = false;
  276. BtnEdit->Caption = MSG903;
  277. BtnEdit->Hint = MSG904;
  278. //bEnabled = true;
  279. EditMode = false;
  280. EdImageFileName->Enabled = false;
  281. }
  282. break;
  283. case 2: //추가
  284. {
  285. BtnEdit->Enabled = true;
  286. BtnInsert->Enabled = false;
  287. BtnDelete->Enabled = false;
  288. BtnSave->Enabled = true;
  289. BtnEdit->Caption = MSG901;
  290. BtnEdit->Hint = MSG902;
  291. EditMode = true;
  292. EdImageFileName->Enabled = true;
  293. }
  294. break;
  295. case 3: //수정모드
  296. {
  297. BtnEdit->Enabled = true;
  298. BtnInsert->Enabled = true;
  299. BtnDelete->Enabled = true;
  300. BtnSave->Enabled = false;
  301. BtnEdit->Caption = MSG903;
  302. BtnEdit->Hint = MSG904;
  303. bEnabled = true;
  304. EditMode = false;
  305. EdImageFileName->Enabled = false;
  306. }
  307. break;
  308. }
  309. BtnDownload->Enabled = false;
  310. BtnSaveImgFile->Enabled = false;
  311. if (ImgPreView->Picture->Bitmap != NULL)
  312. {
  313. if (ImgPreView->Picture->Bitmap->Height != 0)
  314. {
  315. BtnSaveImgFile->Enabled = true;
  316. BtnDownload->Enabled = true;
  317. }
  318. }
  319. if (AEdit == 0 || AEdit == 2)
  320. {
  321. GrpList->Enabled = false;
  322. PnlCmd->Enabled = true;
  323. }
  324. else
  325. {
  326. GrpList->Enabled = true;
  327. PnlCmd->Enabled = false;
  328. }
  329. //PnlEdit->Enabled = EditMode;
  330. }
  331. //---------------------------------------------------------------------------
  332. bool __fastcall TVMSM400M::UpdateVmsImage(String ANmbr, String AExpl)
  333. {
  334. String sQry;
  335. TADOQuery *pADO = NULL;
  336. sQry = "UPDATE TB_VMS_SYMB_LIB \r\n"
  337. " SET RGST_DT = TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS'), \r\n"
  338. " SYMB_EXPL = :p02 \r\n"
  339. " WHERE SYMBLIB_NMBR = :p01 \r\n";
  340. int nRowHeight = 0;
  341. try
  342. {
  343. try
  344. {
  345. pADO = new TADOQuery(NULL);
  346. pADO->Close();
  347. pADO->Connection = ITSDb_GetConnection();
  348. ITSDb_SQLText(pADO, sQry);
  349. ITSDb_SQLBind(pADO, "p01", ANmbr);
  350. ITSDb_SQLBind(pADO, "p02", AExpl);
  351. pADO->ExecSQL();
  352. return true;
  353. }
  354. catch(EDatabaseError &E)
  355. {
  356. DBERRORMSG("VMS Symbol Update", String(E.ClassName()), E.Message, sQry);
  357. throw Exception(String(E.ClassName()) + E.Message);
  358. }
  359. catch(Exception &e)
  360. {
  361. DBERRORMSG("VMS Symbol Update", String(e.ClassName()), e.Message, sQry);
  362. throw Exception(String(e.ClassName()) + e.Message);
  363. }
  364. }
  365. __finally
  366. {
  367. if (pADO)
  368. {
  369. pADO->Close();
  370. delete pADO;
  371. }
  372. }
  373. return true;
  374. }
  375. //---------------------------------------------------------------------------
  376. bool __fastcall TVMSM400M::InsertVmsImage(String ANmbr, String AExpl, String ATypeCd)
  377. {
  378. String sQry;
  379. TADOQuery *pADO = NULL;
  380. sQry = "INSERT INTO TB_VMS_SYMB_LIB(SYMBLIB_NMBR, RGST_DT, SYMB_EXPL, IMAG_DATA, VMS_TYPE_CD) \r\n"
  381. " VALUES(:p01, :p02, :p03, :p04, :p05) \r\n";
  382. int nRowHeight = 0;
  383. TMemoryStream *dataStream = new TMemoryStream();
  384. ImgPreView->Picture->Bitmap->SaveToStream(dataStream);
  385. try
  386. {
  387. try
  388. {
  389. pADO = new TADOQuery(NULL);
  390. pADO->Close();
  391. pADO->Connection = ITSDb_GetConnection();
  392. ITSDb_SQLText(pADO, sQry);
  393. ITSDb_SQLBind(pADO, "p01", ANmbr);
  394. ITSDb_SQLBind(pADO, "p02", Now().FormatString("yyyymmddhhnnss"));
  395. ITSDb_SQLBind(pADO, "p03", AExpl);
  396. pADO->Parameters->ParamByName("p04")->LoadFromStream(dataStream, ftBlob);
  397. ITSDb_SQLBind(pADO, "p05", ATypeCd);
  398. pADO->ExecSQL();
  399. return true;
  400. }
  401. catch(EDatabaseError &E)
  402. {
  403. DBERRORMSG("VMS Symbol Update", String(E.ClassName()), E.Message, sQry);
  404. throw Exception(String(E.ClassName()) + E.Message);
  405. }
  406. catch(Exception &e)
  407. {
  408. DBERRORMSG("VMS Symbol Update", String(e.ClassName()), e.Message, sQry);
  409. throw Exception(String(e.ClassName()) + e.Message);
  410. }
  411. }
  412. __finally
  413. {
  414. if (pADO)
  415. {
  416. pADO->Close();
  417. delete pADO;
  418. }
  419. if (dataStream) delete dataStream;
  420. dataStream = NULL;
  421. }
  422. return true;
  423. }
  424. //---------------------------------------------------------------------------
  425. void __fastcall TVMSM400M::BtnSaveClick(TObject *Sender)
  426. {
  427. if (EdNmbr->Text.IsEmpty())
  428. {
  429. Application->MessageBox(MSG600, FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  430. return;
  431. }
  432. if (EdExpl->Text.Trim().IsEmpty())
  433. {
  434. Application->MessageBox(MSG601, FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  435. return;
  436. }
  437. bool bResult = false;
  438. String sNmbr = EdNmbr->Text;
  439. String sExpl = EdExpl->Text.Trim();
  440. if (!FNewDb)
  441. {
  442. bResult = UpdateVmsImage(sNmbr, sExpl);
  443. }
  444. else
  445. {
  446. if (EdImageFileName->Text.Trim().IsEmpty())
  447. {
  448. Application->MessageBox(MSG602,
  449. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  450. return;
  451. }
  452. bResult = InsertVmsImage(sNmbr, sExpl, "VMP0");
  453. }
  454. if (bResult)
  455. {
  456. Application->MessageBox(MSG603, FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  457. FUpdate = true;
  458. LoadImageSymbol();
  459. CMM_SetGridRow(CxList, TvList, sNmbr, ColLink1->Index);
  460. DisplayInfo();
  461. VComm_VmsImageSymbolUpdate(); // VMS서버로 이미지가 업데이트 되었음을 알린다.
  462. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_14, 0);
  463. }
  464. }
  465. //---------------------------------------------------------------------------
  466. void __fastcall TVMSM400M::BtnInsertClick(TObject *Sender)
  467. {
  468. FormInit();
  469. //신규아이디를 얻어와서 화면을 초기화한다.
  470. int nNmbr;
  471. if (!GetNextVmsImgeId(nNmbr))
  472. {
  473. Application->MessageBox(MSG604, FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  474. return;
  475. }
  476. EdNmbr->Text = String(nNmbr);
  477. ChangeEditMode(2);
  478. FNewDb = true;
  479. EdImageFileNameClick((TObject *)EdImageFileName);
  480. }
  481. //---------------------------------------------------------------------------
  482. bool __fastcall TVMSM400M::GetNextVmsImgeId(int &ANmbr)
  483. {
  484. String sQry;
  485. TADOQuery *pADO = NULL;
  486. sQry = "SELECT NVL(MAX(SYMBLIB_NMBR), 5999)+1 AS NEWID FROM TB_VMS_SYMB_LIB WHERE SYMBLIB_NMBR BETWEEN 6000 AND 6999 \r\n";
  487. try
  488. {
  489. try
  490. {
  491. pADO = new TADOQuery(NULL);
  492. pADO->Close();
  493. pADO->Connection = ITSDb_GetConnection();
  494. pADO->SQL->Clear();
  495. pADO->SQL->Text = sQry;
  496. pADO->Open();
  497. ANmbr = pADO->FieldByName("NEWID")->AsInteger;
  498. return true;
  499. }
  500. catch(EDatabaseError &E)
  501. {
  502. DBERRORLOG("VMS Symbol ID Query", String(E.ClassName()), E.Message, sQry);
  503. throw Exception(String(E.ClassName()) + E.Message);
  504. }
  505. catch(Exception &e)
  506. {
  507. DBERRORLOG("VMS Symbol ID Query", String(e.ClassName()), e.Message, sQry);
  508. throw Exception(String(e.ClassName()) + e.Message);
  509. }
  510. }
  511. __finally
  512. {
  513. if (pADO)
  514. {
  515. pADO->Close();
  516. delete pADO;
  517. }
  518. }
  519. return false;
  520. }
  521. //---------------------------------------------------------------------------
  522. bool __fastcall TVMSM400M::CheckImageUse(String ANmbr)
  523. {
  524. String sQry;
  525. TADOQuery *pADO = NULL;
  526. sQry = "SELECT COUNT(1) AS CNT \r\n"
  527. " FROM TB_VMS_FORM_OBJECT \r\n"
  528. " WHERE SYMBLIB_NMBR = :p01 \r\n";
  529. int nRowHeight = 0;
  530. try
  531. {
  532. try
  533. {
  534. pADO = new TADOQuery(NULL);
  535. pADO->Close();
  536. pADO->Connection = ITSDb_GetConnection();
  537. ITSDb_SQLText(pADO, sQry);
  538. ITSDb_SQLBind(pADO, "p01", ANmbr);
  539. ITSDb_SQLOpen(pADO);
  540. if (pADO->FieldByName("CNT")->AsInteger > 0)
  541. {
  542. Application->MessageBox(MSG605, FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  543. return false;
  544. }
  545. }
  546. catch(EDatabaseError &E)
  547. {
  548. DBERRORMSG("VMS Symbol Usage Query", String(E.ClassName()), E.Message, sQry);
  549. throw Exception(String(E.ClassName()) + E.Message);
  550. }
  551. catch(Exception &e)
  552. {
  553. DBERRORMSG("VMS Symbol Usage Query", String(e.ClassName()), e.Message, sQry);
  554. throw Exception(String(e.ClassName()) + e.Message);
  555. }
  556. }
  557. __finally
  558. {
  559. if (pADO)
  560. {
  561. pADO->Close();
  562. delete pADO;
  563. }
  564. }
  565. return true;
  566. }
  567. //---------------------------------------------------------------------------
  568. bool __fastcall TVMSM400M::DelVmsImage(String ANmbr)
  569. {
  570. String sQry;
  571. TADOQuery *pADO = NULL;
  572. sQry = "DELETE TB_VMS_SYMB_LIB \r\n"
  573. " WHERE SYMBLIB_NMBR = :p01 \r\n";
  574. int nRowHeight = 0;
  575. try
  576. {
  577. try
  578. {
  579. pADO = new TADOQuery(NULL);
  580. pADO->Close();
  581. pADO->Connection = ITSDb_GetConnection();
  582. ITSDb_SQLText(pADO, sQry);
  583. ITSDb_SQLBind(pADO, "p01", ANmbr);
  584. pADO->ExecSQL();
  585. return true;
  586. }
  587. catch(EDatabaseError &E)
  588. {
  589. DBERRORMSG("VMS Symbol Delete", String(E.ClassName()), E.Message, sQry);
  590. throw Exception(String(E.ClassName()) + E.Message);
  591. }
  592. catch(Exception &e)
  593. {
  594. DBERRORMSG("VMS Symbol Delete", String(e.ClassName()), e.Message, sQry);
  595. throw Exception(String(e.ClassName()) + e.Message);
  596. }
  597. }
  598. __finally
  599. {
  600. if (pADO)
  601. {
  602. pADO->Close();
  603. delete pADO;
  604. }
  605. }
  606. return true;
  607. }
  608. //---------------------------------------------------------------------------
  609. void __fastcall TVMSM400M::BtnDeleteClick(TObject *Sender)
  610. {
  611. int nIdx = TvList->DataController->FocusedRecordIndex;
  612. if (nIdx < 0) return;
  613. String sId = EdNmbr->Text;
  614. if (sId.IsEmpty())
  615. {
  616. Application->MessageBox(MSG606, FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  617. return;
  618. }
  619. if (!CheckImageUse(sId)) return;
  620. String sMsg;
  621. sMsg = MSG607 + sId;
  622. sMsg+= MSG608;
  623. if (Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES) return;
  624. if (DelVmsImage(sId))
  625. {
  626. FUpdate = true;
  627. Application->MessageBox(MSG609, FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  628. FormInit();
  629. ChangeEditMode(1);
  630. LoadImageSymbol();
  631. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_14, 0);
  632. }
  633. }
  634. //---------------------------------------------------------------------------
  635. void __fastcall TVMSM400M::BtnSaveImgFileClick(TObject *Sender)
  636. {
  637. SaveDialog->Title = FTitle;
  638. SaveDialog->InitialDir = ExtractFilePath(Application->ExeName);
  639. SaveDialog->Filter = "Bitmap image Files (*.bmp)|*.bmp";
  640. SaveDialog->FileName = EdNmbr->Text + ".bmp";
  641. if (SaveDialog->Execute())
  642. {
  643. try {
  644. String sFileName = SaveDialog->FileName;
  645. int iRet = sFileName.Pos(".bmp");
  646. if (iRet == 0)
  647. {
  648. sFileName = SaveDialog->FileName + ".bmp";
  649. }
  650. ImgPreView->Picture->SaveToFile(sFileName);
  651. }
  652. catch (Exception &exception)
  653. {
  654. Application->ShowException(&exception);
  655. }
  656. }
  657. }
  658. //---------------------------------------------------------------------------
  659. void __fastcall TVMSM400M::EdImageFileNameClick(TObject *Sender)
  660. {
  661. OpenBmp->Title = FTitle;
  662. OpenBmp->FileName = "";
  663. OpenBmp->Execute();
  664. }
  665. //---------------------------------------------------------------------------
  666. void __fastcall TVMSM400M::OpenBmpCanClose(TObject *Sender, bool &CanClose)
  667. {
  668. String sFName = OpenBmp->FileName;
  669. sFName = sFName.UpperCase();
  670. String sMsgTitle, sMsgString;
  671. sMsgTitle = MSG610;
  672. if (sFName.SubString(sFName.Length()-2, 3) != "BMP")
  673. {
  674. sMsgString = MSG611;
  675. Application->MessageBox(sMsgString.c_str(), sMsgTitle.c_str(), MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  676. return;
  677. }
  678. try
  679. {
  680. DWORD dwFileSize = ITSUtil_GetFileSize(sFName);
  681. if (dwFileSize <= 0)
  682. {
  683. sMsgString = MSG612;
  684. Application->MessageBox(sMsgString.c_str(), sMsgTitle.c_str(), MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  685. return;
  686. }
  687. if (dwFileSize > (1024 * 32)) // Max 32Kbytes
  688. {
  689. sMsgString = MSG613;
  690. Application->MessageBox(sMsgString.c_str(), sMsgTitle.c_str(), MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  691. return;
  692. }
  693. //EdImageSize->Text = String(dwFileSize);//GetFileSize(sFName));
  694. EdImageFileName->Text = sFName;
  695. ImgPreView->Picture->Bitmap->FreeImage();
  696. ImgPreView->Picture->Bitmap = NULL;
  697. ImgPreView->Picture->Bitmap->LoadFromFile(sFName);
  698. }
  699. catch(...)
  700. {
  701. }
  702. }
  703. //---------------------------------------------------------------------------
  704. void __fastcall TVMSM400M::ClearSymbloList()
  705. {
  706. for(int ii = 0; ii < FListSymb->Count; ii++)
  707. {
  708. Graphics::TBitmap *bitmap = (Graphics::TBitmap *)FListSymb->Items[ii];
  709. delete bitmap;
  710. }
  711. FListSymb->Clear();
  712. }
  713. //---------------------------------------------------------------------------
  714. void __fastcall TVMSM400M::LoadImageSymbol()
  715. {
  716. FormInit();
  717. CMM_ClearGridTableView(TvList);
  718. ClearSymbloList();
  719. String sQry;
  720. TADOQuery *pADO = NULL;
  721. sQry = "SELECT SYMBLIB_NMBR, \r\n"
  722. " IMAG_DATA, \r\n"
  723. " SYMB_EXPL, VMS_TYPE_CD \r\n"
  724. " FROM TB_VMS_SYMB_LIB \r\n"
  725. " WHERE SYMBLIB_NMBR BETWEEN 6000 AND 6999 \r\n"
  726. " ORDER BY SYMBLIB_NMBR \r\n";
  727. int nRowHeight = 0;
  728. try
  729. {
  730. int nRow;
  731. TcxDataController *pGDC = TvList->DataController;
  732. TvList->BeginUpdate();
  733. try
  734. {
  735. pADO = new TADOQuery(NULL);
  736. pADO->Close();
  737. pADO->Connection = ITSDb_GetConnection();
  738. ITSDb_SQLText(pADO, sQry);
  739. ITSDb_SQLOpen(pADO);
  740. for( ; !pADO->Eof; pADO->Next())
  741. {
  742. nRow = pGDC->AppendRecord();
  743. pGDC->Values[nRow][ColLink1->Index] = pADO->FieldByName("SYMBLIB_NMBR")->AsString;
  744. pGDC->Values[nRow][ColLink2->Index] = pADO->FieldByName("IMAG_DATA")->AsVariant;
  745. pGDC->Values[nRow][ColLink3->Index] = pADO->FieldByName("SYMB_EXPL")->AsString;
  746. pGDC->Values[nRow][ColLink4->Index] = pADO->FieldByName("VMS_TYPE_CD")->AsString;
  747. Graphics::TBitmap *bitmap = new Graphics::TBitmap;
  748. bitmap->LoadFromStream(pADO->CreateBlobStream(pADO->FieldByName("IMAG_DATA"), bmRead));
  749. FListSymb->Add(bitmap);
  750. if (bitmap->Height+2 > nRowHeight) nRowHeight = bitmap->Height+3;
  751. }
  752. }
  753. catch(EDatabaseError &E)
  754. {
  755. DBERRORMSG("VMS Symbol Query", String(E.ClassName()), E.Message, sQry);
  756. throw Exception(String(E.ClassName()) + E.Message);
  757. }
  758. catch(Exception &e)
  759. {
  760. DBERRORMSG("VMS Symbol Query", String(e.ClassName()), e.Message, sQry);
  761. throw Exception(String(e.ClassName()) + e.Message);
  762. }
  763. }
  764. __finally
  765. {
  766. if (pADO)
  767. {
  768. pADO->Close();
  769. delete pADO;
  770. }
  771. //TvList->OptionsView->DataRowHeight = nRowHeight;
  772. TvList->EndUpdate();
  773. }
  774. }
  775. //---------------------------------------------------------------------------
  776. void __fastcall TVMSM400M::TvListCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo,
  777. TMouseButton AButton, TShiftState AShift,
  778. bool &AHandled)
  779. {
  780. if (!ACellViewInfo) return;
  781. DisplayInfo();
  782. }
  783. //---------------------------------------------------------------------------
  784. void __fastcall TVMSM400M::ColLink2CustomDrawCell(TcxCustomGridTableView *Sender,
  785. TcxCanvas *ACanvas, TcxGridTableDataCellViewInfo *AViewInfo,
  786. bool &ADone)
  787. {
  788. #if 0
  789. int nRow = AViewInfo->GridRecord->RecordIndex;
  790. if (nRow < 0) return;
  791. if (nRow >= FListSymb->Count)
  792. {
  793. return;
  794. }
  795. try
  796. {
  797. Graphics::TBitmap *pBmp = (Graphics::TBitmap*)FListSymb->Items[nRow];
  798. TRect rc;
  799. TRect rcOrg = AViewInfo->Bounds;
  800. int nH = ( (rcOrg.Bottom - rcOrg.Top) - pBmp->Height ) / 2;
  801. rc.Top = rcOrg.Top + nH+1;
  802. rc.Bottom = rcOrg.Bottom - nH+1;
  803. rc.Left = rcOrg.Left + 1;
  804. rc.Right = rc.Left + pBmp->Width;
  805. ACanvas->Canvas->StretchDraw(rc, pBmp);
  806. ADone = true;
  807. }
  808. catch(Exception &e)
  809. {
  810. }
  811. #endif
  812. }
  813. //---------------------------------------------------------------------------
  814. void __fastcall TVMSM400M::BtnDownloadClick(TObject *Sender)
  815. {
  816. if (EdNmbr->Text.IsEmpty())
  817. {
  818. Application->MessageBox(L"VMS 이미지 제어기 다운로드\r\n이미지를 선택 하세요.",
  819. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  820. return;
  821. }
  822. int nSelects = CMM_GetCheckCount(FRAMEVmsList1->TvList, FRAMEVmsList1->ColumnSel->Index);
  823. if (0 == nSelects)
  824. {
  825. Application->MessageBox(L"VMS 이미지 제어기 다운로드\r\n다운로드할 VMS 제어기를 선택 하세요.", FTitle.c_str(), MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  826. return;
  827. }
  828. String sNmbr = EdNmbr->Text;
  829. String sMsg;
  830. sMsg = "VMS이미지번호: " + sNmbr;
  831. sMsg+= "\r\n선택하신 VMS 이미지 정보를 선택한 VMS 제어기로 다운로드 하시겠습니까??";
  832. if (Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES) return;
  833. String sUserId = g_pLOGIN->sUserId;
  834. String sRgstDt = Now().FormatString("yyyymmddhhnnss");
  835. String sQry;
  836. TADOQuery *pADO = NULL;
  837. sQry = "INSERT INTO TB_VMS_DOWNLOAD ( \r\n"
  838. " RGST_DT, \r\n"
  839. " VMS_CTLR_NMBR, \r\n"
  840. " FILETYPE, \r\n"
  841. " FILEID, \r\n"
  842. " USER_ID) \r\n"
  843. " VALUES ( \r\n"
  844. " :p01, \r\n"
  845. " :p02, \r\n"
  846. " :p03, \r\n"
  847. " :p04, \r\n"
  848. " :p05 ) \r\n";
  849. try
  850. {
  851. try
  852. {
  853. pADO = new TADOQuery(NULL);
  854. pADO->Close();
  855. pADO->Connection = ITSDb_GetConnection();
  856. ITSDb_SQLText(pADO, sQry);
  857. ITSDb_GetConnection()->BeginTrans();
  858. int nRowCnt = FRAMEVmsList1->TvList->ViewData->RecordCount;
  859. for (int ii = 0; ii < nRowCnt; ii++)
  860. {
  861. TcxCustomGridRow* ARow = FRAMEVmsList1->TvList->ViewData->Rows[ii];
  862. if (((bool)ARow->Values[FRAMEVmsList1->ColumnSel->Index]))
  863. {
  864. String sVmsNmbr = VarToStr(ARow->Values[FRAMEVmsList1->Column01->Index]);
  865. ITSDb_SQLBind(pADO, "p01", sRgstDt);
  866. ITSDb_SQLBind(pADO, "p02", sVmsNmbr);
  867. ITSDb_SQLBind(pADO, "p03", "1");
  868. ITSDb_SQLBind(pADO, "p04", sNmbr);
  869. ITSDb_SQLBind(pADO, "p05", sUserId);
  870. ITSDb_SQLExec(pADO);
  871. }
  872. }
  873. ITSDb_GetConnection()->CommitTrans();
  874. }
  875. catch(EDatabaseError &E)
  876. {
  877. ITSDb_GetConnection()->RollbackTrans();
  878. DBERRORMSG("VMS이미지다운로드", String(E.ClassName()), E.Message, sQry);
  879. throw Exception(String(E.ClassName()) + E.Message);
  880. }
  881. catch(Exception &e)
  882. {
  883. ITSDb_GetConnection()->RollbackTrans();
  884. DBERRORMSG("VMS이미지다운로드", String(e.ClassName()), e.Message, sQry);
  885. throw Exception(String(e.ClassName()) + e.Message);
  886. }
  887. }
  888. __finally
  889. {
  890. if (pADO)
  891. {
  892. pADO->Close();
  893. delete pADO;
  894. }
  895. }
  896. sMsg = "VMS 이미지 제어기 다운로드\r\n"
  897. "VMS 이미지를 제어기로 다운로드 요청하였습니다.\r\n"
  898. "VMS 제어기 통신상태에 따라 다운로드가 원활하게 진행되지 않을 수 있습니다.";
  899. Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  900. //FRAMEVmsList1->BtnAllSelectClick((TObject*)FRAMEVmsList1->BtnAllClear);
  901. }
  902. //---------------------------------------------------------------------------
  903. void __fastcall TVMSM400M::TvListFocusedRecordChanged(TcxCustomGridTableView *Sender,
  904. TcxCustomGridRecord *APrevFocusedRecord, TcxCustomGridRecord *AFocusedRecord,
  905. bool ANewItemRecordFocusingChanged)
  906. {
  907. if (!AFocusedRecord) return;
  908. DisplayInfo();
  909. }
  910. //---------------------------------------------------------------------------