VMSFORM0F.cpp 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #pragma hdrstop
  4. #include <vcl.h>
  5. #include "AppGlobalF.h"
  6. #include "ITSSkinF.h"
  7. #include "ITSUtilF.h"
  8. #include "FrmVmsOprMainF.h"
  9. #include "CenterCommF.h"
  10. #include "ITSLangTransF.h"
  11. #pragma hdrstop
  12. #include "VMSFORM0F.h"
  13. //---------------------------------------------------------------------------
  14. //---------------------------------------------------------------------------
  15. #pragma package(smart_init)
  16. #pragma link "cxContainer"
  17. #pragma link "cxControls"
  18. #pragma link "cxEdit"
  19. #pragma link "cxGraphics"
  20. #pragma link "cxGroupBox"
  21. #pragma link "cxLookAndFeelPainters"
  22. #pragma link "cxLookAndFeels"
  23. #pragma link "dxSkinBlack"
  24. #pragma link "dxSkinMcSkin"
  25. #pragma link "dxSkinsCore"
  26. #pragma link "dxSkinBlue"
  27. #pragma link "dxSkinCaramel"
  28. #pragma link "dxSkinCoffee"
  29. #pragma link "dxSkinDarkRoom"
  30. #pragma link "dxSkinDarkSide"
  31. #pragma link "dxSkinFoggy"
  32. #pragma link "dxSkinGlassOceans"
  33. #pragma link "dxSkiniMaginary"
  34. #pragma link "dxSkinLilian"
  35. #pragma link "dxSkinLiquidSky"
  36. #pragma link "dxSkinLondonLiquidSky"
  37. #pragma link "dxSkinMoneyTwins"
  38. #pragma link "dxSkinOffice2007Black"
  39. #pragma link "dxSkinOffice2007Blue"
  40. #pragma link "dxSkinOffice2007Green"
  41. #pragma link "dxSkinOffice2007Pink"
  42. #pragma link "dxSkinOffice2007Silver"
  43. #pragma link "dxSkinOffice2010Black"
  44. #pragma link "dxSkinOffice2010Blue"
  45. #pragma link "dxSkinOffice2010Silver"
  46. #pragma link "dxSkinSeven"
  47. #pragma link "dxSkinSharp"
  48. #pragma link "dxSkinSilver"
  49. #pragma link "dxSkinStardust"
  50. #pragma link "cxLabel"
  51. #pragma link "FFBaseComponent"
  52. #pragma link "FFBasePlay"
  53. #pragma link "FFPlay"
  54. #pragma link "FRAME_VmsStatusF"
  55. #pragma resource "*.dfm"
  56. #define WIDTH_GAP 3
  57. #define HEIGHT_GAP 3
  58. #define LICENSE_KEY "FSXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX"
  59. //TVMSFORM0 *VMSFORM0 = NULL;
  60. //---------------------------------------------------------------------------
  61. __fastcall TVMSFORM0::TVMSFORM0(TComponent* Owner, TVmsCtlr *AVmsObj)
  62. : TForm(Owner)
  63. {
  64. #if 0
  65. if (g_AppCfg.sLang != "kr")
  66. {
  67. lblText1->Caption = "Provide time:";
  68. lblText2->Caption = "Controller Ping";
  69. lblText3->Caption = "Web camera Ping";
  70. }
  71. #endif
  72. FVmsObj = AVmsObj;
  73. FScrollBox = NULL;
  74. FSelected = false;
  75. FDisplayMode = 0;
  76. FZoomRate = 1.0;
  77. FDispIndex = 0;
  78. FPlay = false;
  79. FWndParent = NULL;
  80. FZoomView = false;
  81. PnlForm->ParentColor = false;
  82. PnlForm->Color = clBtnFace;
  83. FDispW = FVmsObj->WIDTH;
  84. FDispH = FVmsObj->HEIGHT;
  85. //PnlName->Caption = "[" + FVmsObj->VMS_CTLR_ID + "] " + FVmsObj->VMS_NM;
  86. PnlName->Caption = FVmsObj->VMS_NM;
  87. PnlName->Hint = (FVmsObj->VMS_CTLR_NMBR) + " [" + FVmsObj->VMS_CTLR_ID + "] \r\n" + FVmsObj->VMS_NM;
  88. FGapW = 16;
  89. FGapH = 8;
  90. PnlForm->Align = alCustom;
  91. PnlForm->Anchors = TAnchors() >> akLeft >> akTop >> akRight >> akBottom;
  92. //PnlForm->Locked = true;
  93. #if 0
  94. ImgCommError->Parent = ImgCommNormal->Parent;
  95. ImgCommError->Left = ImgCommNormal->Left;
  96. ImgCommError->Top = ImgCommNormal->Top;
  97. ImgCommError->Visible = false;
  98. ImgCommNormal->Visible= true;
  99. #else
  100. ImgState1->Parent = ImgState0->Parent;
  101. ImgState2->Parent = ImgState0->Parent;
  102. ImgState1->Left = ImgState0->Left;
  103. ImgState1->Top = ImgState0->Top;
  104. ImgState2->Left = ImgState0->Left;
  105. ImgState2->Top = ImgState0->Top;
  106. ImgState1->Visible = false;
  107. ImgState2->Visible = false;
  108. #endif
  109. LoadLocalSkin();
  110. String sAVILibDir = g_sAppDir + "LibAV";
  111. FFPlayer1->SetLicenseKey(LICENSE_KEY);
  112. FFPlayer1->DisableFPUExceptions();
  113. if (!FFPlayer1->LoadAVLib(sAVILibDir))
  114. {
  115. #if 0
  116. if (g_AppCfg.sLang != "kr") Application->MessageBox(L"Stream display library load failed.", L"Stream display fail", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  117. else Application->MessageBox(L"영상표출 라이브러리를 로드하지 못하였습니다.", L"영상표출 오류", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  118. #endif
  119. }
  120. }
  121. //---------------------------------------------------------------------------
  122. void __fastcall TVMSFORM0::LoadLocalSkin()
  123. {
  124. PnlMain->ParentColor = false;
  125. PnlMain->Color = clBtnFace;
  126. PnlForm->ParentColor = false;
  127. PnlForm->Color = clBlack;
  128. FRAME_VmsStatus1->LoadLocalSkin();
  129. #if 0
  130. PnlDoor->ParentColor = false;
  131. PnlFan->ParentColor = false;
  132. PnlHeater->ParentColor = false;
  133. PnlModule->ParentColor = false;
  134. PnlPower->ParentColor = false;
  135. PnlTemp->ParentColor = false;
  136. PnlOprMode->ParentColor = false;
  137. #endif
  138. }
  139. //---------------------------------------------------------------------------
  140. void __fastcall TVMSFORM0::FormDestroy(TObject *Sender)
  141. {
  142. TmrDisp->Enabled = false;
  143. }
  144. //---------------------------------------------------------------------------
  145. void __fastcall TVMSFORM0::FormShow(TObject *Sender)
  146. {
  147. TmrShow->Enabled = true;
  148. RefreshVmsStatus();
  149. }
  150. //---------------------------------------------------------------------------
  151. void __fastcall TVMSFORM0::SetFormSize(int AFormW/* = 0 */, float AZoomRate/* = 1.0*/)
  152. {
  153. //384*64, 2단12열 기준으로
  154. //표출되는 화면은 넓이 370으로 설정, 1920 에서 최대 5개 VMS 표출되게...
  155. int DispW = 370;
  156. int MaxW = VmsCtlrManager->FMaxWidth >= 384 ? 384 : VmsCtlrManager->FMaxWidth;
  157. if (FVmsObj->WIDTH > MaxW)
  158. {
  159. FZoomRate = ((float)DispW / (float)FVmsObj->WIDTH);
  160. }
  161. else
  162. {
  163. FZoomRate = ((float)DispW / (float)MaxW);
  164. }
  165. FDispW = FVmsObj->WIDTH * FZoomRate;
  166. FDispH = FVmsObj->HEIGHT * FZoomRate;
  167. if (FDispW > FVmsObj->WIDTH)
  168. {
  169. // 배율이 1.0 이상 넘어가면 원본을 보여주자... 확대해서 보여줄 필요 없음.
  170. //FDispW = FVmsObj->WIDTH;
  171. //FDispH = FVmsObj->HEIGHT;
  172. }
  173. int nFormW = DispW + (3+3);
  174. int nFormH = FDispH + (3+3) + PnlTitle->Height + PnlBottom->Height;
  175. try
  176. {
  177. LockWindowUpdate(Handle);
  178. Width = nFormW;
  179. Height = nFormH;
  180. PnlForm->Width = FDispW + (2+2);
  181. PnlForm->Height = FDispH + (2+2);
  182. PnlForm->Left = (PnFormBack->Width - PnlForm->Width) / 2;
  183. PnlForm->Top = (PnFormBack->Height - PnlForm->Height) / 2;
  184. PnlForm->Visible = true;
  185. ImgForm->Width = FDispW;
  186. ImgForm->Height= FDispH;
  187. ImgForm->Picture->Bitmap->Width = ImgForm->Width;
  188. ImgForm->Picture->Bitmap->Height = ImgForm->Height;
  189. APP_ImageClear(ImgForm->Canvas, 0, 0, ImgForm->Width, ImgForm->Height, clBlack);
  190. }
  191. __finally
  192. {
  193. LockWindowUpdate(0);
  194. }
  195. }
  196. //---------------------------------------------------------------------------
  197. void __fastcall TVMSFORM0::SelectForm(bool ASelect)
  198. {
  199. FSelected = ASelect;
  200. if (ASelect)
  201. {
  202. PopupMenu = PopupMenu1;
  203. PnlMain->ParentColor = false;
  204. PnlMain->Color = clBtnHighlight;//clBackground;
  205. this->ParentColor = false;
  206. this->Color = clRed;
  207. }
  208. else
  209. {
  210. PopupMenu = NULL;
  211. PnlMain->ParentColor = false;
  212. PnlMain->Color = clBtnFace;
  213. this->ParentColor = true;
  214. }
  215. #if 0
  216. if (FVmsObj)
  217. {
  218. if (FVmsObj->STATE.Comm != vms_comm_normal)
  219. {
  220. if (ASelect)
  221. {
  222. PnlMain->ParentColor = false;
  223. PnlMain->Color = clMaroon;//clBackground;
  224. this->ParentColor = false;
  225. this->Color = clRed;
  226. }
  227. else
  228. {
  229. PnlMain->ParentColor = false;
  230. PnlMain->Color = clPurple;//clBackground;
  231. this->ParentColor = false;
  232. this->Color = clRed;
  233. }
  234. }
  235. }
  236. #else
  237. if (FVmsObj)
  238. {
  239. if (FVmsObj->STATE.Comm != vms_comm_normal)
  240. {
  241. PnlForm->Caption = "통신 Offline";
  242. if (ImgForm->Visible)
  243. {
  244. if (g_AppCfg.isDispOfflineMsg == false)
  245. {
  246. //통신오프라인시 메시지 표출을 하지 않을 경우
  247. ImgForm->Visible = false;
  248. }
  249. }
  250. }
  251. else
  252. {
  253. PnlForm->Caption = "표출정보가 없습니다.";
  254. if (ImgForm->Visible == false)
  255. {
  256. ImgForm->Visible = true;
  257. }
  258. }
  259. }
  260. #endif
  261. }
  262. //---------------------------------------------------------------------------
  263. void __fastcall TVMSFORM0::TmrShowTimer(TObject *Sender)
  264. {
  265. TmrShow->Enabled = false;
  266. PopupMenu = NULL;
  267. if (!FVmsObj)
  268. {
  269. PnlName->Caption = "VMS";
  270. ImgForm->Visible = false;
  271. }
  272. RefreshVmsStatus();
  273. TmrDisp->Enabled = true;
  274. }
  275. //---------------------------------------------------------------------------
  276. void __fastcall TVMSFORM0::SetPlay(bool APlay)
  277. {
  278. FPlay = APlay;
  279. }
  280. //---------------------------------------------------------------------------
  281. void __fastcall TVMSFORM0::TmrDispTimer(TObject *Sender)
  282. {
  283. int nDispTime = 1000;
  284. TCanvas *pCanvas = ImgForm->Canvas;
  285. try
  286. {
  287. TmrDisp->Enabled = false;
  288. TmrTicker->Enabled = false;
  289. LblTicker->Caption = " - ";
  290. if (FFPlayer1->ScreenHandle != NULL)
  291. {
  292. FFPlayer1->Stop(true);
  293. PostMessage(FFPlayer1->ScreenHandle, CM_INVALIDATE, 0, 0);
  294. UpdateWindow(FFPlayer1->ScreenHandle);
  295. FFPlayer1->ScreenHandle = NULL;
  296. ImgForm->Visible = true;
  297. }
  298. FVmsObj->Lock();
  299. pCanvas->Lock();
  300. try {
  301. if (FVmsObj->VmsMsg->Total == 0)
  302. {
  303. if (FVmsObj->VmsMsg->IsLoading)
  304. {
  305. return;
  306. }
  307. PnlSeq->Caption = "0/0";
  308. ImgForm->Visible = false;
  309. FDispIndex = -1;
  310. PnlSvcTime->Caption = "" + FrmLang->lblText1->Caption + " -";//제공시각: -";
  311. return;
  312. }
  313. if (FVmsObj->STATE.Comm == vms_comm_normal)
  314. {
  315. //통신이 온라인인데 메시지표출화면이 숨겨져 있으면 보이게 한다.
  316. if (ImgForm->Visible == false) ImgForm->Visible = true;
  317. }
  318. else
  319. {
  320. //통신이 오프라인일때
  321. if (g_AppCfg.isDispOfflineMsg)
  322. {
  323. //메시지 표출하는 경우
  324. if (ImgForm->Visible == false) ImgForm->Visible = true;
  325. }
  326. else
  327. {
  328. //메시지 표출하지 않는 경우
  329. if (ImgForm->Visible == true) ImgForm->Visible = false;
  330. }
  331. }
  332. if (FDispIndex >= FVmsObj->VmsMsg->Total || FDispIndex >= INT_VMS_MAX_FORM)
  333. {
  334. FDispIndex = 0;
  335. }
  336. PnlSvcTime->Caption = "" + FrmLang->lblText1->Caption + " " + ITSUtil_FormatStr(FVmsObj->VmsMsg->OFFER_DT, STR_DATETIME);
  337. #if 0
  338. //nDispTime = FVmsObj->VMS_PHSE_CHNG_CYCL;
  339. if (nDispTime < 3) nDispTime = 3;
  340. //if (nDispTime > 9) nDispTime = 10;
  341. nDispTime = nDispTime * 1000;
  342. #else
  343. nDispTime = FVmsObj->VmsMsg->PHASE[FDispIndex].DSPL_HH * 1000;
  344. if (nDispTime > 5000) nDispTime = 5000;
  345. #endif
  346. FCycle = FVmsObj->VmsMsg->PHASE[FDispIndex].DSPL_HH;
  347. if (FPlay == false)
  348. {
  349. return;
  350. }
  351. PnlSeq->Caption = String(FDispIndex+1) + "/" + String(FVmsObj->VmsMsg->Total);
  352. Graphics::TBitmap *pBitmap = FVmsObj->VmsMsg->PHASE[FDispIndex].pVmsBmp;
  353. if (pBitmap)
  354. {
  355. SetStretchBltMode(ImgForm->Canvas->Handle, MAXSTRETCHBLTMODE);//HALFTONE);//MAXSTRETCHBLTMODE)//STRETCH_HALFTONE;
  356. ImgForm->Canvas->CopyRect(Classes::Rect(0, 0, ImgForm->Width, ImgForm->Height),
  357. pBitmap->Canvas,
  358. Classes::Rect(0, 0, pBitmap->Width, pBitmap->Height));
  359. }
  360. #if 0
  361. if (FVmsObj->VmsMsg->PHASE[FDispIndex].VMS_SCH_FORM_TYPE == eSchTp_video ||
  362. FVmsObj->VmsMsg->PHASE[FDispIndex].VMS_SCH_FORM_TYPE == eSchTp_stream )
  363. {
  364. FFPlayer1->AspectRatio = -1;
  365. FFPlayer1->TryOpen(FVmsObj->VmsMsg->PHASE[FDispIndex].VMS_DSPL_MSG_TXT.Trim(), PnlForm->Handle);
  366. ImgForm->Visible = false;
  367. }
  368. #endif
  369. } catch(...) {}
  370. }
  371. __finally
  372. {
  373. FVmsObj->UnLock();
  374. ImgForm->Refresh();
  375. pCanvas->Unlock();
  376. FDispIndex++;
  377. PnlSvcTime->Font->Color = FVmsObj->VmsMsg->OFFER_YN ? clNavy : clRed;
  378. LblTicker->Caption = " " + String(FCycle) + " ";
  379. TmrTicker->Enabled = true;
  380. TmrDisp->Interval = nDispTime;
  381. TmrDisp->Enabled = true;
  382. }
  383. }
  384. //---------------------------------------------------------------------------
  385. void __fastcall TVMSFORM0::TmrTickerTimer(TObject *Sender)
  386. {
  387. TmrTicker->Enabled = false;
  388. FCycle--;
  389. LblTicker->Caption = " " + String(FCycle) + " ";
  390. if (FCycle > 0) TmrTicker->Enabled = true;
  391. }
  392. //---------------------------------------------------------------------------
  393. void __fastcall TVMSFORM0::FormClose(TObject *Sender, TCloseAction &Action)
  394. {
  395. TmrDisp->Enabled = false;
  396. TmrTicker->Enabled = false;
  397. if (FFPlayer1->ScreenHandle != NULL)
  398. {
  399. FFPlayer1->Stop(true);
  400. PostMessage(FFPlayer1->ScreenHandle, CM_INVALIDATE, 0, 0);
  401. UpdateWindow(FFPlayer1->ScreenHandle);
  402. FFPlayer1->ScreenHandle = NULL;
  403. }
  404. }
  405. //---------------------------------------------------------------------------
  406. void __fastcall TVMSFORM0::OnFormClick(TObject *Sender)
  407. {
  408. if (FScrollBox) FScrollBox->SetFocus();
  409. }
  410. //---------------------------------------------------------------------------
  411. void __fastcall TVMSFORM0::RefreshVmsMessage()
  412. {
  413. TmrDisp->Enabled = false;
  414. FDispIndex = 0;
  415. TmrDisp->Interval= 300;
  416. TmrDisp->Enabled = true;
  417. }
  418. //---------------------------------------------------------------------------
  419. void __fastcall TVMSFORM0::RefreshVmsStatus()
  420. {
  421. #if 0
  422. if (FVmsObj->STATE.Comm == vms_comm_normal)
  423. {
  424. if (!ImgCommNormal->Visible) ImgCommNormal->Visible = true;
  425. if ( ImgCommError->Visible) ImgCommError->Visible = false;
  426. }
  427. else
  428. {
  429. if (!ImgCommError->Visible) ImgCommError->Visible = true;
  430. if (ImgCommNormal->Visible) ImgCommNormal->Visible = false;
  431. }
  432. #else
  433. switch(FVmsObj->RunState)
  434. {
  435. case state_normal:
  436. if (!ImgState0->Visible) ImgState0->Visible = true;
  437. if ( ImgState1->Visible) ImgState1->Visible = false;
  438. if ( ImgState2->Visible) ImgState2->Visible = false;
  439. break;
  440. case state_module:
  441. if ( ImgState0->Visible) ImgState0->Visible = false; //false
  442. if ( ImgState1->Visible) ImgState1->Visible = false;
  443. if (!ImgState2->Visible) ImgState2->Visible = true; //true
  444. break;
  445. default:
  446. if ( ImgState0->Visible) ImgState0->Visible = false;
  447. if (!ImgState1->Visible) ImgState1->Visible = true;
  448. if ( ImgState2->Visible) ImgState2->Visible = false;
  449. break;
  450. }
  451. #endif
  452. FRAME_VmsStatus1->RefreshStatus(FVmsObj);
  453. SelectForm(FSelected);
  454. }
  455. //---------------------------------------------------------------------------
  456. void __fastcall TVMSFORM0::PopupMenu1Popup(TObject *Sender)
  457. {
  458. MnuVmsInfId->Caption = "[" + FVmsObj->VMS_CTLR_ID + "]";
  459. MnuCtlrPing->Caption = FrmLang->lblText2->Caption + " - " + FVmsObj->VMS_CTLR_IP;//"제어기 Ping - " + FVmsObj->VMS_CTLR_IP;
  460. if (FVmsObj->WEB_CMRA_IP == "")
  461. {
  462. MnuWebcamPing->Caption = FrmLang->lblText3->Caption;//"웹카메라 Ping";
  463. MnuWebcamPing->Enabled = false;
  464. }
  465. else
  466. {
  467. MnuWebcamPing->Caption = FrmLang->lblText3->Caption + " - " + FVmsObj->WEB_CMRA_IP;//"웹카메라 Ping - " + FVmsObj->WEB_CMRA_IP;
  468. MnuWebcamPing->Enabled = true;
  469. }
  470. }
  471. //---------------------------------------------------------------------------
  472. void __fastcall TVMSFORM0::MnuNetworkPingClick(TObject *Sender)
  473. {
  474. String sIp = FVmsObj->VMS_CTLR_IP;
  475. TMenuItem *pMenu = (TMenuItem*)Sender;
  476. if (pMenu->Tag == 1)
  477. {
  478. sIp = FVmsObj->WEB_CMRA_IP;
  479. }
  480. ITSUtil_NetworkPing(sIp);
  481. }
  482. //---------------------------------------------------------------------------
  483. void __fastcall TVMSFORM0::MnuClick(TObject *Sender)
  484. {
  485. if (!FVmsObj) return;
  486. #if 0
  487. TMenuItem *pMenu = (TMenuItem*)Sender;
  488. ST_WMMESSAGE *pWmMsg = new ST_WMMESSAGE;
  489. pWmMsg->hWnd = (HWND)Handle;
  490. pWmMsg->pForm = (void*)this;
  491. pWmMsg->nMsg = D_FORMCALL;
  492. pWmMsg->sSender = "VMS0000M"; // 동적생성된 폼은 폼의 이름 +_1, +_2, ... 식으로 이름이 바뀐다.
  493. pWmMsg->sReceiver = String(pMenu->Tag);
  494. pWmMsg->sMsg = FVmsObj->Id;
  495. PostMessage(Application->MainForm->Handle, WM_PLUGINFORM, (WPARAM)pWmMsg, 0);
  496. #endif
  497. }
  498. //---------------------------------------------------------------------------
  499. void __fastcall TVMSFORM0::PnlNameClick(TObject *Sender)
  500. {
  501. if (FScrollBox) FScrollBox->SetFocus();
  502. if (FWndParent)
  503. {
  504. POST_MSG(FWndParent, WM_VMS_SELECT, (WPARAM)FVmsObj, (LPARAM)this);
  505. }
  506. }
  507. //---------------------------------------------------------------------------
  508. void __fastcall TVMSFORM0::PnlNameDblClick(TObject *Sender)
  509. {
  510. if (FScrollBox) FScrollBox->SetFocus();
  511. if (FWndParent)
  512. {
  513. POST_MSG(FWndParent, WM_VMS_SELECT_DBLCLICK, (WPARAM)FVmsObj, (LPARAM)this);
  514. }
  515. }
  516. //---------------------------------------------------------------------------
  517. void __fastcall TVMSFORM0::FFPlayer1State(TObject *Sender, TPlayState APlayState)
  518. {
  519. switch(APlayState)
  520. {
  521. case Ffbasecomponent::psPlay:
  522. case Ffbasecomponent::psResume:
  523. break;
  524. case Ffbasecomponent::psPause:
  525. case Ffbasecomponent::psStep:
  526. break;
  527. case Ffbasecomponent::psStop:
  528. if (FFPlayer1->ScreenHandle != NULL)
  529. {
  530. PostMessage(FFPlayer1->ScreenHandle, CM_INVALIDATE, 0, 0);
  531. UpdateWindow(FFPlayer1->ScreenHandle);
  532. FFPlayer1->ScreenHandle = NULL;
  533. }
  534. break;
  535. case Ffbasecomponent::psEnd:
  536. {
  537. FFPlayer1->Stop(true);
  538. PostMessage(FFPlayer1->ScreenHandle, CM_INVALIDATE, 0, 0);
  539. UpdateWindow(FFPlayer1->ScreenHandle);
  540. FFPlayer1->ScreenHandle = NULL;
  541. }
  542. break;
  543. }
  544. }
  545. //---------------------------------------------------------------------------