VMSM430MF.cpp 45 KB

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