VMSM430MF.cpp 44 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438
  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 "VMSM430MF.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 link "dxGDIPlusClasses"
  76. #pragma link "FFBaseComponent"
  77. #pragma link "FFBasePlay"
  78. #pragma link "FFPlay"
  79. #pragma link "FFDecode"
  80. #pragma link "IdAntiFreeze"
  81. #pragma link "IdAntiFreezeBase"
  82. #pragma link "IdBaseComponent"
  83. #pragma link "IdComponent"
  84. #pragma link "IdExplicitTLSClientServerBase"
  85. #pragma link "IdFTP"
  86. #pragma link "IdTCPClient"
  87. #pragma link "IdTCPConnection"
  88. #pragma link "cxCalc"
  89. #pragma resource "*.dfm"
  90. #define LICENSE_KEY "FSXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX"
  91. TVMSM430M *VMSM430M = NULL;
  92. //---------------------------------------------------------------------------
  93. __fastcall TVMSM430M::TVMSM430M(TComponent* Owner)
  94. : TForm(Owner)
  95. {
  96. LangTrans->Translate(this, ITSDb_GetConnection());
  97. ITSSkin_Load(this);
  98. PnlVmsList->Visible = false;
  99. cxSplitter2->Visible = false;
  100. PnlSymbol->Align = alClient;
  101. CMM_LoadForm(g_sFormsDir, this);
  102. FUpdate= false;
  103. FTitle = Caption;//"VMS 심볼이미지 관리";
  104. //FRAMEVmsList1->Column02->Visible = false;
  105. FRAMEVmsList1->PnlTop->Visible = true;
  106. FRAMEVmsList1->PnlBottom->Visible = false;
  107. FRAMEVmsList1->ColumnSel->Visible = true;
  108. m_pGDC = FRAMEVmsList1->TvList->DataController;
  109. FListSymb = new TList;
  110. EditMode = false;
  111. TvList->OptionsView->DataRowHeight = 0;
  112. TvList->OptionsView->CellAutoHeight = true;
  113. TvList->OptionsView->Indicator = false;
  114. TvList->OptionsCustomize->ColumnMoving = false;
  115. TvList->OptionsCustomize->ColumnSorting = false;
  116. TvList->Columns[0]->Width = 60;
  117. TvList->Columns[0]->Options->HorzSizing = false;
  118. //BtnSaveImgFile->Caption = "Save as image file";
  119. //BtnSaveImgFile->Hint = "Save as image file";
  120. FTrackBar[0] = TrackBar1;
  121. FLblDuration[0] = lblDuration1;
  122. FLblCurrPTS[0] = lblCurrentPTS1;
  123. FFPlayer[0] = FFPlayer1;
  124. FDispArea[0] = PnlPlayer;
  125. for (int ii = 0; ii < MAX_PLAYER; ii++)
  126. {
  127. FDispArea[ii]->Tag = ii;
  128. FDispArea[ii]->ParentColor = false;
  129. FDispArea[ii]->Color = clBlack;
  130. FDispArea[ii]->Caption = "";
  131. FDispArea[ii]->Refresh();
  132. }
  133. FThumbNail = 0;
  134. FMakeThumbNail = false;
  135. FFDecoder1->SetLicenseKey(LICENSE_KEY);
  136. String sAVILibDir = g_sAppDir + "LibAV";
  137. for (int ii = 0; ii < MAX_PLAYER; ii++)
  138. {
  139. FFPlayer[ii]->SetLicenseKey(LICENSE_KEY);
  140. FFPlayer[ii]->DisableFPUExceptions();
  141. if (!FFPlayer[ii]->LoadAVLib(sAVILibDir))
  142. {
  143. if (g_AppCfg.sLang != "kr") Application->MessageBox(L"Stream display library load failed.", L"Stream display fail", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  144. else Application->MessageBox(L"영상표출 라이브러리를 로드하지 못하였습니다.", L"영상표출 오류", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  145. }
  146. }
  147. FPlayStream = false;
  148. FSymbFmtLists.Push("avi", new TSymbFmt("avi", "avi"));
  149. FSymbFmtLists.Push("mpge", new TSymbFmt("mpeg", "mpeg"));
  150. FSymbFmtLists.Push("mpg", new TSymbFmt("mpg", "mpg"));
  151. FSymbFmtLists.Push("mkv", new TSymbFmt("mkv", "mkv"));
  152. FSymbFmtLists.Push("mp4", new TSymbFmt("mp4", "mp4"));
  153. }
  154. //---------------------------------------------------------------------------
  155. void __fastcall TVMSM430M::CommClose()
  156. {
  157. try
  158. {
  159. ClearSymbloList();
  160. SAFE_DELETE(FListSymb);
  161. CMM_SaveForm(g_sFormsDir, this);
  162. }
  163. catch(...)
  164. {
  165. }
  166. }
  167. //---------------------------------------------------------------------------
  168. void __fastcall TVMSM430M::FormShow(TObject *Sender)
  169. {
  170. Refresh();
  171. FormInit();
  172. ChangeEditMode(1);
  173. TmrShow->Enabled = true;
  174. }
  175. //---------------------------------------------------------------------------
  176. void __fastcall TVMSM430M::FormInit()
  177. {
  178. EdNmbr->Text = "";
  179. EdExpl->Text = "";
  180. EdImageFileName->Text = "";
  181. ImgPreView->Picture->Bitmap->FreeImage();
  182. ImgPreView->Picture->Bitmap = NULL;
  183. FNewDb = false;
  184. }
  185. //---------------------------------------------------------------------------
  186. void __fastcall TVMSM430M::TmrShowTimer(TObject *Sender)
  187. {
  188. TmrShow->Enabled = false;
  189. FRAMEVmsList1->UpdateList();
  190. LoadImageSymbol();
  191. }
  192. //---------------------------------------------------------------------------
  193. void __fastcall TVMSM430M::BtnCloseClick(TObject *Sender)
  194. {
  195. Close();
  196. }
  197. //---------------------------------------------------------------------------
  198. void __fastcall TVMSM430M::FormClose(TObject *Sender, TCloseAction &Action)
  199. {
  200. CommClose();
  201. VMSM430M = NULL;
  202. Action = caFree;
  203. }
  204. //---------------------------------------------------------------------------
  205. void __fastcall TVMSM430M::FormCloseQuery(TObject *Sender, bool &CanClose)
  206. {
  207. if (FUpdate)
  208. {
  209. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_14, 0);
  210. }
  211. FRAMEVmsList1->OnCloseQuery(CanClose);
  212. }
  213. //---------------------------------------------------------------------------
  214. void __fastcall TVMSM430M::DisplayInfo()
  215. {
  216. FormInit();
  217. int nRow = TvList->DataController->FocusedRecordIndex;
  218. if( nRow <= -1 )
  219. return;
  220. TcxGridDataController *pDc = TvList->DataController;
  221. nRow = pDc->FocusedRecordIndex;
  222. if (nRow < FListSymb->Count)
  223. {
  224. Graphics::TBitmap *bitmap = (Graphics::TBitmap*)FListSymb->Items[nRow];
  225. try
  226. {
  227. ImgPreView->Picture->Bitmap->Assign(bitmap);
  228. }
  229. catch(...)
  230. {
  231. ImgPreView->Picture->Bitmap->Assign(ImgTemp->Picture->Bitmap);
  232. }
  233. }
  234. EdNmbr->Text = VarToStr(pDc->Values[nRow][ColLink1->Index]);
  235. EdExpl->Text = VarToStr(pDc->Values[nRow][ColLink3->Index]);
  236. EdVmsCd->Text = VarToStr(pDc->Values[nRow][ColLink4->Index]);
  237. EdFileName->Text = VarToStr(pDc->Values[nRow][ColLink5->Index]);
  238. String fileExt = VarToStr(pDc->Values[nRow][ColLink6->Index]);
  239. SeSize->Value = VarToStr(pDc->Values[nRow][ColSize->Index]).ToIntDef(0);
  240. //PlayerFile[0] = g_sVideoDir + EdFileName->Text;
  241. PlayerFile[0] = g_sVideoDir + EdNmbr->Text + "." + fileExt;
  242. ChangeEditMode(3);
  243. BtnPlay->Enabled = true;
  244. BtnStop->Enabled = false;
  245. BtnPause->Enabled = false;
  246. EdFileName->Properties->ReadOnly = true;
  247. }
  248. //---------------------------------------------------------------------------
  249. void __fastcall TVMSM430M::BtnEditClick(TObject *Sender)
  250. {
  251. if (BtnEdit->Caption == FrmLang->lblEdit->Caption)//"편집")
  252. {
  253. ChangeEditMode(0);
  254. FNewDb = false;
  255. }
  256. else
  257. {
  258. String sId = EdNmbr->Text;
  259. ChangeEditMode(1);
  260. if (CMM_FindGridData(TvList->DataController, sId, ColLink1->Index) >= 0)
  261. {
  262. CMM_SetGridRow(CxList, TvList, sId, ColLink1->Index);
  263. DisplayInfo();
  264. }
  265. }
  266. }
  267. //---------------------------------------------------------------------------
  268. void __fastcall TVMSM430M::ChangeEditMode(int AEdit)
  269. {
  270. if (FPlayStream) BtnStopClick(NULL);
  271. bool bEnabled = false;
  272. EdFileName->Properties->ReadOnly = true;
  273. switch(AEdit)
  274. {
  275. case 0: //편집버튼클릭
  276. {
  277. BtnEdit->Enabled = true;
  278. BtnInsert->Enabled = false;
  279. BtnDelete->Enabled = false;
  280. BtnSave->Enabled = true;
  281. BtnEdit->Caption = FrmLang->lblCancel->Caption;//"취소";
  282. BtnEdit->Hint = FrmLang->lblCancel->Hint;//데이터 편집 취소";
  283. EditMode = true;
  284. EdImageFileName->Enabled = false;
  285. }
  286. break;
  287. case 1: //편집[취소]버튼클릭
  288. {
  289. FormInit(); //화면을 모두 지운다.
  290. BtnEdit->Enabled = false;
  291. BtnInsert->Enabled = true;
  292. BtnDelete->Enabled = false;
  293. BtnSave->Enabled = false;
  294. BtnEdit->Caption = FrmLang->lblEdit->Caption;//"편집";
  295. BtnEdit->Hint = FrmLang->lblEdit->Hint;//데이터 편집";
  296. //bEnabled = true;
  297. EditMode = false;
  298. EdImageFileName->Enabled = false;
  299. }
  300. break;
  301. case 2: //추가
  302. {
  303. BtnEdit->Enabled = true;
  304. BtnInsert->Enabled = false;
  305. BtnDelete->Enabled = false;
  306. BtnSave->Enabled = true;
  307. BtnEdit->Caption = FrmLang->lblCancel->Caption;//"취소";
  308. BtnEdit->Hint = FrmLang->lblCancel->Hint;//데이터 편집 취소";
  309. EditMode = true;
  310. EdImageFileName->Enabled = true;
  311. //EdFileName->Properties->ReadOnly = false;
  312. }
  313. break;
  314. case 3: //수정모드
  315. {
  316. BtnEdit->Enabled = true;
  317. BtnInsert->Enabled = true;
  318. BtnDelete->Enabled = true;
  319. BtnSave->Enabled = false;
  320. BtnEdit->Caption = FrmLang->lblEdit->Caption;//"편집";
  321. BtnEdit->Hint = FrmLang->lblEdit->Hint;//데이터 편집";
  322. bEnabled = true;
  323. EditMode = false;
  324. EdImageFileName->Enabled = false;
  325. }
  326. break;
  327. }
  328. BtnDownload->Enabled = false;
  329. BtnSaveImgFile->Enabled = false;
  330. if (ImgPreView->Picture->Bitmap != NULL)
  331. {
  332. if (ImgPreView->Picture->Bitmap->Height != 0)
  333. {
  334. BtnSaveImgFile->Enabled = true;
  335. BtnDownload->Enabled = true;
  336. }
  337. }
  338. if (AEdit == 0 || AEdit == 2)
  339. {
  340. GrpList->Enabled = false;
  341. PnlCmd->Enabled = true;
  342. }
  343. else
  344. {
  345. GrpList->Enabled = true;
  346. PnlCmd->Enabled = false;
  347. }
  348. //PnlEdit->Enabled = EditMode;
  349. }
  350. //---------------------------------------------------------------------------
  351. bool __fastcall TVMSM430M::UpdateVmsImage(String ANmbr, String AExpl)
  352. {
  353. String sQry;
  354. TADOQuery *pADO = NULL;
  355. sQry = "UPDATE TB_VMS_SYMB_LIB \r\n"
  356. " SET SYMB_EXPL = :p02, \r\n"
  357. " UPDT_DT = TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS') \r\n"
  358. " WHERE SYMBLIB_NMBR = :p01 \r\n";
  359. try
  360. {
  361. try
  362. {
  363. pADO = new TADOQuery(NULL);
  364. pADO->Close();
  365. pADO->Connection = ITSDb_GetConnection();
  366. ITSDb_SQLText(pADO, sQry);
  367. ITSDb_SQLBind(pADO, "p01", ANmbr);
  368. ITSDb_SQLBind(pADO, "p02", AExpl);
  369. pADO->ExecSQL();
  370. return true;
  371. }
  372. catch(EDatabaseError &E)
  373. {
  374. DBERRORMSG("TVMSM430M::UpdateVmsImage", String(E.ClassName()), E.Message, sQry);
  375. throw Exception(String(E.ClassName()) + E.Message);
  376. }
  377. catch(Exception &e)
  378. {
  379. DBERRORMSG("TVMSM430M::UpdateVmsImage", String(e.ClassName()), e.Message, sQry);
  380. throw Exception(String(e.ClassName()) + e.Message);
  381. }
  382. }
  383. __finally
  384. {
  385. if (pADO)
  386. {
  387. pADO->Close();
  388. delete pADO;
  389. }
  390. }
  391. return true;
  392. }
  393. //---------------------------------------------------------------------------
  394. void __fastcall TVMSM430M::DeleteFtpFile(AnsiString AFileName)
  395. {
  396. TStringList *sList = new TStringList;
  397. IdFtp->List(sList, "", false);
  398. for (int ii = 0; ii < sList->Count; ii++)
  399. {
  400. if (sList->Strings[ii] == AFileName)
  401. {
  402. IdFtp->Delete(AFileName);
  403. break;
  404. }
  405. }
  406. delete sList;
  407. }
  408. //---------------------------------------------------------------------------
  409. bool __fastcall TVMSM430M::UploadFtpServer()
  410. {
  411. String sOrgFile = EdImageFileName->Text;
  412. String sDstFile = EdNmbr->Text + "." + FFileExt;
  413. if (g_AppCfg.vmsFtp.SERVER == "") return false;
  414. IdFtp->Host = g_AppCfg.vmsFtp.SERVER;
  415. IdFtp->Port = g_AppCfg.vmsFtp.PORT;
  416. IdFtp->Username = g_AppCfg.vmsFtp.USER;
  417. IdFtp->Password = g_AppCfg.vmsFtp.PSWD;
  418. IdFtp->Passive = g_AppCfg.vmsFtp.PASSIVE;
  419. String sErrMsg;
  420. bool bConnect = false;
  421. try
  422. {
  423. try
  424. {
  425. IdFtp->Connect();
  426. //IdFtp->ChangeDir("VIDEO");
  427. IdFtp->IOHandler->DefStringEncoding = TIdTextEncoding::UTF8;//IndyTextEncoding(949);
  428. bConnect = true;
  429. IdFtp->TransferType = ftBinary;
  430. IdFtp->Put(sOrgFile, sDstFile, false/*append_flag*/);
  431. }
  432. catch (EIdSocketError &exSock)
  433. {
  434. sErrMsg = exSock.Message;
  435. sErrMsg = StringReplace(sErrMsg, "\r\n", " ", TReplaceFlags() << rfReplaceAll);
  436. Application->MessageBox(sErrMsg.c_str(), FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  437. return false;
  438. }
  439. catch (Exception &e)
  440. {
  441. sErrMsg = e.Message;
  442. sErrMsg = StringReplace(sErrMsg, "\r\n", " ", TReplaceFlags() << rfReplaceAll);
  443. Application->MessageBox(sErrMsg.c_str(), FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  444. return false;
  445. }
  446. }
  447. __finally
  448. {
  449. if (bConnect && IdFtp->Connected())
  450. {
  451. IdFtp->Abort();
  452. IdFtp->Quit();
  453. IdFtp->Disconnect();
  454. }
  455. }
  456. String strmFileName = g_sVideoDir + sDstFile;
  457. if (!FileExists(strmFileName))
  458. {
  459. ::CopyFile(sOrgFile.c_str(), strmFileName.c_str(), false);
  460. }
  461. return true;
  462. }
  463. //---------------------------------------------------------------------------
  464. bool __fastcall TVMSM430M::InsertVmsImage(String ANmbr, String AExpl, String AFileName, String ATypeCd)
  465. {
  466. String sQry;
  467. TADOQuery *pADO = NULL;
  468. String SYMB_FILE_NM = EdFileName->Text.Trim();
  469. sQry = "INSERT INTO TB_VMS_SYMB_LIB(SYMBLIB_NMBR, RGST_DT, SYMB_EXPL, IMAG_DATA, SYMB_FILE_NM, SYMB_TYPE, IMAG_SIZE, PLAY_TM, UPDT_DT, DEL_YN, SYMB_IMAG_TYPE) \r\n"
  470. " VALUES(:p01, :p02, :p03, :p04, :p05, :p06, :p07, :p08, :p09, 'N', :p10 ) \r\n";
  471. TMemoryStream *dataStream = new TMemoryStream();
  472. //TMemoryStream *videoStream = new TMemoryStream();
  473. try
  474. {
  475. try
  476. {
  477. ImgPreView->Picture->Bitmap->SaveToStream(dataStream);
  478. //videoStream->LoadFromFile(EdImageFileName->Text);//, ftBlob);
  479. pADO = new TADOQuery(NULL);
  480. pADO->Close();
  481. pADO->Connection = ITSDb_GetConnection();
  482. ITSDb_SQLText(pADO, sQry);
  483. ITSDb_SQLBind(pADO, "p01", ANmbr);
  484. ITSDb_SQLBind(pADO, "p02", Now().FormatString("yyyymmddhhnnss"));
  485. ITSDb_SQLBind(pADO, "p03", AExpl);
  486. pADO->Parameters->ParamByName("p04")->LoadFromStream(dataStream, ftBlob);
  487. ITSDb_SQLBind(pADO, "p05", SYMB_FILE_NM);
  488. ITSDb_SQLBind(pADO, "p06", ATypeCd);
  489. ITSDb_SQLBind(pADO, "p07", FFileSize);
  490. ITSDb_SQLBind(pADO, "p08", FPlayTime);
  491. ITSDb_SQLBind(pADO, "p09", Now().FormatString("yyyymmddhhnnss"));
  492. ITSDb_SQLBind(pADO, "p10", FFileExt);
  493. pADO->ExecSQL();
  494. #if 0
  495. sQry = "UPDATE TB_VMS_SYMB_LIB \r\n"
  496. " SET AVI_DATA = :p02 \r\n"
  497. " WHERE SYMBLIB_NMBR = :p01 \r\n";
  498. ITSDb_SQLText(pADO, sQry);
  499. ITSDb_SQLBind(pADO, "p01", ANmbr);
  500. pADO->Parameters->ParamByName("p02")->LoadFromFile(EdImageFileName->Text, ftBlob);
  501. //pADO->Parameters->ParamByName("p02")->LoadFromStream(videoStream, ftBlob);
  502. pADO->ExecSQL();
  503. #endif
  504. return true;
  505. }
  506. catch(EDatabaseError &E)
  507. {
  508. DBERRORMSG("TVMSM430M::InsertVmsImage", String(E.ClassName()), E.Message, sQry);
  509. throw Exception(String(E.ClassName()) + E.Message);
  510. }
  511. catch(Exception &e)
  512. {
  513. DBERRORMSG("TVMSM430M::InsertVmsImage", String(e.ClassName()), e.Message, sQry);
  514. throw Exception(String(e.ClassName()) + e.Message);
  515. }
  516. }
  517. __finally
  518. {
  519. if (pADO)
  520. {
  521. pADO->Close();
  522. delete pADO;
  523. }
  524. if (dataStream) delete dataStream;
  525. dataStream = NULL;
  526. //if (videoStream) delete videoStream;
  527. //videoStream = NULL;
  528. }
  529. return true;
  530. }
  531. //---------------------------------------------------------------------------
  532. void __fastcall TVMSM430M::BtnSaveClick(TObject *Sender)
  533. {
  534. if (FPlayStream) BtnStopClick(NULL);
  535. if (EdNmbr->Text.IsEmpty())
  536. {
  537. Application->MessageBox(lblImage1->Caption.c_str(),//L"VMS 이미지정보 저장\r\n이미지 번호를 입력하세요.",
  538. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  539. return;
  540. }
  541. if (EdFileName->Text.Trim().IsEmpty())
  542. {
  543. Application->MessageBox(lblImage21->Caption.c_str(),//L"VMS 이미지정보 저장\r\n동영상 파일명을 입력하세요.",
  544. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  545. return;
  546. }
  547. #if 0
  548. String sCurExt = ExtractFileExt(EdFileName->Text.Trim());
  549. String sNewExt = ExtractFileExt(EdImageFileName->Text.Trim());
  550. if (sCurExt.UpperCase() != sNewExt.UpperCase())
  551. {
  552. Application->MessageBox(lblImage22->Caption.c_str(),//L"VMS 이미지정보 저장\r\n동영상 파일명을 입력하세요.",
  553. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  554. return;
  555. }
  556. #endif
  557. if (EdExpl->Text.Trim().IsEmpty())
  558. {
  559. Application->MessageBox(lblImage2->Caption.c_str(),//L"VMS 이미지정보 저장\r\n이미지 설명을 입력하세요.",
  560. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  561. return;
  562. }
  563. bool bResult = false;
  564. String sNmbr = EdNmbr->Text;
  565. String sExpl = EdExpl->Text.Trim();
  566. if (!FNewDb)
  567. {
  568. bResult = UpdateVmsImage(sNmbr, sExpl);
  569. }
  570. else
  571. {
  572. if (EdImageFileName->Text.Trim().IsEmpty() || EdFileName->Text.Trim().IsEmpty())
  573. {
  574. Application->MessageBox(lblImage3->Caption.c_str(),//L"VMS 이미지정보 저장\r\n이미지를 선택하셔야 합니다.",
  575. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  576. return;
  577. }
  578. #if 1
  579. if (IsUsedVideoFileName(EdFileName->Text.Trim()))
  580. {
  581. Application->MessageBox(lblSameFile->Caption.c_str(),//L"동일한 파일명이 존재합니다.\r\n파일명을 변경 한 후 다시 저장하십시요.",
  582. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  583. return;
  584. }
  585. #endif
  586. // VMS FTP 전송
  587. if (UploadFtpServer() == false)
  588. {
  589. Application->MessageBox(lblFtpServer->Caption.c_str(),//L"VMS 통신서버로 파일을 전송할 수 없습니다.\r\n환경설정 파일에서 FTP 정보를 확인하세요.",
  590. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  591. return;
  592. }
  593. bResult = InsertVmsImage(sNmbr, sExpl, "", "SBT3");
  594. }
  595. if (bResult)
  596. {
  597. Application->MessageBox(lblText1->Caption.c_str(),//L"VMS 이미지정보 저장\r\nVMS 이미지정보를 저장 하였습니다.",
  598. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  599. FUpdate = true;
  600. LoadImageSymbol();
  601. CMM_SetGridRow(CxList, TvList, sNmbr, ColLink1->Index);
  602. DisplayInfo();
  603. CComm_VmsImageSymbolUpdate(); // VMS서버로 이미지가 업데이트 되었음을 알린다.
  604. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_14, 0);
  605. }
  606. }
  607. //---------------------------------------------------------------------------
  608. void __fastcall TVMSM430M::BtnInsertClick(TObject *Sender)
  609. {
  610. FormInit();
  611. //신규아이디를 얻어와서 화면을 초기화한다.
  612. int nNmbr;
  613. if (!FrmLang->GetNextVmsImgeId(nNmbr, 5000, 5999))
  614. {
  615. Application->MessageBox(lblImage4->Caption.c_str(),//L"새로운 VMS 이미지정보를 생성하지 못하였습니다.\r\n프로그램 종료후에 다시 시도해 보세요.",
  616. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  617. return;
  618. }
  619. EdNmbr->Text = String(nNmbr);
  620. ChangeEditMode(2);
  621. FNewDb = true;
  622. EdImageFileNameClick((TObject *)EdImageFileName);
  623. }
  624. //---------------------------------------------------------------------------
  625. void __fastcall TVMSM430M::BtnDeleteClick(TObject *Sender)
  626. {
  627. int nIdx = TvList->DataController->FocusedRecordIndex;
  628. if (nIdx < 0) return;
  629. String sId = EdNmbr->Text;
  630. if (sId.IsEmpty())
  631. {
  632. Application->MessageBox(lblImage6->Caption.c_str(),//L"삭제할 VMS 이미지를 목록에서 선택하세요.\r\n목록에서 더블클릭하여 선택합니다.",
  633. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  634. return;
  635. }
  636. if (FrmLang->CheckImageUseCount(sId) > 0)
  637. {
  638. Application->MessageBox(FrmLang->lblImage5->Caption.c_str(),//L"삭제할 이미지가 VMS 폼에서 사용되고 있습니다.\r\n먼저 해당 폼에서 삭제해주시기 바랍니다.",
  639. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  640. return;
  641. }
  642. String sMsg;
  643. sMsg = lblImage7->Caption + ": " + sId;//"VMS이미지번호: " + sId;
  644. sMsg+= "\r\n" + lblImage8->Caption;//"선택하신 VMS 이미지 정보를 삭제하시겠습니까?";
  645. if (Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES) return;
  646. if (FrmLang->DelVmsImage(sId, false))
  647. {
  648. FUpdate = true;
  649. Application->MessageBox(lblImage9->Caption.c_str(),//L"VMS 이미지정보삭제\r\nVMS 이미지정보를 삭제 하였습니다.",
  650. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  651. FormInit();
  652. ChangeEditMode(1);
  653. LoadImageSymbol();
  654. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_14, 0);
  655. }
  656. }
  657. //---------------------------------------------------------------------------
  658. void __fastcall TVMSM430M::BtnSaveImgFileClick(TObject *Sender)
  659. {
  660. SaveDialog->Title = FTitle;
  661. SaveDialog->InitialDir = ExtractFilePath(Application->ExeName);
  662. SaveDialog->Filter = "동영상 파일 (*.avi;*.mpeg;*.mpg;*.mkv;*.mp4)|*.avi;*.mpeg;*.mpg;*.mkv;*.mp4";
  663. SaveDialog->FileName = EdFileName->Text;
  664. if (SaveDialog->Execute())
  665. {
  666. try {
  667. String sFileName = SaveDialog->FileName;
  668. int iRet = sFileName.Pos(".bmp");
  669. if (iRet == 0)
  670. {
  671. sFileName = SaveDialog->FileName + ".bmp";
  672. }
  673. ImgPreView->Picture->SaveToFile(sFileName);
  674. }
  675. catch (Exception &exception)
  676. {
  677. Application->ShowException(&exception);
  678. }
  679. }
  680. }
  681. //---------------------------------------------------------------------------
  682. void __fastcall TVMSM430M::EdImageFileNameClick(TObject *Sender)
  683. {
  684. OpenBmp->Title = FTitle;
  685. OpenBmp->FileName = "";
  686. OpenBmp->Execute();
  687. }
  688. //---------------------------------------------------------------------------
  689. void __fastcall TVMSM430M::OpenBmpCanClose(TObject *Sender, bool &CanClose)
  690. {
  691. String CURR_LOCAL_FILE_NM = OpenBmp->FileName;
  692. String sFilePath = ExtractFilePath(CURR_LOCAL_FILE_NM);
  693. String sFileExt = ExtractFileExt(CURR_LOCAL_FILE_NM);
  694. OpenBmp->InitialDir = sFilePath;
  695. sFileExt = StringReplace(sFileExt, ".", "", TReplaceFlags() << rfReplaceAll);
  696. sFileExt = sFileExt.LowerCase();
  697. TSymbFmt *symbFmt = FSymbFmtLists.Find(sFileExt);
  698. if (symbFmt == NULL) {
  699. Application->MessageBox(L"VMS 동영상으로 지원하지 않는 형식입니다.\r\n지원형식(avi, mpeg, mpg, mkv, mp4)", L"동영상 추가 실패", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  700. BtnInsertClick((TObject*)BtnInsert);
  701. return;
  702. }
  703. //42360832 ==> 42MB
  704. //1073741824 ==> 953GB
  705. if (!FFDecoder1->LoadFile(CURR_LOCAL_FILE_NM))
  706. {
  707. Application->MessageBox(lblImage12->Caption.c_str(),//L"동영상 파일을 읽어 오는데 실패하였습니다.",
  708. lblImage1->Caption.c_str(),//L"VMS 동영상 선택",
  709. MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  710. return;
  711. }
  712. int CURR_PICT_WDTH;
  713. int CURR_PICT_HGHT;
  714. int CURR_PICT_DATA_SZ = 0;
  715. if (FFDecoder1->Decode())
  716. {
  717. __int64 FDuration = 0;
  718. try {
  719. FDuration = FFDecoder1->VideoStreamInfos[0].DurationScaled;
  720. //FDuration = FFDecoder1->FileStreamInfo.Duration;
  721. } catch(Exception &e) {
  722. ShowMessage(e.Message);
  723. }
  724. FPlayTime = (FDuration + 5000) / 1000000;
  725. FPlayTime++;
  726. FFDecoder1->CopyToBitmap(ImgTemp->Picture->Bitmap);
  727. ImgPreView->Picture->Bitmap->Width = ImgPreView->Width;
  728. ImgPreView->Picture->Bitmap->Height = ImgPreView->Height;
  729. APP_ImageClear(ImgPreView->Canvas, 0, 0, ImgPreView->Width, ImgPreView->Height, clBlack);
  730. SetStretchBltMode(ImgPreView->Canvas->Handle, MAXSTRETCHBLTMODE);//HALFTONE);//MAXSTRETCHBLTMODE)//STRETCH_HALFTONE;
  731. ImgPreView->Canvas->CopyRect(Classes::Rect(0, 0, ImgPreView->Width, ImgPreView->Height),
  732. ImgTemp->Picture->Bitmap->Canvas,
  733. Classes::Rect(0, 0, ImgTemp->Picture->Bitmap->Width, ImgTemp->Picture->Bitmap->Height));
  734. CURR_PICT_WDTH = ImgTemp->Picture->Bitmap->Width;
  735. CURR_PICT_HGHT = ImgTemp->Picture->Bitmap->Height;
  736. CURR_PICT_DATA_SZ = FFDecoder1->FileSize;
  737. SeSize->Value = CURR_PICT_DATA_SZ;
  738. SeWidth->Value = CURR_PICT_WDTH;
  739. SeHeight->Value = CURR_PICT_HGHT;
  740. }
  741. FFDecoder1->CloseFile();
  742. try
  743. {
  744. FFileSize = CURR_PICT_DATA_SZ;//ITSUtil_GetFileSize(CURR_LOCAL_FILE_NM);
  745. if (FFileSize <= 0)
  746. {
  747. Application->MessageBox(L"이미지 파일을 읽어 오는데 실패하였습니다.(파일 사이즈 오류)",
  748. lblImage1->Caption.c_str(),//L"VMS 이미지 선택",
  749. MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  750. BtnInsertClick((TObject*)BtnInsert);
  751. return;
  752. }
  753. EdImageFileName->Text = CURR_LOCAL_FILE_NM;
  754. PlayerFile[0] = CURR_LOCAL_FILE_NM;
  755. BtnPlay->Enabled = true;
  756. BtnStop->Enabled = false;
  757. BtnPause->Enabled = false;
  758. //FVideoStream
  759. FFileName = ExtractFileName(CURR_LOCAL_FILE_NM);
  760. EdExpl->Text = FFileName;
  761. FFileExt = sFileExt;
  762. EdFileName->Text = FFileName;
  763. }
  764. catch(...)
  765. {
  766. }
  767. }
  768. //---------------------------------------------------------------------------
  769. void __fastcall TVMSM430M::ClearSymbloList()
  770. {
  771. for(int ii = 0; ii < FListSymb->Count; ii++)
  772. {
  773. Graphics::TBitmap *bitmap = (Graphics::TBitmap *)FListSymb->Items[ii];
  774. delete bitmap;
  775. }
  776. FListSymb->Clear();
  777. }
  778. //---------------------------------------------------------------------------
  779. void __fastcall TVMSM430M::LoadImageSymbol()
  780. {
  781. FormInit();
  782. CMM_ClearGridTableView(TvList);
  783. ClearSymbloList();
  784. String sQry;
  785. TADOQuery *pADO = NULL;
  786. sQry = "SELECT SYMBLIB_NMBR, IMAG_SIZE, \r\n"
  787. " IMAG_DATA, SYMB_IMAG_TYPE, \r\n"
  788. " SYMB_EXPL, SYMB_FILE_NM, SYMB_TYPE, \r\n"
  789. " AVI_DATA \r\n"
  790. " FROM TB_VMS_SYMB_LIB \r\n"
  791. " WHERE SYMBLIB_NMBR BETWEEN 5000 AND 5999 \r\n"
  792. " AND SYMB_TYPE = 'SBT3' \r\n"
  793. " AND DEL_YN = 'N' \r\n"
  794. " ORDER BY SYMBLIB_NMBR \r\n";
  795. ForceDirectories(g_sVideoDir.c_str());
  796. try
  797. {
  798. int nRow;
  799. TcxDataController *pGDC = TvList->DataController;
  800. TvList->BeginUpdate();
  801. try
  802. {
  803. pADO = new TADOQuery(NULL);
  804. pADO->Close();
  805. pADO->Connection = ITSDb_GetConnection();
  806. ITSDb_SQLText(pADO, sQry);
  807. ITSDb_SQLOpen(pADO);
  808. for( ; !pADO->Eof; pADO->Next())
  809. {
  810. nRow = pGDC->AppendRecord();
  811. pGDC->Values[nRow][ColLink1->Index] = pADO->FieldByName("SYMBLIB_NMBR")->AsString;
  812. pGDC->Values[nRow][ColLink2->Index] = pADO->FieldByName("IMAG_DATA")->AsVariant;
  813. pGDC->Values[nRow][ColLink3->Index] = pADO->FieldByName("SYMB_EXPL")->AsString;
  814. pGDC->Values[nRow][ColLink4->Index] = pADO->FieldByName("SYMB_TYPE")->AsString;
  815. pGDC->Values[nRow][ColLink5->Index] = pADO->FieldByName("SYMB_FILE_NM")->AsString;
  816. pGDC->Values[nRow][ColLink6->Index] = pADO->FieldByName("SYMB_IMAG_TYPE")->AsString;
  817. pGDC->Values[nRow][ColSize->Index] = pADO->FieldByName("IMAG_SIZE")->AsInteger;
  818. #if 0
  819. String strmFileName = g_sVideoDir + pADO->FieldByName("SYMB_FILE_NM")->AsString;
  820. if (!FileExists(strmFileName))
  821. {
  822. TMemoryStream *Stream1 = (TMemoryStream *)pADO->CreateBlobStream(pADO->FieldByName("AVI_DATA"), bmRead);
  823. Stream1->SaveToFile(strmFileName);
  824. SAFE_DELETE(Stream1);
  825. }
  826. #endif
  827. Graphics::TBitmap *bitmap = new Graphics::TBitmap;
  828. try
  829. {
  830. bitmap->LoadFromStream(pADO->CreateBlobStream(pADO->FieldByName("IMAG_DATA"), bmRead));
  831. }
  832. catch(...)
  833. {
  834. bitmap->Assign(ImgTemp->Picture->Bitmap);
  835. }
  836. FListSymb->Add(bitmap);
  837. }
  838. }
  839. catch(EDatabaseError &E)
  840. {
  841. DBERRORMSG("TVMSM430M::LoadImageSymbol", String(E.ClassName()), E.Message, sQry);
  842. throw Exception(String(E.ClassName()) + E.Message);
  843. }
  844. catch(Exception &e)
  845. {
  846. DBERRORMSG("TVMSM430M::LoadImageSymbol", String(e.ClassName()), e.Message, sQry);
  847. throw Exception(String(e.ClassName()) + e.Message);
  848. }
  849. }
  850. __finally
  851. {
  852. if (pADO)
  853. {
  854. pADO->Close();
  855. delete pADO;
  856. }
  857. TvList->EndUpdate();
  858. }
  859. }
  860. //---------------------------------------------------------------------------
  861. bool __fastcall TVMSM430M::IsUsedVideoFileName(String AFileName)
  862. {
  863. String sQry;
  864. TADOQuery *pADO = NULL;
  865. sQry = "SELECT COUNT(1) AS CNT \r\n"
  866. " FROM TB_VMS_SYMB_LIB \r\n"
  867. " WHERE SYMB_TYPE = 'SBT3' \r\n"
  868. " AND SYMB_FILE_NM = :p01 \r\n";
  869. int nExist = 1;
  870. try
  871. {
  872. try
  873. {
  874. pADO = new TADOQuery(NULL);
  875. pADO->Close();
  876. pADO->Connection = ITSDb_GetConnection();
  877. ITSDb_SQLText(pADO, sQry);
  878. ITSDb_SQLBind(pADO, "p01", AFileName);
  879. ITSDb_SQLOpen(pADO);
  880. for( ; !pADO->Eof; pADO->Next())
  881. {
  882. nExist = pADO->FieldByName("CNT")->AsInteger;
  883. }
  884. }
  885. catch(EDatabaseError &E)
  886. {
  887. DBERRORMSG("TVMSM430M::IsUsedVideoFileName", String(E.ClassName()), E.Message, sQry);
  888. throw Exception(String(E.ClassName()) + E.Message);
  889. }
  890. catch(Exception &e)
  891. {
  892. DBERRORMSG("TVMSM430M::IsUsedVideoFileName", String(e.ClassName()), e.Message, sQry);
  893. throw Exception(String(e.ClassName()) + e.Message);
  894. }
  895. }
  896. __finally
  897. {
  898. if (pADO)
  899. {
  900. pADO->Close();
  901. delete pADO;
  902. }
  903. }
  904. return nExist == 0 ? false : true;
  905. }
  906. //---------------------------------------------------------------------------
  907. void __fastcall TVMSM430M::TvListCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo,
  908. TMouseButton AButton, TShiftState AShift,
  909. bool &AHandled)
  910. {
  911. if (!ACellViewInfo) return;
  912. DisplayInfo();
  913. }
  914. //---------------------------------------------------------------------------
  915. void __fastcall TVMSM430M::BtnDownloadClick(TObject *Sender)
  916. {
  917. if (EdNmbr->Text.IsEmpty())
  918. {
  919. Application->MessageBox(lblText2->Caption.c_str(),//L"VMS 이미지 제어기 다운로드\r\n이미지를 선택 하세요.",
  920. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  921. return;
  922. }
  923. int nSelects = CMM_GetCheckCount(FRAMEVmsList1->TvList, FRAMEVmsList1->ColumnSel->Index);
  924. if (0 == nSelects)
  925. {
  926. Application->MessageBox(lblText3->Caption.c_str(),//L"VMS 이미지 제어기 다운로드\r\n다운로드할 VMS 제어기를 선택 하세요.",
  927. FTitle.c_str(), MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  928. return;
  929. }
  930. String sNmbr = EdNmbr->Text;
  931. String sMsg;
  932. sMsg = lblImage7->Caption + ": " + sNmbr;//"VMS이미지번호: " + sNmbr;
  933. sMsg+= "\r\n" + lblText4->Caption;//"선택하신 VMS 이미지 정보를 선택한 VMS 제어기로 다운로드 하시겠습니까?";
  934. if (Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES) return;
  935. String sUserId = g_pLOGIN->sUserId;
  936. String sRgstDt = Now().FormatString("yyyymmddhhnnss");
  937. String sQry;
  938. TADOQuery *pADO = NULL;
  939. sQry = "INSERT INTO TB_VMS_DOWNLOAD ( \r\n"
  940. " RGST_DT, \r\n"
  941. " VMS_CTLR_NMBR, \r\n"
  942. " FILETYPE, \r\n"
  943. " FILEID, \r\n"
  944. " USER_ID) \r\n"
  945. " VALUES ( \r\n"
  946. " :p01, \r\n"
  947. " :p02, \r\n"
  948. " :p03, \r\n"
  949. " :p04, \r\n"
  950. " :p05 ) \r\n";
  951. try
  952. {
  953. try
  954. {
  955. pADO = new TADOQuery(NULL);
  956. pADO->Close();
  957. pADO->Connection = ITSDb_GetConnection();
  958. ITSDb_SQLText(pADO, sQry);
  959. ITSDb_GetConnection()->BeginTrans();
  960. int nRowCnt = FRAMEVmsList1->TvList->ViewData->RecordCount;
  961. for (int ii = 0; ii < nRowCnt; ii++)
  962. {
  963. TcxCustomGridRow* ARow = FRAMEVmsList1->TvList->ViewData->Rows[ii];
  964. if (((bool)ARow->Values[FRAMEVmsList1->ColumnSel->Index]))
  965. {
  966. String sVmsNmbr = VarToStr(ARow->Values[FRAMEVmsList1->Column01->Index]);
  967. ITSDb_SQLBind(pADO, "p01", sRgstDt);
  968. ITSDb_SQLBind(pADO, "p02", sVmsNmbr);
  969. ITSDb_SQLBind(pADO, "p03", "1");
  970. ITSDb_SQLBind(pADO, "p04", sNmbr);
  971. ITSDb_SQLBind(pADO, "p05", sUserId);
  972. ITSDb_SQLExec(pADO);
  973. }
  974. }
  975. ITSDb_GetConnection()->CommitTrans();
  976. }
  977. catch(EDatabaseError &E)
  978. {
  979. ITSDb_GetConnection()->RollbackTrans();
  980. DBERRORMSG("TVMSM430M::BtnDownloadClick", String(E.ClassName()), E.Message, sQry);
  981. throw Exception(String(E.ClassName()) + E.Message);
  982. }
  983. catch(Exception &e)
  984. {
  985. ITSDb_GetConnection()->RollbackTrans();
  986. DBERRORMSG("TVMSM430M::BtnDownloadClick", String(e.ClassName()), e.Message, sQry);
  987. throw Exception(String(e.ClassName()) + e.Message);
  988. }
  989. }
  990. __finally
  991. {
  992. if (pADO)
  993. {
  994. pADO->Close();
  995. delete pADO;
  996. }
  997. }
  998. #if 0
  999. sMsg = "VMS 이미지 제어기 다운로드\r\n"
  1000. "VMS 이미지를 제어기로 다운로드 요청하였습니다.\r\n"
  1001. "VMS 제어기 통신상태에 따라 다운로드가 원활하게 진행되지 않을 수 있습니다.";
  1002. #else
  1003. sMsg = lblText5->Caption;
  1004. #endif
  1005. Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  1006. //FRAMEVmsList1->BtnAllSelectClick((TObject*)FRAMEVmsList1->BtnAllClear);
  1007. }
  1008. //---------------------------------------------------------------------------
  1009. void __fastcall TVMSM430M::TvListFocusedRecordChanged(TcxCustomGridTableView *Sender,
  1010. TcxCustomGridRecord *APrevFocusedRecord, TcxCustomGridRecord *AFocusedRecord,
  1011. bool ANewItemRecordFocusingChanged)
  1012. {
  1013. if (!AFocusedRecord) return;
  1014. DisplayInfo();
  1015. }
  1016. //---------------------------------------------------------------------------
  1017. void __fastcall TVMSM430M::BtnPlayClick(TObject *Sender)
  1018. {
  1019. BtnPlay->Enabled = false;
  1020. for (int ii = 0; ii < MAX_PLAYER; ii++)
  1021. {
  1022. Application->ProcessMessages();
  1023. try
  1024. {
  1025. if (PlayerFile[ii] == "")
  1026. {
  1027. if (!FileExists(PlayerFile[ii])) {
  1028. String errMsg = "VMS 동영상파일을 찾을 수 없습니다.\r\n";
  1029. errMsg += PlayerFile[ii];
  1030. Application->MessageBox(errMsg.c_str(), L"동영상 추가 실패", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  1031. continue;
  1032. }
  1033. if (FFPlayer[ii]->ScreenHandle != NULL)
  1034. {
  1035. FFPlayer[ii]->Stop(true);
  1036. PostMessage(FFPlayer[ii]->ScreenHandle, CM_INVALIDATE, 0, 0);
  1037. UpdateWindow(FFPlayer[ii]->ScreenHandle);
  1038. }
  1039. continue;
  1040. }
  1041. FFPlayer[ii]->AspectRatio = ChkFullScreen->Checked ? -1 : 0;
  1042. FFPlayer[ii]->TryOpen(PlayerFile[ii], FDispArea[ii]->Handle);
  1043. Application->ProcessMessages();
  1044. }
  1045. catch(Exception &e)
  1046. {
  1047. }
  1048. }
  1049. BtnStop->Enabled = true;
  1050. BtnPause->Enabled = true;
  1051. FPlayStream = true;
  1052. ImgPreView->Visible = false;
  1053. }
  1054. //---------------------------------------------------------------------------
  1055. void __fastcall TVMSM430M::BtnStopClick(TObject *Sender)
  1056. {
  1057. BtnStop->Enabled = false;
  1058. BtnPause->Enabled = false;
  1059. try
  1060. {
  1061. for (int ii = 0; ii < MAX_PLAYER; ii++)
  1062. {
  1063. try
  1064. {
  1065. if (FFPlayer[ii]->ScreenHandle != NULL)
  1066. {
  1067. FFPlayer[ii]->Stop(true);
  1068. }
  1069. Application->ProcessMessages();
  1070. }
  1071. catch(Exception &e)
  1072. {
  1073. }
  1074. }
  1075. } catch(...) {}
  1076. BtnPlay->Enabled = true;
  1077. FPlayStream = false;
  1078. ImgPreView->Visible = true;
  1079. }
  1080. //---------------------------------------------------------------------------
  1081. void __fastcall TVMSM430M::BtnPauseClick(TObject *Sender)
  1082. {
  1083. try
  1084. {
  1085. for (int ii = 0; ii < MAX_PLAYER; ii++)
  1086. {
  1087. try
  1088. {
  1089. if (FFPlayer[ii]->ScreenHandle != NULL)
  1090. {
  1091. FFPlayer[ii]->TogglePause();
  1092. }
  1093. Application->ProcessMessages();
  1094. }
  1095. catch(Exception &e)
  1096. {
  1097. }
  1098. }
  1099. } catch(...) {}
  1100. }
  1101. //---------------------------------------------------------------------------
  1102. void __fastcall TVMSM430M::ChkFullScreenClick(TObject *Sender)
  1103. {
  1104. FFPlayer1->AspectRatio = ChkFullScreen->Checked ? -1 : 0;
  1105. }
  1106. //---------------------------------------------------------------------------
  1107. void __fastcall TVMSM430M::TrackBar1Change(TObject *Sender)
  1108. {
  1109. int nTag = dynamic_cast<TComponent *>(Sender)->Tag;
  1110. switch(nTag)
  1111. {
  1112. case 0:
  1113. case 1:
  1114. case 2:
  1115. break;
  1116. default: return;
  1117. }
  1118. if (!FTrackChanging[nTag] && !IsMouseDown())
  1119. {
  1120. FFPlayer[nTag]->Seek(FDuration[nTag] * FTrackBar[nTag]->Position / FTrackBar[nTag]->Max);
  1121. }
  1122. }
  1123. //---------------------------------------------------------------------------
  1124. void __fastcall TVMSM430M::FFPlayer1FileOpen(TObject *Sender, const __int64 ADuration, int AFrameWidth, int AFrameHeight,
  1125. int &AScreenWidth, int &AScreenHeight)
  1126. {
  1127. int nTag = dynamic_cast<TComponent *>(Sender)->Tag;
  1128. switch(nTag)
  1129. {
  1130. case 0:
  1131. case 1:
  1132. case 2:
  1133. break;
  1134. default: return;
  1135. }
  1136. #if 0
  1137. FPlayTime = (ADuration + 5000) / 1000000;
  1138. FPlayTime++;
  1139. FThumbNail = 0;
  1140. FMakeThumbNail = true;
  1141. #endif
  1142. FDuration[nTag] = ADuration;
  1143. FLblDuration[nTag]->Caption = DurationToStr(ADuration);
  1144. FLblCurrPTS[nTag]->Caption = "N/A";
  1145. // setup track bar
  1146. FTrackBar[nTag]->Frequency = 5;
  1147. FTrackBar[nTag]->TickStyle = tsAuto;
  1148. FTrackBar[nTag]->Max = FTrackBar[nTag]->Width;
  1149. FTrackBar[nTag]->SelStart = 0;
  1150. FTrackBar[nTag]->SelEnd = 0;
  1151. FTrackBar[nTag]->SliderVisible = ADuration > 0;
  1152. FTrackChanging[nTag] = true;
  1153. try
  1154. {
  1155. FTrackBar[nTag]->Position = 0;
  1156. }
  1157. __finally
  1158. {
  1159. FTrackChanging[nTag]= false;
  1160. }
  1161. }
  1162. //---------------------------------------------------------------------------
  1163. void __fastcall TVMSM430M::FFPlayer1OpenFailed(TObject *Sender)
  1164. {
  1165. int nTag = dynamic_cast<TComponent *>(Sender)->Tag;
  1166. switch(nTag)
  1167. {
  1168. case 0:
  1169. case 1:
  1170. case 2:
  1171. break;
  1172. default: return;
  1173. }
  1174. String sLastErrMsg = FFPlayer[nTag]->LastErrMsg;
  1175. FDispArea[nTag]->Caption = sLastErrMsg;
  1176. }
  1177. //---------------------------------------------------------------------------
  1178. void __fastcall TVMSM430M::FFPlayer1Position(TObject *Sender, const __int64 APTS)
  1179. {
  1180. int nTag = dynamic_cast<TComponent *>(Sender)->Tag;
  1181. switch(nTag)
  1182. {
  1183. case 0:
  1184. case 1:
  1185. case 2:
  1186. break;
  1187. default: return;
  1188. }
  1189. FLblCurrPTS[nTag]->Caption = DurationToStr(APTS);
  1190. if ((APTS >= 0) && (FDuration[nTag] > 0))
  1191. {
  1192. FTrackBar[nTag]->SelEnd = FTrackBar[nTag]->Max * APTS / FDuration[nTag];
  1193. if (FTrackChanging[nTag] == false && (IsMouseDown() == false || FTrackBar[nTag]->Focused() == false))
  1194. {
  1195. FTrackChanging[nTag] = true;
  1196. try
  1197. {
  1198. FTrackBar[nTag]->Position = FTrackBar[nTag]->Max * APTS / FDuration[nTag];
  1199. }
  1200. __finally
  1201. {
  1202. FTrackChanging[nTag] = false;
  1203. }
  1204. }
  1205. if (FMakeThumbNail)
  1206. {
  1207. FThumbNail++;
  1208. if (FThumbNail > 2)
  1209. {
  1210. //섬네일이미지 생성
  1211. FMakeThumbNail = false;
  1212. }
  1213. }
  1214. }
  1215. }
  1216. //---------------------------------------------------------------------------
  1217. void __fastcall TVMSM430M::FFPlayer1State(TObject *Sender, TPlayState APlayState)
  1218. {
  1219. int nTag = dynamic_cast<TComponent *>(Sender)->Tag;
  1220. switch(nTag)
  1221. {
  1222. case 0:
  1223. case 1:
  1224. case 2:
  1225. break;
  1226. default: return;
  1227. }
  1228. switch(APlayState)
  1229. {
  1230. case Ffbasecomponent::psPlay:
  1231. case Ffbasecomponent::psResume:
  1232. break;
  1233. case Ffbasecomponent::psPause:
  1234. case Ffbasecomponent::psStep:
  1235. break;
  1236. case Ffbasecomponent::psStop:
  1237. if (FFPlayer[nTag]->ScreenHandle != NULL)
  1238. {
  1239. PostMessage(FFPlayer[nTag]->ScreenHandle, CM_INVALIDATE, 0, 0);
  1240. UpdateWindow(FFPlayer[nTag]->ScreenHandle);
  1241. }
  1242. break;
  1243. case Ffbasecomponent::psEnd:
  1244. {
  1245. FFPlayer[nTag]->Stop(true);
  1246. //FFPlayer[nTag]->Seek((__int64)0, TSeekFlags()<<sfBackward);
  1247. }
  1248. break;
  1249. }
  1250. }
  1251. //---------------------------------------------------------------------------