VMSM430MF.cpp 42 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380
  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 (!FrmLang->GetNextVmsImgeId(nNmbr, 5000, 5999))
  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. void __fastcall TVMSM430M::BtnDeleteClick(TObject *Sender)
  613. {
  614. int nIdx = TvList->DataController->FocusedRecordIndex;
  615. if (nIdx < 0) return;
  616. String sId = EdNmbr->Text;
  617. if (sId.IsEmpty())
  618. {
  619. Application->MessageBox(lblImage6->Caption.c_str(),//L"삭제할 VMS 이미지를 목록에서 선택하세요.\r\n목록에서 더블클릭하여 선택합니다.",
  620. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  621. return;
  622. }
  623. if (FrmLang->CheckImageUseCount(sId) > 0)
  624. {
  625. Application->MessageBox(FrmLang->lblImage5->Caption.c_str(),//L"삭제할 이미지가 VMS 폼에서 사용되고 있습니다.\r\n먼저 해당 폼에서 삭제해주시기 바랍니다.",
  626. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  627. return;
  628. }
  629. String sMsg;
  630. sMsg = lblImage7->Caption + ": " + sId;//"VMS이미지번호: " + sId;
  631. sMsg+= "\r\n" + lblImage8->Caption;//"선택하신 VMS 이미지 정보를 삭제하시겠습니까?";
  632. if (Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES) return;
  633. if (FrmLang->DelVmsImage(sId, false))
  634. {
  635. FUpdate = true;
  636. Application->MessageBox(lblImage9->Caption.c_str(),//L"VMS 이미지정보삭제\r\nVMS 이미지정보를 삭제 하였습니다.",
  637. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  638. FormInit();
  639. ChangeEditMode(1);
  640. LoadImageSymbol();
  641. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_14, 0);
  642. }
  643. }
  644. //---------------------------------------------------------------------------
  645. void __fastcall TVMSM430M::BtnSaveImgFileClick(TObject *Sender)
  646. {
  647. SaveDialog->Title = FTitle;
  648. SaveDialog->InitialDir = ExtractFilePath(Application->ExeName);
  649. SaveDialog->Filter = "Video Files|*.AVI;*.MP4;*.MPG;*.MPEG";
  650. SaveDialog->FileName = EdFileName->Text;
  651. if (SaveDialog->Execute())
  652. {
  653. try {
  654. String sFileName = SaveDialog->FileName;
  655. int iRet = sFileName.Pos(".bmp");
  656. if (iRet == 0)
  657. {
  658. sFileName = SaveDialog->FileName + ".bmp";
  659. }
  660. ImgPreView->Picture->SaveToFile(sFileName);
  661. }
  662. catch (Exception &exception)
  663. {
  664. Application->ShowException(&exception);
  665. }
  666. }
  667. }
  668. //---------------------------------------------------------------------------
  669. void __fastcall TVMSM430M::EdImageFileNameClick(TObject *Sender)
  670. {
  671. OpenBmp->Title = FTitle;
  672. OpenBmp->FileName = "";
  673. OpenBmp->Execute();
  674. }
  675. //---------------------------------------------------------------------------
  676. void __fastcall TVMSM430M::OpenBmpCanClose(TObject *Sender, bool &CanClose)
  677. {
  678. String sFName = OpenBmp->FileName;
  679. if (!FFDecoder1->LoadFile(sFName))
  680. {
  681. Application->MessageBox(lblImage12->Caption.c_str(),//L"이미지 파일을 읽어 오는데 실패하였습니다.",
  682. lblImage1->Caption.c_str(),//L"VMS 이미지 선택",
  683. MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  684. return;
  685. }
  686. if (FFDecoder1->Decode())
  687. {
  688. __int64 FDuration = FFDecoder1->FileStreamInfo.Duration;
  689. //__int64 FCurrentPTS = FFDecoder1->FrameInfo.PTS;
  690. FPlayTime = (FDuration + 5000) / 1000000;
  691. FPlayTime++;
  692. FFDecoder1->CopyToBitmap(ImgTemp->Picture->Bitmap);
  693. ImgPreView->Picture->Bitmap->Width = ImgPreView->Width;
  694. ImgPreView->Picture->Bitmap->Height = ImgPreView->Height;
  695. APP_ImageClear(ImgPreView->Canvas, 0, 0, ImgPreView->Width, ImgPreView->Height, clBlack);
  696. SetStretchBltMode(ImgPreView->Canvas->Handle, MAXSTRETCHBLTMODE);//HALFTONE);//MAXSTRETCHBLTMODE)//STRETCH_HALFTONE;
  697. ImgPreView->Canvas->CopyRect(Classes::Rect(0, 0, ImgPreView->Width, ImgPreView->Height),
  698. ImgTemp->Picture->Bitmap->Canvas,
  699. Classes::Rect(0, 0, ImgTemp->Picture->Bitmap->Width, ImgTemp->Picture->Bitmap->Height));
  700. }
  701. FFDecoder1->CloseFile();
  702. try
  703. {
  704. FFileSize = ITSUtil_GetFileSize(sFName);
  705. if (FFileSize <= 0)
  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. //EdImageSize->Text = String(dwFileSize);//GetFileSize(sFName));
  713. EdImageFileName->Text = sFName;
  714. PlayerFile[0] = sFName;
  715. BtnPlay->Enabled = true;
  716. BtnStop->Enabled = false;
  717. BtnPause->Enabled = false;
  718. //FVideoStream
  719. FFileName = ExtractFileName(sFName);
  720. EdExpl->Text = FFileName;
  721. FFileExt = ExtractFileExt(sFName);
  722. EdFileName->Text = FFileName;
  723. //EdFileName->Text = EdNmbr->Text + FFileExt;
  724. //EdFileName->Properties->ReadOnly = false;
  725. }
  726. catch(...)
  727. {
  728. }
  729. }
  730. //---------------------------------------------------------------------------
  731. void __fastcall TVMSM430M::ClearSymbloList()
  732. {
  733. for(int ii = 0; ii < FListSymb->Count; ii++)
  734. {
  735. Graphics::TBitmap *bitmap = (Graphics::TBitmap *)FListSymb->Items[ii];
  736. delete bitmap;
  737. }
  738. FListSymb->Clear();
  739. }
  740. //---------------------------------------------------------------------------
  741. void __fastcall TVMSM430M::LoadImageSymbol()
  742. {
  743. FormInit();
  744. CMM_ClearGridTableView(TvList);
  745. ClearSymbloList();
  746. String sQry;
  747. TADOQuery *pADO = NULL;
  748. sQry = "SELECT SYMB_LIB_NMBR, \r\n"
  749. " IMAG_DATA, \r\n"
  750. " SYMB_EXPL, SYMB_FILE_NM, SYMB_TYPE, \r\n"
  751. " AVI_DATA \r\n"
  752. " FROM TB_VMS_SYMB_LIB \r\n"
  753. " WHERE SYMB_LIB_NMBR BETWEEN 5000 AND 5999 \r\n"
  754. " AND SYMB_TYPE = 'SBT3' \r\n"
  755. " AND DEL_YN = 'N' \r\n"
  756. " ORDER BY SYMB_LIB_NMBR \r\n";
  757. ForceDirectories(g_sVideoDir.c_str());
  758. try
  759. {
  760. int nRow;
  761. TcxDataController *pGDC = TvList->DataController;
  762. TvList->BeginUpdate();
  763. try
  764. {
  765. pADO = new TADOQuery(NULL);
  766. pADO->Close();
  767. pADO->Connection = ITSDb_GetConnection();
  768. ITSDb_SQLText(pADO, sQry);
  769. ITSDb_SQLOpen(pADO);
  770. for( ; !pADO->Eof; pADO->Next())
  771. {
  772. nRow = pGDC->AppendRecord();
  773. pGDC->Values[nRow][ColLink1->Index] = pADO->FieldByName("SYMB_LIB_NMBR")->AsString;
  774. pGDC->Values[nRow][ColLink2->Index] = pADO->FieldByName("IMAG_DATA")->AsVariant;
  775. pGDC->Values[nRow][ColLink3->Index] = pADO->FieldByName("SYMB_EXPL")->AsString;
  776. pGDC->Values[nRow][ColLink4->Index] = pADO->FieldByName("SYMB_TYPE")->AsString;
  777. pGDC->Values[nRow][ColLink5->Index] = pADO->FieldByName("SYMB_FILE_NM")->AsString;
  778. #if 0
  779. String strmFileName = g_sVideoDir + pADO->FieldByName("SYMB_FILE_NM")->AsString;
  780. if (!FileExists(strmFileName))
  781. {
  782. TMemoryStream *Stream1 = (TMemoryStream *)pADO->CreateBlobStream(pADO->FieldByName("AVI_DATA"), bmRead);
  783. Stream1->SaveToFile(strmFileName);
  784. SAFE_DELETE(Stream1);
  785. }
  786. #endif
  787. Graphics::TBitmap *bitmap = new Graphics::TBitmap;
  788. try
  789. {
  790. bitmap->LoadFromStream(pADO->CreateBlobStream(pADO->FieldByName("IMAG_DATA"), bmRead));
  791. }
  792. catch(...)
  793. {
  794. bitmap->Assign(ImgTemp->Picture->Bitmap);
  795. }
  796. FListSymb->Add(bitmap);
  797. }
  798. }
  799. catch(EDatabaseError &E)
  800. {
  801. DBERRORMSG("TVMSM430M::LoadImageSymbol", String(E.ClassName()), E.Message, sQry);
  802. throw Exception(String(E.ClassName()) + E.Message);
  803. }
  804. catch(Exception &e)
  805. {
  806. DBERRORMSG("TVMSM430M::LoadImageSymbol", String(e.ClassName()), e.Message, sQry);
  807. throw Exception(String(e.ClassName()) + e.Message);
  808. }
  809. }
  810. __finally
  811. {
  812. if (pADO)
  813. {
  814. pADO->Close();
  815. delete pADO;
  816. }
  817. TvList->EndUpdate();
  818. }
  819. }
  820. //---------------------------------------------------------------------------
  821. bool __fastcall TVMSM430M::IsUsedVideoFileName(String AFileName)
  822. {
  823. String sQry;
  824. TADOQuery *pADO = NULL;
  825. sQry = "SELECT COUNT(1) AS CNT \r\n"
  826. " FROM TB_VMS_SYMB_LIB \r\n"
  827. " WHERE SYMB_TYPE = 'SBT3' \r\n"
  828. " AND SYMB_FILE_NM = :p01 \r\n";
  829. int nExist = 1;
  830. try
  831. {
  832. try
  833. {
  834. pADO = new TADOQuery(NULL);
  835. pADO->Close();
  836. pADO->Connection = ITSDb_GetConnection();
  837. ITSDb_SQLText(pADO, sQry);
  838. ITSDb_SQLBind(pADO, "p01", AFileName);
  839. ITSDb_SQLOpen(pADO);
  840. for( ; !pADO->Eof; pADO->Next())
  841. {
  842. nExist = pADO->FieldByName("CNT")->AsInteger;
  843. }
  844. }
  845. catch(EDatabaseError &E)
  846. {
  847. DBERRORMSG("TVMSM430M::IsUsedVideoFileName", String(E.ClassName()), E.Message, sQry);
  848. throw Exception(String(E.ClassName()) + E.Message);
  849. }
  850. catch(Exception &e)
  851. {
  852. DBERRORMSG("TVMSM430M::IsUsedVideoFileName", String(e.ClassName()), e.Message, sQry);
  853. throw Exception(String(e.ClassName()) + e.Message);
  854. }
  855. }
  856. __finally
  857. {
  858. if (pADO)
  859. {
  860. pADO->Close();
  861. delete pADO;
  862. }
  863. }
  864. return nExist == 0 ? false : true;
  865. }
  866. //---------------------------------------------------------------------------
  867. void __fastcall TVMSM430M::TvListCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo,
  868. TMouseButton AButton, TShiftState AShift,
  869. bool &AHandled)
  870. {
  871. if (!ACellViewInfo) return;
  872. DisplayInfo();
  873. }
  874. //---------------------------------------------------------------------------
  875. void __fastcall TVMSM430M::BtnDownloadClick(TObject *Sender)
  876. {
  877. if (EdNmbr->Text.IsEmpty())
  878. {
  879. Application->MessageBox(lblText2->Caption.c_str(),//L"VMS 이미지 제어기 다운로드\r\n이미지를 선택 하세요.",
  880. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  881. return;
  882. }
  883. int nSelects = CMM_GetCheckCount(FRAMEVmsList1->TvList, FRAMEVmsList1->ColumnSel->Index);
  884. if (0 == nSelects)
  885. {
  886. Application->MessageBox(lblText3->Caption.c_str(),//L"VMS 이미지 제어기 다운로드\r\n다운로드할 VMS 제어기를 선택 하세요.",
  887. FTitle.c_str(), MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  888. return;
  889. }
  890. String sNmbr = EdNmbr->Text;
  891. String sMsg;
  892. sMsg = lblImage7->Caption + ": " + sNmbr;//"VMS이미지번호: " + sNmbr;
  893. sMsg+= "\r\n" + lblText4->Caption;//"선택하신 VMS 이미지 정보를 선택한 VMS 제어기로 다운로드 하시겠습니까?";
  894. if (Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES) return;
  895. String sUserId = g_pLOGIN->sUserId;
  896. String sRgstDt = Now().FormatString("yyyymmddhhnnss");
  897. String sQry;
  898. TADOQuery *pADO = NULL;
  899. sQry = "INSERT INTO TB_VMS_DOWNLOAD ( \r\n"
  900. " RGST_DT, \r\n"
  901. " VMS_CTLR_NMBR, \r\n"
  902. " FILETYPE, \r\n"
  903. " FILEID, \r\n"
  904. " USER_ID) \r\n"
  905. " VALUES ( \r\n"
  906. " :p01, \r\n"
  907. " :p02, \r\n"
  908. " :p03, \r\n"
  909. " :p04, \r\n"
  910. " :p05 ) \r\n";
  911. try
  912. {
  913. try
  914. {
  915. pADO = new TADOQuery(NULL);
  916. pADO->Close();
  917. pADO->Connection = ITSDb_GetConnection();
  918. ITSDb_SQLText(pADO, sQry);
  919. ITSDb_GetConnection()->BeginTrans();
  920. int nRowCnt = FRAMEVmsList1->TvList->ViewData->RecordCount;
  921. for (int ii = 0; ii < nRowCnt; ii++)
  922. {
  923. TcxCustomGridRow* ARow = FRAMEVmsList1->TvList->ViewData->Rows[ii];
  924. if (((bool)ARow->Values[FRAMEVmsList1->ColumnSel->Index]))
  925. {
  926. String sVmsNmbr = VarToStr(ARow->Values[FRAMEVmsList1->Column01->Index]);
  927. ITSDb_SQLBind(pADO, "p01", sRgstDt);
  928. ITSDb_SQLBind(pADO, "p02", sVmsNmbr);
  929. ITSDb_SQLBind(pADO, "p03", "1");
  930. ITSDb_SQLBind(pADO, "p04", sNmbr);
  931. ITSDb_SQLBind(pADO, "p05", sUserId);
  932. ITSDb_SQLExec(pADO);
  933. }
  934. }
  935. ITSDb_GetConnection()->CommitTrans();
  936. }
  937. catch(EDatabaseError &E)
  938. {
  939. ITSDb_GetConnection()->RollbackTrans();
  940. DBERRORMSG("TVMSM430M::BtnDownloadClick", String(E.ClassName()), E.Message, sQry);
  941. throw Exception(String(E.ClassName()) + E.Message);
  942. }
  943. catch(Exception &e)
  944. {
  945. ITSDb_GetConnection()->RollbackTrans();
  946. DBERRORMSG("TVMSM430M::BtnDownloadClick", String(e.ClassName()), e.Message, sQry);
  947. throw Exception(String(e.ClassName()) + e.Message);
  948. }
  949. }
  950. __finally
  951. {
  952. if (pADO)
  953. {
  954. pADO->Close();
  955. delete pADO;
  956. }
  957. }
  958. #if 0
  959. sMsg = "VMS 이미지 제어기 다운로드\r\n"
  960. "VMS 이미지를 제어기로 다운로드 요청하였습니다.\r\n"
  961. "VMS 제어기 통신상태에 따라 다운로드가 원활하게 진행되지 않을 수 있습니다.";
  962. #else
  963. sMsg = lblText5->Caption;
  964. #endif
  965. Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  966. //FRAMEVmsList1->BtnAllSelectClick((TObject*)FRAMEVmsList1->BtnAllClear);
  967. }
  968. //---------------------------------------------------------------------------
  969. void __fastcall TVMSM430M::TvListFocusedRecordChanged(TcxCustomGridTableView *Sender,
  970. TcxCustomGridRecord *APrevFocusedRecord, TcxCustomGridRecord *AFocusedRecord,
  971. bool ANewItemRecordFocusingChanged)
  972. {
  973. if (!AFocusedRecord) return;
  974. DisplayInfo();
  975. }
  976. //---------------------------------------------------------------------------
  977. void __fastcall TVMSM430M::BtnPlayClick(TObject *Sender)
  978. {
  979. BtnPlay->Enabled = false;
  980. for (int ii = 0; ii < MAX_PLAYER; ii++)
  981. {
  982. Application->ProcessMessages();
  983. try
  984. {
  985. if (PlayerFile[ii] == "")
  986. {
  987. if (FFPlayer[ii]->ScreenHandle != NULL)
  988. {
  989. FFPlayer[ii]->Stop(true);
  990. PostMessage(FFPlayer[ii]->ScreenHandle, CM_INVALIDATE, 0, 0);
  991. UpdateWindow(FFPlayer[ii]->ScreenHandle);
  992. }
  993. continue;
  994. }
  995. FFPlayer[ii]->AspectRatio = ChkFullScreen->Checked ? -1 : 0;
  996. FFPlayer[ii]->TryOpen(PlayerFile[ii], FDispArea[ii]->Handle);
  997. Application->ProcessMessages();
  998. }
  999. catch(Exception &e)
  1000. {
  1001. }
  1002. }
  1003. BtnStop->Enabled = true;
  1004. BtnPause->Enabled = true;
  1005. FPlayStream = true;
  1006. ImgPreView->Visible = false;
  1007. }
  1008. //---------------------------------------------------------------------------
  1009. void __fastcall TVMSM430M::BtnStopClick(TObject *Sender)
  1010. {
  1011. BtnStop->Enabled = false;
  1012. BtnPause->Enabled = false;
  1013. try
  1014. {
  1015. for (int ii = 0; ii < MAX_PLAYER; ii++)
  1016. {
  1017. try
  1018. {
  1019. if (FFPlayer[ii]->ScreenHandle != NULL)
  1020. {
  1021. FFPlayer[ii]->Stop(true);
  1022. }
  1023. Application->ProcessMessages();
  1024. }
  1025. catch(Exception &e)
  1026. {
  1027. }
  1028. }
  1029. } catch(...) {}
  1030. BtnPlay->Enabled = true;
  1031. FPlayStream = false;
  1032. ImgPreView->Visible = true;
  1033. }
  1034. //---------------------------------------------------------------------------
  1035. void __fastcall TVMSM430M::BtnPauseClick(TObject *Sender)
  1036. {
  1037. try
  1038. {
  1039. for (int ii = 0; ii < MAX_PLAYER; ii++)
  1040. {
  1041. try
  1042. {
  1043. if (FFPlayer[ii]->ScreenHandle != NULL)
  1044. {
  1045. FFPlayer[ii]->TogglePause();
  1046. }
  1047. Application->ProcessMessages();
  1048. }
  1049. catch(Exception &e)
  1050. {
  1051. }
  1052. }
  1053. } catch(...) {}
  1054. }
  1055. //---------------------------------------------------------------------------
  1056. void __fastcall TVMSM430M::ChkFullScreenClick(TObject *Sender)
  1057. {
  1058. FFPlayer1->AspectRatio = ChkFullScreen->Checked ? -1 : 0;
  1059. }
  1060. //---------------------------------------------------------------------------
  1061. void __fastcall TVMSM430M::TrackBar1Change(TObject *Sender)
  1062. {
  1063. int nTag = dynamic_cast<TComponent *>(Sender)->Tag;
  1064. switch(nTag)
  1065. {
  1066. case 0:
  1067. case 1:
  1068. case 2:
  1069. break;
  1070. default: return;
  1071. }
  1072. if (!FTrackChanging[nTag] && !IsMouseDown())
  1073. {
  1074. FFPlayer[nTag]->Seek(FDuration[nTag] * FTrackBar[nTag]->Position / FTrackBar[nTag]->Max);
  1075. }
  1076. }
  1077. //---------------------------------------------------------------------------
  1078. void __fastcall TVMSM430M::FFPlayer1FileOpen(TObject *Sender, const __int64 ADuration, int AFrameWidth, int AFrameHeight,
  1079. int &AScreenWidth, int &AScreenHeight)
  1080. {
  1081. int nTag = dynamic_cast<TComponent *>(Sender)->Tag;
  1082. switch(nTag)
  1083. {
  1084. case 0:
  1085. case 1:
  1086. case 2:
  1087. break;
  1088. default: return;
  1089. }
  1090. #if 0
  1091. FPlayTime = (ADuration + 5000) / 1000000;
  1092. FPlayTime++;
  1093. FThumbNail = 0;
  1094. FMakeThumbNail = true;
  1095. #endif
  1096. FDuration[nTag] = ADuration;
  1097. FLblDuration[nTag]->Caption = DurationToStr(ADuration);
  1098. FLblCurrPTS[nTag]->Caption = "N/A";
  1099. // setup track bar
  1100. FTrackBar[nTag]->Frequency = 5;
  1101. FTrackBar[nTag]->TickStyle = tsAuto;
  1102. FTrackBar[nTag]->Max = FTrackBar[nTag]->Width;
  1103. FTrackBar[nTag]->SelStart = 0;
  1104. FTrackBar[nTag]->SelEnd = 0;
  1105. FTrackBar[nTag]->SliderVisible = ADuration > 0;
  1106. FTrackChanging[nTag] = true;
  1107. try
  1108. {
  1109. FTrackBar[nTag]->Position = 0;
  1110. }
  1111. __finally
  1112. {
  1113. FTrackChanging[nTag]= false;
  1114. }
  1115. }
  1116. //---------------------------------------------------------------------------
  1117. void __fastcall TVMSM430M::FFPlayer1OpenFailed(TObject *Sender)
  1118. {
  1119. int nTag = dynamic_cast<TComponent *>(Sender)->Tag;
  1120. switch(nTag)
  1121. {
  1122. case 0:
  1123. case 1:
  1124. case 2:
  1125. break;
  1126. default: return;
  1127. }
  1128. String sLastErrMsg = FFPlayer[nTag]->LastErrMsg;
  1129. FDispArea[nTag]->Caption = sLastErrMsg;
  1130. }
  1131. //---------------------------------------------------------------------------
  1132. void __fastcall TVMSM430M::FFPlayer1Position(TObject *Sender, const __int64 APTS)
  1133. {
  1134. int nTag = dynamic_cast<TComponent *>(Sender)->Tag;
  1135. switch(nTag)
  1136. {
  1137. case 0:
  1138. case 1:
  1139. case 2:
  1140. break;
  1141. default: return;
  1142. }
  1143. FLblCurrPTS[nTag]->Caption = DurationToStr(APTS);
  1144. if ((APTS >= 0) && (FDuration[nTag] > 0))
  1145. {
  1146. FTrackBar[nTag]->SelEnd = FTrackBar[nTag]->Max * APTS / FDuration[nTag];
  1147. if (FTrackChanging[nTag] == false && (IsMouseDown() == false || FTrackBar[nTag]->Focused() == false))
  1148. {
  1149. FTrackChanging[nTag] = true;
  1150. try
  1151. {
  1152. FTrackBar[nTag]->Position = FTrackBar[nTag]->Max * APTS / FDuration[nTag];
  1153. }
  1154. __finally
  1155. {
  1156. FTrackChanging[nTag] = false;
  1157. }
  1158. }
  1159. if (FMakeThumbNail)
  1160. {
  1161. FThumbNail++;
  1162. if (FThumbNail > 2)
  1163. {
  1164. //섬네일이미지 생성
  1165. FMakeThumbNail = false;
  1166. }
  1167. }
  1168. }
  1169. }
  1170. //---------------------------------------------------------------------------
  1171. void __fastcall TVMSM430M::FFPlayer1State(TObject *Sender, TPlayState APlayState)
  1172. {
  1173. int nTag = dynamic_cast<TComponent *>(Sender)->Tag;
  1174. switch(nTag)
  1175. {
  1176. case 0:
  1177. case 1:
  1178. case 2:
  1179. break;
  1180. default: return;
  1181. }
  1182. switch(APlayState)
  1183. {
  1184. case Ffbasecomponent::psPlay:
  1185. case Ffbasecomponent::psResume:
  1186. break;
  1187. case Ffbasecomponent::psPause:
  1188. case Ffbasecomponent::psStep:
  1189. break;
  1190. case Ffbasecomponent::psStop:
  1191. if (FFPlayer[nTag]->ScreenHandle != NULL)
  1192. {
  1193. PostMessage(FFPlayer[nTag]->ScreenHandle, CM_INVALIDATE, 0, 0);
  1194. UpdateWindow(FFPlayer[nTag]->ScreenHandle);
  1195. }
  1196. break;
  1197. case Ffbasecomponent::psEnd:
  1198. {
  1199. FFPlayer[nTag]->Stop(true);
  1200. //FFPlayer[nTag]->Seek((__int64)0, TSeekFlags()<<sfBackward);
  1201. }
  1202. break;
  1203. }
  1204. }
  1205. //---------------------------------------------------------------------------