VMSFORM0F.cpp 18 KB

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