VMSM400MF.cpp 31 KB

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