VMSWCAM0F.cpp 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456
  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 "VMSWCAM0F.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 resource "*.dfm"
  55. #define WIDTH_GAP 3
  56. #define HEIGHT_GAP 3
  57. #define LICENSE_KEY "FSXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX"
  58. //TVMSWCAM0 *VMSWCAM0 = NULL;
  59. //---------------------------------------------------------------------------
  60. __fastcall TVMSWCAM0::TVMSWCAM0(TComponent* Owner, TVmsCtlr *AVmsObj)
  61. : TForm(Owner)
  62. {
  63. FVmsObj = AVmsObj;
  64. FScrollBox = NULL;
  65. FSelected = false;
  66. FDisplayMode = 0;
  67. FZoomRate = 1.0;
  68. FDispIndex = 0;
  69. FPlay = false;
  70. FWndParent = NULL;
  71. FZoomView = false;
  72. this->ParentColor = false;
  73. PnlCamera->ParentColor = false;
  74. PnlCamera->Color = clBlack;
  75. if (FVmsObj)
  76. {
  77. Caption = FVmsObj->VMS_NM;
  78. PnlName->Caption = Caption;
  79. PnlName->Hint = String(FVmsObj->VMS_CTLR_NMBR) + " [" + FVmsObj->VMS_CTLR_ID + "] \r\n" + FVmsObj->VMS_NM;
  80. PopupMenu = PopupMenu1;
  81. }
  82. else
  83. {
  84. Caption = "Empty";
  85. PnlName->Caption = Caption;
  86. PnlName->Hint = Caption;
  87. }
  88. PnlCamera->Align = alClient;
  89. LoadLocalSkin();
  90. Application->ProcessMessages();
  91. FPlay = false;
  92. FAutoPlay = true;
  93. FConHandle = 0;
  94. FInstalled = false;
  95. String sAVILibDir = g_sAppDir + "LibAV";
  96. FFPlayer1->SetLicenseKey(LICENSE_KEY);
  97. FFPlayer1->DisableFPUExceptions();
  98. if (!FFPlayer1->LoadAVLib(sAVILibDir))
  99. {
  100. #if 0
  101. if (g_AppCfg.sLang != "kr") Application->MessageBox(L"Stream display library load failed.", L"Stream display fail", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  102. else Application->MessageBox(L"영상표출 라이브러리를 로드하지 못하였습니다.", L"영상표출 오류", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  103. #endif
  104. }
  105. }
  106. //---------------------------------------------------------------------------
  107. void __fastcall TVMSWCAM0::LoadLocalSkin()
  108. {
  109. this->ParentColor = false;
  110. PnlMain->ParentColor = false;
  111. PnlMain->Color = clBtnFace;
  112. PnlCamera->ParentColor = false;
  113. PnlCamera->Color = clBlack;
  114. }
  115. //---------------------------------------------------------------------------
  116. void __fastcall TVMSWCAM0::FormDestroy(TObject *Sender)
  117. {
  118. TmrPlay->Enabled = false;
  119. TmrStop->Enabled = false;
  120. }
  121. //---------------------------------------------------------------------------
  122. void __fastcall TVMSWCAM0::InitCamera(void *ACctv, bool AAutoPlay/*=true*/)
  123. {
  124. FVmsObj = (TVmsCtlr*)ACctv;
  125. FAutoPlay = AAutoPlay;
  126. if (FVmsObj)
  127. {
  128. Caption = " " + FVmsObj->VMS_NM + " ";
  129. PnlName->Caption = Caption;
  130. PnlName->Hint = String(FVmsObj->VMS_CTLR_NMBR) + " [" + FVmsObj->VMS_CTLR_ID + "] \r\n" + FVmsObj->VMS_NM;
  131. PopupMenu = PopupMenu1;
  132. FInstalled = true;
  133. PopupMenu = PopupMenu1;
  134. }
  135. else
  136. {
  137. Caption = " Empty ";
  138. PnlName->Caption = Caption;
  139. PnlName->Hint = Caption;
  140. FInstalled = false;
  141. PopupMenu = NULL;
  142. PnlCamera->Caption = "Disconnected";
  143. }
  144. DisplayName(Caption);
  145. }
  146. //---------------------------------------------------------------------------
  147. void __fastcall TVMSWCAM0::DisplayName(String AName)
  148. {
  149. LblName->Visible = false;
  150. LblName->Caption = AName;
  151. LblName->Transparent = false;
  152. LblName->Transparent = true;
  153. LblName->Visible = true;
  154. LblName->Refresh();
  155. LblName->BringToFront();
  156. //::SetWindowLong(LblName->Handle, GWL_EXSTYLE, WS_EX_LAYERED | WS_EX_TRANSPARENT);
  157. //::SetLayeredWindowAttributes(LblName->Handle, 0, 80, LWA_ALPHA);
  158. // long __fastcall DrawText(BSTR text, long x, long y, BSTR fontname, long fontsize,
  159. // long underline, long fontcolor, long bordercolor, long bkcolor);
  160. }
  161. //---------------------------------------------------------------------------
  162. void __fastcall TVMSWCAM0::FormShow(TObject *Sender)
  163. {
  164. RefreshVmsStatus();
  165. DisplayName(Caption);
  166. }
  167. //---------------------------------------------------------------------------
  168. void __fastcall TVMSWCAM0::SetFormSize(int AFormW)
  169. {
  170. }
  171. //---------------------------------------------------------------------------
  172. void __fastcall TVMSWCAM0::SelectForm(bool ASelect)
  173. {
  174. FSelected = ASelect;
  175. if (ASelect)
  176. {
  177. PopupMenu = PopupMenu1;
  178. PnlMain->ParentColor = false;
  179. PnlMain->Color = clBtnHighlight;//clBackground;
  180. }
  181. else
  182. {
  183. PopupMenu = NULL;
  184. PnlMain->ParentColor = false;
  185. PnlMain->Color = clBtnFace;
  186. }
  187. }
  188. //---------------------------------------------------------------------------
  189. void __fastcall TVMSWCAM0::SetPlay(bool APlay)
  190. {
  191. TmrStop->Enabled = false;
  192. TmrPlay->Enabled = false;
  193. FPlay = APlay;
  194. if (FPlay)
  195. {
  196. TmrPlay->Enabled = true;
  197. }
  198. else
  199. {
  200. TmrStop->Enabled = true;
  201. }
  202. }
  203. //---------------------------------------------------------------------------
  204. void __fastcall TVMSWCAM0::FormClose(TObject *Sender, TCloseAction &Action)
  205. {
  206. TmrStop->Enabled = false;
  207. TmrPlay->Enabled = false;
  208. CamStop();
  209. }
  210. //---------------------------------------------------------------------------
  211. void __fastcall TVMSWCAM0::LblNameDblClick(TObject *Sender)
  212. {
  213. if (FWndParent)
  214. {
  215. if (FVmsObj)
  216. {
  217. POST_MSG(FWndParent, WM_VMS_SELECT, (WPARAM)FVmsObj, (LPARAM)this);
  218. }
  219. }
  220. }
  221. //---------------------------------------------------------------------------
  222. void __fastcall TVMSWCAM0::PnlNameClick(TObject *Sender)
  223. {
  224. if (FScrollBox) FScrollBox->SetFocus();
  225. if (FWndParent)
  226. {
  227. if (FVmsObj)
  228. {
  229. POST_MSG(FWndParent, WM_VMS_SELECT, (WPARAM)FVmsObj, (LPARAM)this);
  230. }
  231. }
  232. }
  233. //---------------------------------------------------------------------------
  234. void __fastcall TVMSWCAM0::OnFormClick(TObject *Sender)
  235. {
  236. if (FScrollBox) FScrollBox->SetFocus();
  237. }
  238. //---------------------------------------------------------------------------
  239. void __fastcall TVMSWCAM0::RefreshVmsMessage()
  240. {
  241. }
  242. //---------------------------------------------------------------------------
  243. void __fastcall TVMSWCAM0::RefreshVmsStatus()
  244. {
  245. }
  246. //---------------------------------------------------------------------------
  247. void __fastcall TVMSWCAM0::PopupMenu1Popup(TObject *Sender)
  248. {
  249. if (FVmsObj)
  250. {
  251. MnuVmsInfId->Caption = "[" + FVmsObj->VMS_CTLR_ID + "]";
  252. MnuCtlrPing->Caption = FrmLang->lblText2->Caption + " - " + FVmsObj->VMS_CTLR_IP;//"제어기 Ping - " + FVmsObj->VMS_CTLR_IP;
  253. if (FVmsObj->WEB_CMRA_IP == "")
  254. {
  255. MnuWebcamPing->Caption = FrmLang->lblText3->Caption;//"웹카메라 Ping";
  256. MnuWebcamPing->Enabled = false;
  257. }
  258. else
  259. {
  260. MnuWebcamPing->Caption = FrmLang->lblText3->Caption + " - " + FVmsObj->WEB_CMRA_IP;//"웹카메라 Ping - " + FVmsObj->WEB_CMRA_IP;
  261. MnuWebcamPing->Enabled = true;
  262. }
  263. }
  264. }
  265. //---------------------------------------------------------------------------
  266. void __fastcall TVMSWCAM0::MnuNetworkPingClick(TObject *Sender)
  267. {
  268. if (FVmsObj)
  269. {
  270. String sIp = FVmsObj->VMS_CTLR_IP;
  271. TMenuItem *pMenu = (TMenuItem*)Sender;
  272. if (pMenu->Tag == 1)
  273. {
  274. sIp = FVmsObj->WEB_CMRA_IP;
  275. }
  276. ITSUtil_NetworkPing(sIp);
  277. }
  278. }
  279. //---------------------------------------------------------------------------
  280. void __fastcall TVMSWCAM0::CamPlay()
  281. {
  282. DisplayName(Caption);
  283. if (!FVmsObj) return;
  284. CamStop();
  285. if (!FVmsObj) return;
  286. if (FVmsObj->STRM_SESN_NM.IsEmpty())
  287. {
  288. //PnlCamera->Caption = "스트리밍주소 오류...";
  289. PnlCamera->Caption = "Streamming address error...";
  290. }
  291. else
  292. {
  293. //PnlCamera->Caption = "연결중...";
  294. PnlCamera->Caption = "Connecting...";
  295. try
  296. {
  297. FFPlayer1->AspectRatio = -1;
  298. FFPlayer1->TryOpen(FVmsObj->STRM_SESN_NM.Trim(), PnlCamera->Handle);
  299. }
  300. catch(...)
  301. {
  302. }
  303. }
  304. DisplayName(Caption);
  305. FPlay = true;
  306. }
  307. //---------------------------------------------------------------------------
  308. void __fastcall TVMSWCAM0::CamStop()
  309. {
  310. if (!FVmsObj) return;
  311. if (!FPlay) return;
  312. try
  313. {
  314. if (FFPlayer1->ScreenHandle != NULL)
  315. {
  316. FFPlayer1->Stop(true);
  317. PostMessage(FFPlayer1->ScreenHandle, CM_INVALIDATE, 0, 0);
  318. UpdateWindow(FFPlayer1->ScreenHandle);
  319. FFPlayer1->ScreenHandle = NULL;
  320. }
  321. FConHandle = 0;
  322. }
  323. catch(...)
  324. {
  325. }
  326. if (FVmsObj->STRM_SESN_NM.IsEmpty())
  327. {
  328. //PnlCamera->Caption = "스트리밍주소 오류...";
  329. PnlCamera->Caption = "Streamming address error...";
  330. }
  331. else
  332. {
  333. PnlCamera->Caption = "Disconnected";
  334. }
  335. FConHandle = 0;
  336. DisplayName(Caption);
  337. FPlay = false;
  338. }
  339. //---------------------------------------------------------------------------
  340. void __fastcall TVMSWCAM0::MnuPlayClick(TObject *Sender)
  341. {
  342. FAutoPlay = true;
  343. //CamPlay();
  344. TmrStop->Enabled = false;
  345. TmrPlay->Enabled = true;
  346. }
  347. //---------------------------------------------------------------------------
  348. void __fastcall TVMSWCAM0::MnuStopClick(TObject *Sender)
  349. {
  350. FAutoPlay = false;
  351. //CamStop();
  352. TmrStop->Enabled = true;
  353. TmrPlay->Enabled = false;
  354. }
  355. //---------------------------------------------------------------------------
  356. void __fastcall TVMSWCAM0::TmrPlayTimer(TObject *Sender)
  357. {
  358. TmrStop->Enabled = false;
  359. TmrPlay->Enabled = false;
  360. CamPlay();
  361. }
  362. //---------------------------------------------------------------------------
  363. void __fastcall TVMSWCAM0::TmrStopTimer(TObject *Sender)
  364. {
  365. TmrStop->Enabled = false;
  366. TmrPlay->Enabled = false;
  367. CamStop();
  368. }
  369. //---------------------------------------------------------------------------
  370. void __fastcall TVMSWCAM0::FFPlayer1State(TObject *Sender, TPlayState APlayState)
  371. {
  372. switch(APlayState)
  373. {
  374. case Ffbasecomponent::psPlay:
  375. case Ffbasecomponent::psResume:
  376. break;
  377. case Ffbasecomponent::psPause:
  378. case Ffbasecomponent::psStep:
  379. break;
  380. case Ffbasecomponent::psStop:
  381. if (FFPlayer1->ScreenHandle != NULL)
  382. {
  383. PostMessage(FFPlayer1->ScreenHandle, CM_INVALIDATE, 0, 0);
  384. UpdateWindow(FFPlayer1->ScreenHandle);
  385. FFPlayer1->ScreenHandle = NULL;
  386. }
  387. break;
  388. case Ffbasecomponent::psEnd:
  389. {
  390. FFPlayer1->Stop(true);
  391. PostMessage(FFPlayer1->ScreenHandle, CM_INVALIDATE, 0, 0);
  392. UpdateWindow(FFPlayer1->ScreenHandle);
  393. FFPlayer1->ScreenHandle = NULL;
  394. }
  395. break;
  396. }
  397. }
  398. //---------------------------------------------------------------------------