FrmVmsMsgF.cpp 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #include "ITSDbF.h"
  4. #include "ITSUtilF.h"
  5. #include "AppGlobalF.h"
  6. #include "ITSLangTransF.h"
  7. #pragma hdrstop
  8. #include "FrmVmsMsgF.h"
  9. //---------------------------------------------------------------------------
  10. #pragma package(smart_init)
  11. #pragma link "cxContainer"
  12. #pragma link "cxControls"
  13. #pragma link "cxEdit"
  14. #pragma link "cxGraphics"
  15. #pragma link "cxLabel"
  16. #pragma link "cxLookAndFeelPainters"
  17. #pragma link "cxLookAndFeels"
  18. #pragma link "dxSkinBlack"
  19. #pragma link "dxSkinBlue"
  20. #pragma link "dxSkinsCore"
  21. #pragma link "FFBaseComponent"
  22. #pragma link "FFBasePlay"
  23. #pragma link "FFPlay"
  24. #pragma resource "*.dfm"
  25. #define LICENSE_KEY "FSXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX"
  26. TFrmVmsMsg *FrmVmsMsg;
  27. //---------------------------------------------------------------------------
  28. __fastcall TFrmVmsMsg::TFrmVmsMsg(TComponent* Owner, TVmsCtlr *AObj)
  29. : TForm(Owner)
  30. {
  31. LangTrans->Translate(this, ITSDb_GetConnection());
  32. FObj = AObj;
  33. FQryHour = -1;
  34. FQryMin = -1;
  35. for (int ii = 0; ii < INT_VMS_MAX_FORM; ii++)
  36. {
  37. FVmsImage[ii] = new TImage(this);
  38. FVmsImage[ii]->Visible = false;
  39. FInterval[ii] = 1;
  40. }
  41. FPhaseCnt = 0;
  42. FFormQuery = false;
  43. pADO->Connection = ITSDb_GetConnection();
  44. SetVmsForm();
  45. String sAVILibDir = g_sAppDir + "LibAV";
  46. FFPlayer1->SetLicenseKey(LICENSE_KEY);
  47. FFPlayer1->DisableFPUExceptions();
  48. if (!FFPlayer1->LoadAVLib(sAVILibDir))
  49. {
  50. #if 0
  51. if (g_AppCfg.sLang != "kr") Application->MessageBox(L"Stream display library load failed.", L"Stream display fail", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  52. else Application->MessageBox(L"영상표출 라이브러리를 로드하지 못하였습니다.", L"영상표출 오류", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  53. #endif
  54. }
  55. }
  56. //---------------------------------------------------------------------------
  57. void __fastcall TFrmVmsMsg::FormClose(TObject *Sender, TCloseAction &Action)
  58. {
  59. TmrTicker->Enabled = false;
  60. TmrVmsMsgDisp->Enabled = false;
  61. if (FFPlayer1->ScreenHandle != NULL)
  62. {
  63. FFPlayer1->Stop(true);
  64. PostMessage(FFPlayer1->ScreenHandle, CM_INVALIDATE, 0, 0);
  65. UpdateWindow(FFPlayer1->ScreenHandle);
  66. FFPlayer1->ScreenHandle = NULL;
  67. }
  68. Action = caFree;
  69. }
  70. //---------------------------------------------------------------------------
  71. void __fastcall TFrmVmsMsg::FormShow(TObject *Sender)
  72. {
  73. TmrShow->Enabled = true;
  74. }
  75. //---------------------------------------------------------------------------
  76. void __fastcall TFrmVmsMsg::TmrShowTimer(TObject *Sender)
  77. {
  78. TmrShow->Enabled = false;
  79. if (FObj)
  80. {
  81. Caption = FObj->VMS_CTLR_ID + ": " + FObj->VMS_NM;
  82. }
  83. TmrVmsMsgDisp->Interval = 100;
  84. TmrVmsMsgDisp->Enabled = true;
  85. }
  86. //---------------------------------------------------------------------------
  87. void __fastcall TFrmVmsMsg::SetVmsForm()
  88. {
  89. if (!FObj) return;
  90. int nW = PnlVmsMsgDisp->Width;
  91. int nH = PnlVmsMsgDisp->Height;
  92. nH = FObj->HEIGHT;
  93. nW = FObj->WIDTH;
  94. ClientWidth = nW;
  95. ClientHeight= nH + PnlOffer->Height;
  96. PnlVmsMsgDisp->Width = nW;
  97. PnlVmsMsgDisp->Height = nH;
  98. ImgForm->Width = nW;
  99. ImgForm->Height = nH;
  100. ImgForm->Picture->Bitmap->Width = nW;
  101. ImgForm->Picture->Bitmap->Height= nH;
  102. PnlVmsMsgDisp->ParentColor = false;
  103. PnlVmsMsgDisp->Color = clBlack;
  104. ImgForm->Left = 0;
  105. ImgForm->Top = 0;
  106. }
  107. //---------------------------------------------------------------------------
  108. void __fastcall TFrmVmsMsg::ClearVmsForm()
  109. {
  110. TCanvas *pCanvas = ImgForm->Canvas;
  111. try {
  112. pCanvas->Lock();
  113. try {
  114. pCanvas->Pen->Color = clWhite;
  115. pCanvas->Pen->Width = 0;
  116. pCanvas->Pen->Style = psClear;
  117. pCanvas->Brush->Style = bsSolid;
  118. pCanvas->Brush->Color = clBlack;
  119. pCanvas->Rectangle(0, 0, ImgForm->Width, ImgForm->Height);
  120. } catch(...) { }
  121. } __finally {
  122. ImgForm->Refresh();
  123. pCanvas->Unlock();
  124. }
  125. }
  126. //---------------------------------------------------------------------------
  127. void __fastcall TFrmVmsMsg::VmsFormReload()
  128. {
  129. FFormQuery = true;
  130. TmrVmsMsgDisp->Interval = 500;
  131. TmrVmsMsgDisp->Enabled = true;
  132. }
  133. //---------------------------------------------------------------------------
  134. void __fastcall TFrmVmsMsg::TmrVmsMsgDispTimer(TObject *Sender)
  135. {
  136. TmrVmsMsgDisp->Enabled = false;
  137. TmrTicker->Enabled = false;
  138. LblTicker->Caption = " - ";
  139. if (FFPlayer1->ScreenHandle != NULL)
  140. {
  141. FFPlayer1->Stop(true);
  142. PostMessage(FFPlayer1->ScreenHandle, CM_INVALIDATE, 0, 0);
  143. UpdateWindow(FFPlayer1->ScreenHandle);
  144. FFPlayer1->ScreenHandle = NULL;
  145. ImgForm->Visible = true;
  146. }
  147. PnlOffer->Caption = " " + lblTm->Caption + ":";
  148. PnlOffer->Font->Color = clBlack;
  149. bool bQry = false;
  150. if (FQryMin < 0)
  151. {
  152. bQry = true;
  153. FQryMin = StrToInt(Now().FormatString("nn"));
  154. if ((FQryMin % 5) == 0)
  155. FQryMin--;
  156. }
  157. else
  158. {
  159. int nCurMin = StrToInt(Now().FormatString("nn"));
  160. int nCurSec = StrToInt(Now().FormatString("ss"));
  161. if ((nCurMin % 5) == 0 && nCurSec >= 45)
  162. {
  163. if (FQryMin != nCurMin)
  164. {
  165. FQryMin = nCurMin;
  166. bQry = true;
  167. }
  168. }
  169. }
  170. if (bQry || FFormQuery)
  171. {
  172. SelectVmsForm();
  173. if (FPhaseCnt == 0)
  174. {
  175. PnlVmsMsgDisp->ParentColor = false;
  176. PnlVmsMsgDisp->Color = clBlack;
  177. ImgForm->Visible = false;
  178. }
  179. else
  180. {
  181. ImgForm->Visible = true;
  182. }
  183. }
  184. else
  185. {
  186. if (FDispIndex >= FPhaseCnt)
  187. {
  188. FDispIndex = 0;
  189. }
  190. }
  191. int nInterval = 5; //5초
  192. try
  193. {
  194. if (FDispIndex < FPhaseCnt)
  195. {
  196. nInterval = FInterval[FDispIndex];
  197. FCycle = nInterval;
  198. try
  199. {
  200. ClearVmsForm();
  201. ImgForm->Picture->Assign(FVmsImage[FDispIndex]->Picture);
  202. //Caption = FObj->VMS_CTLR_ID + ": " + FObj->VMS_NM + " [" + String(FDispIndex+1) + "/" + String(FPhaseCnt) + "]";
  203. } catch(...) {}
  204. PnlOffer->Caption = " " + lblTm->Caption + ": " + ITSUtil_FormatStr(FOfferTime[FDispIndex], STR_DATETIME) + " [" + String(FDispIndex+1) + "/" + String(FPhaseCnt) + "]";
  205. if (FOffer[FDispIndex])
  206. PnlOffer->Font->Color = clBlack;
  207. else
  208. PnlOffer->Font->Color = clRed;
  209. #if 0
  210. if (FVMS_SCH_FORM_TYPE[FDispIndex] == eSchTp_video ||
  211. FVMS_SCH_FORM_TYPE[FDispIndex] == eSchTp_stream )
  212. {
  213. FFPlayer1->AspectRatio = -1;
  214. FFPlayer1->TryOpen(FVMS_DSPL_MSG_TXT[FDispIndex].Trim(), PnlForm->Handle);
  215. ImgForm->Visible = false;
  216. }
  217. #endif
  218. FDispIndex++;
  219. }
  220. }
  221. catch(...)
  222. {
  223. }
  224. FFormQuery = false;
  225. LblTicker->Caption = " " + String(FCycle) + " ";
  226. TmrTicker->Enabled = true;
  227. TmrVmsMsgDisp->Interval = nInterval * 1000;
  228. TmrVmsMsgDisp->Enabled = true;
  229. }
  230. //---------------------------------------------------------------------------
  231. void __fastcall TFrmVmsMsg::SelectVmsForm()
  232. {
  233. bool bImage = false;
  234. String sQry;
  235. FDispIndex= 0;
  236. FPhaseCnt = 0;
  237. if (!FObj)
  238. {
  239. return;
  240. }
  241. sQry = "SELECT A.*, \r\n"
  242. " TO_CHAR(SYSDATE - 8/1440, 'YYYYMMDDHH24MISS') AS SVC_DT \r\n"
  243. " FROM TB_VMS_DSPL_PRST A, \r\n"
  244. " (SELECT VMS_CTLR_NMBR, MAX(DSPL_DT) AS DSPL_DT \r\n"
  245. " FROM TB_VMS_DSPL_PRST \r\n"
  246. " GROUP BY VMS_CTLR_NMBR) B \r\n"
  247. " WHERE A.VMS_CTLR_NMBR = :p01 \r\n"
  248. " AND A.VMS_CTLR_NMBR = B.VMS_CTLR_NMBR \r\n"
  249. " AND A.DSPL_DT = B.DSPL_DT \r\n"
  250. " ORDER BY A.VMS_CTLR_NMBR, A.PHASE \r\n";
  251. try
  252. {
  253. pADO->Connection = ITSDb_GetConnection();
  254. ITSDb_SQLText(pADO, sQry);
  255. ITSDb_SQLBind(pADO, "p01", FObj->VMS_CTLR_NMBR);
  256. ITSDb_SQLOpen(pADO);
  257. for( ; !pADO->Eof; pADO->Next())
  258. {
  259. if (FPhaseCnt >= INT_VMS_MAX_FORM) break;
  260. String DSPL_DT = pADO->FieldByName("DSPL_DT")->AsString;
  261. String SVC_DT = pADO->FieldByName("SVC_DT")->AsString;
  262. String DNLD_YN = pADO->FieldByName("DNLD_YN")->AsString;
  263. if (DSPL_DT >= SVC_DT)
  264. {
  265. FOffer[FPhaseCnt] = true;
  266. }
  267. else
  268. {
  269. FOffer[FPhaseCnt] = false;
  270. }
  271. if (DNLD_YN == "N") FOffer[FPhaseCnt] = false;
  272. FOfferTime[FPhaseCnt] = DSPL_DT;
  273. FVMS_SCH_FORM_TYPE[FPhaseCnt] = pADO->FieldByName("VMS_SCH_FORM_TYPE")->AsInteger;
  274. FVMS_DSPL_MSG_TXT[FPhaseCnt] = "";
  275. if (FVMS_SCH_FORM_TYPE[FPhaseCnt] == eSchTp_video ||
  276. FVMS_SCH_FORM_TYPE[FPhaseCnt] == eSchTp_stream )
  277. {
  278. FVMS_DSPL_MSG_TXT[FPhaseCnt] = pADO->FieldByName("VMS_DSPL_MSG_TXT")->AsString.Trim();
  279. }
  280. FInterval[FPhaseCnt] = pADO->FieldByName("DSPL_HH")->AsInteger;
  281. if (FInterval[FPhaseCnt] <= 0) FInterval[FPhaseCnt] = 3;
  282. //if (FInterval[FPhaseCnt] >= 10) FInterval[FPhaseCnt] = 10;
  283. TStream *pStream = NULL;
  284. pStream = pADO->CreateBlobStream(pADO->FieldByName("VMS_DSPL_MSG_IMAG"), bmRead);
  285. TImage *pImage = FVmsImage[FPhaseCnt];
  286. try
  287. {
  288. try {
  289. pImage->Canvas->Lock();
  290. pStream->Position = 0;
  291. pImage->Picture->Bitmap->LoadFromStream(pStream);
  292. FPhaseCnt++;
  293. } catch(...) {}
  294. }__finally{
  295. pImage->Canvas->Unlock();
  296. if (pStream) delete pStream;
  297. }
  298. }
  299. ITSDb_SQLClose(pADO);
  300. }
  301. catch(EDatabaseError &E)
  302. {
  303. throw Exception(String(E.ClassName()) + E.Message);
  304. }
  305. catch(...)
  306. {
  307. throw Exception(FrmLang->lblDbErr->Caption);//"알수없는 오류가 발생하였습니다.");
  308. }
  309. }
  310. //---------------------------------------------------------------------------
  311. void __fastcall TFrmVmsMsg::FormDestroy(TObject *Sender)
  312. {
  313. TmrVmsMsgDisp->Enabled = false;
  314. try {
  315. for (int ii = 0; ii < INT_VMS_MAX_FORM; ii++)
  316. {
  317. if (FVmsImage[ii]) delete FVmsImage[ii];
  318. }
  319. if (FObj) FObj->FData2 = NULL;
  320. } catch(...) {}
  321. }
  322. //---------------------------------------------------------------------------
  323. void __fastcall TFrmVmsMsg::TmrTickerTimer(TObject *Sender)
  324. {
  325. TmrTicker->Enabled = false;
  326. FCycle--;
  327. LblTicker->Caption = " " + String(FCycle) + " ";
  328. if (FCycle > 0) TmrTicker->Enabled = true;
  329. }
  330. //---------------------------------------------------------------------------
  331. void __fastcall TFrmVmsMsg::FFPlayer1State(TObject *Sender, TPlayState APlayState)
  332. {
  333. switch(APlayState)
  334. {
  335. case Ffbasecomponent::psPlay:
  336. case Ffbasecomponent::psResume:
  337. break;
  338. case Ffbasecomponent::psPause:
  339. case Ffbasecomponent::psStep:
  340. break;
  341. case Ffbasecomponent::psStop:
  342. if (FFPlayer1->ScreenHandle != NULL)
  343. {
  344. PostMessage(FFPlayer1->ScreenHandle, CM_INVALIDATE, 0, 0);
  345. UpdateWindow(FFPlayer1->ScreenHandle);
  346. FFPlayer1->ScreenHandle = NULL;
  347. }
  348. break;
  349. case Ffbasecomponent::psEnd:
  350. {
  351. FFPlayer1->Stop(true);
  352. PostMessage(FFPlayer1->ScreenHandle, CM_INVALIDATE, 0, 0);
  353. UpdateWindow(FFPlayer1->ScreenHandle);
  354. FFPlayer1->ScreenHandle = NULL;
  355. }
  356. break;
  357. }
  358. }
  359. //---------------------------------------------------------------------------