VMSM400MF.cpp 33 KB

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