VMSM400MF.cpp 31 KB

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