VMSM630MF.cpp 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #include "ITSSkinF.h"
  4. #include "ITSUtilF.h"
  5. #include "AppGlobalF.h"
  6. #include "CDSVmsIfscF.h"
  7. #include "CDSFontF.h"
  8. #pragma hdrstop
  9. #include "VMSM630MF.h"
  10. //---------------------------------------------------------------------------
  11. #pragma package(smart_init)
  12. #pragma link "VmsDesignerF"
  13. #pragma link "FFBaseComponent"
  14. #pragma link "FFBasePlay"
  15. #pragma link "FFPlay"
  16. #pragma link "cxButtons"
  17. #pragma link "cxCheckBox"
  18. #pragma link "cxClasses"
  19. #pragma link "cxContainer"
  20. #pragma link "cxControls"
  21. #pragma link "cxCustomData"
  22. #pragma link "cxData"
  23. #pragma link "cxDataStorage"
  24. #pragma link "cxEdit"
  25. #pragma link "cxFilter"
  26. #pragma link "cxGraphics"
  27. #pragma link "cxGrid"
  28. #pragma link "cxGridCustomTableView"
  29. #pragma link "cxGridCustomView"
  30. #pragma link "cxGridLevel"
  31. #pragma link "cxGridTableView"
  32. #pragma link "cxGroupBox"
  33. #pragma link "cxImage"
  34. #pragma link "cxLabel"
  35. #pragma link "cxLookAndFeelPainters"
  36. #pragma link "cxLookAndFeels"
  37. #pragma link "cxMaskEdit"
  38. #pragma link "cxStyles"
  39. #pragma link "cxTextEdit"
  40. #pragma link "dxSkinBlack"
  41. #pragma link "dxSkinBlue"
  42. #pragma link "dxSkinCaramel"
  43. #pragma link "dxSkinCoffee"
  44. #pragma link "dxSkinDarkRoom"
  45. #pragma link "dxSkinDarkSide"
  46. #pragma link "dxSkinFoggy"
  47. #pragma link "dxSkinGlassOceans"
  48. #pragma link "dxSkiniMaginary"
  49. #pragma link "dxSkinLilian"
  50. #pragma link "dxSkinLiquidSky"
  51. #pragma link "dxSkinLondonLiquidSky"
  52. #pragma link "dxSkinMcSkin"
  53. #pragma link "dxSkinMoneyTwins"
  54. #pragma link "dxSkinOffice2007Black"
  55. #pragma link "dxSkinOffice2007Blue"
  56. #pragma link "dxSkinOffice2007Green"
  57. #pragma link "dxSkinOffice2007Pink"
  58. #pragma link "dxSkinOffice2007Silver"
  59. #pragma link "dxSkinOffice2010Black"
  60. #pragma link "dxSkinOffice2010Blue"
  61. #pragma link "dxSkinOffice2010Silver"
  62. #pragma link "dxSkinsCore"
  63. #pragma link "dxSkinscxPCPainter"
  64. #pragma link "dxSkinSeven"
  65. #pragma link "dxSkinSharp"
  66. #pragma link "dxSkinSilver"
  67. #pragma link "dxSkinStardust"
  68. #pragma link "cxBlobEdit"
  69. #pragma resource "*.dfm"
  70. #define LICENSE_KEY "FSXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX"
  71. TVMSM630M *VMSM630M = NULL;
  72. //---------------------------------------------------------------------------
  73. __fastcall TVMSM630M::TVMSM630M(TComponent* Owner)
  74. : TForm(Owner)
  75. {
  76. ITSSkin_Load(this);
  77. ////CMM_LoadForm(g_sFormsDir, this);
  78. FSelected = false;
  79. FUpdate= false;
  80. FTitle = Caption;//"VMS 교통상황 폼 관리";
  81. FPlayerFile = "";
  82. FTrackBar = TrackBar1;
  83. FLblDuration = lblDuration1;
  84. FLblCurrPTS = lblCurrentPTS1;
  85. FFPlayer = FFPlayer1;
  86. FDispArea = PnlEdtBack;
  87. FDispArea->Tag = 0;
  88. FDispArea->ParentColor = false;
  89. FDispArea->Color = clBlack;
  90. FDispArea->Caption = "";
  91. FDispArea->Refresh();
  92. String sAVILibDir = g_sAppDir + "LibAV";
  93. FFPlayer1->SetLicenseKey(LICENSE_KEY);
  94. FFPlayer1->DisableFPUExceptions();
  95. if (!FFPlayer1->LoadAVLib(sAVILibDir))
  96. {
  97. if (g_AppCfg.sLang != "kr") Application->MessageBox(L"Stream display library load failed.", L"Stream display fail", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  98. else Application->MessageBox(L"영상표출 라이브러리를 로드하지 못하였습니다.", L"영상표출 오류", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  99. }
  100. TvList->OptionsView->DataRowHeight = 0;
  101. TvList->OptionsView->CellAutoHeight = true;
  102. TvList->OptionsView->Indicator = false;
  103. TvList->OptionsCustomize->ColumnMoving = false;
  104. TvList->OptionsCustomize->ColumnSorting = false;
  105. FListSymb = new TList;
  106. #if 0
  107. //Col03->DataBinding->ValueTypeClass = __classid(TcxBLOBValueType);
  108. Col03->PropertiesClass = __classid(TcxImageProperties);
  109. ((TcxImageProperties*)Col03->Properties)->GraphicClassName = "TdxSmartImage";
  110. #endif
  111. }
  112. //---------------------------------------------------------------------------
  113. void __fastcall TVMSM630M::CommClose()
  114. {
  115. try
  116. {
  117. BtnStopClick(NULL);
  118. if (m_pEdtDesigner)
  119. {
  120. delete m_pEdtDesigner;
  121. m_pEdtDesigner = NULL;
  122. }
  123. ClearSymbloList();
  124. ////CMM_SaveForm(g_sFormsDir, this);
  125. }
  126. catch(...)
  127. {
  128. }
  129. }
  130. //---------------------------------------------------------------------------
  131. void __fastcall TVMSM630M::FormCreate(TObject *Sender)
  132. {
  133. m_pEdtDesigner = new TVmsFormDesigner(PnlEditForm);
  134. //FOR_STL(TCDSFontColor*, pObj, CDSFontManager->FColors)
  135. {
  136. //m_pEdtDesigner->InitFontColor(pObj->VMS_FONT_COLR_CD, (TColor)pObj->VMS_FONT_COLR_VAL);
  137. }
  138. }
  139. //---------------------------------------------------------------------------
  140. void __fastcall TVMSM630M::FormShow(TObject *Sender)
  141. {
  142. Refresh();
  143. FormInit();
  144. PnlEdtBack->Width = FVmsWidth+4;
  145. PnlEdtBack->Height= FVmsHeight+4;
  146. LoadStreamInfo();
  147. TmrShow->Enabled = true;
  148. }
  149. //---------------------------------------------------------------------------
  150. void __fastcall TVMSM630M::FormInit()
  151. {
  152. //TvObjList->OptionsView->NoDataToDisplayInfoText = "<등록되어 있는 객체 정보가 없습니다>";
  153. m_pEdtDesigner->ApplicationHandle = (long)Handle;
  154. FNewDb = false;
  155. }
  156. //---------------------------------------------------------------------------
  157. void __fastcall TVMSM630M::ClearSymbloList()
  158. {
  159. for(int ii = 0; ii < FListSymb->Count; ii++)
  160. {
  161. Graphics::TBitmap *bitmap = (Graphics::TBitmap *)FListSymb->Items[ii];
  162. delete bitmap;
  163. }
  164. FListSymb->Clear();
  165. }
  166. //---------------------------------------------------------------------------
  167. void __fastcall TVMSM630M::LoadStreamInfo()
  168. {
  169. CMM_ClearGridTableView(TvList);
  170. String sQry;
  171. TADOQuery *pADO = NULL;
  172. sQry = "SELECT * \r\n"
  173. " FROM VW_STREAM_URL \r\n";
  174. //ForceDirectories(g_sVideoDir.c_str());
  175. String sFileName = "";
  176. try
  177. {
  178. int nRow;
  179. TcxDataController *pGDC = TvList->DataController;
  180. TvList->BeginUpdate();
  181. try
  182. {
  183. pADO = new TADOQuery(NULL);
  184. pADO->Close();
  185. pADO->Connection = ITSDb_GetConnection();
  186. ITSDb_SQLText(pADO, sQry);
  187. ITSDb_SQLOpen(pADO);
  188. for( ; !pADO->Eof; pADO->Next())
  189. {
  190. nRow = pGDC->AppendRecord();
  191. String sUrl = pADO->FieldByName("URL")->AsString;
  192. pGDC->Values[nRow][Col00->Index] = pADO->FieldByName("URL_NMBR")->AsString;
  193. pGDC->Values[nRow][Col01->Index] = pADO->FieldByName("URL_ID")->AsString;
  194. pGDC->Values[nRow][Col02->Index] = pADO->FieldByName("URL_NAME")->AsString;
  195. pGDC->Values[nRow][Col03->Index] = sUrl;
  196. pGDC->Values[nRow][Col04->Index] = pADO->FieldByName("URL_TYPE")->AsVariant;
  197. if (sUrl == FStreamAddr)
  198. {
  199. FPlayerFile = sUrl;
  200. }
  201. }
  202. }
  203. catch(EDatabaseError &E)
  204. {
  205. DBERRORMSG("TVMSM630M::LoadStreamInfo", String(E.ClassName()), E.Message, sQry);
  206. throw Exception(String(E.ClassName()) + E.Message);
  207. }
  208. catch(Exception &e)
  209. {
  210. DBERRORMSG("TVMSM630M::LoadStreamInfo", String(e.ClassName()), e.Message, sQry);
  211. throw Exception(String(e.ClassName()) + e.Message);
  212. }
  213. }
  214. __finally
  215. {
  216. if (pADO)
  217. {
  218. pADO->Close();
  219. delete pADO;
  220. }
  221. TvList->EndUpdate();
  222. }
  223. BtnPlay->Enabled = false;
  224. BtnStop->Enabled = false;
  225. BtnPause->Enabled = false;
  226. if (FPlayerFile != "")
  227. {
  228. BtnPlay->Enabled = true;
  229. }
  230. EdSymbLibNmbr->Text = FSymbLibNmbr;
  231. EdStreamAddr->Text = FStreamAddr;
  232. }
  233. //---------------------------------------------------------------------------
  234. void __fastcall TVMSM630M::TmrShowTimer(TObject *Sender)
  235. {
  236. TmrShow->Enabled = false;
  237. BtnSearchClick(NULL);
  238. }
  239. //---------------------------------------------------------------------------
  240. void __fastcall TVMSM630M::BtnSearchClick(TObject *Sender)
  241. {
  242. RefreshData();
  243. EdFocus->SetFocus();
  244. }
  245. //---------------------------------------------------------------------------
  246. void __fastcall TVMSM630M::RefreshData()
  247. {
  248. // 검색조건에 의한 링크 데이터 조회
  249. FormClear();
  250. m_pEdtDesigner->Clear();
  251. m_pEdtDesigner->SizeType = FVmsTypeCd;
  252. m_pEdtDesigner->SetSize(FVmsWidth, FVmsHeight);
  253. m_pEdtDesigner->SetPos(0, 0);
  254. m_pEdtDesigner->BkColorCode = FFormColor;
  255. m_pEdtDesigner->EditMode = true;
  256. m_pEdtDesigner->Show();
  257. InitObjectList();
  258. LoadFormObjectInfo(FFormId, m_pEdtDesigner);
  259. DispObjectListData();
  260. }
  261. //---------------------------------------------------------------------------
  262. void __fastcall TVMSM630M::InitObjectList()
  263. {
  264. }
  265. //---------------------------------------------------------------------------
  266. void __fastcall TVMSM630M::DispObjectListData()
  267. {
  268. TVmsFormObject *pObj;
  269. int nObjCnt = m_pEdtDesigner->GetObjectCount();
  270. for(int ii = 0; ii < nObjCnt; ii++)
  271. {
  272. pObj = m_pEdtDesigner->GetObject(ii);
  273. if (pObj)
  274. {
  275. switch(pObj->ObjType.ToIntDef(0))
  276. {
  277. case 200: //동영상 기본이미지
  278. EdSymbLibNmbr->Text = pObj->ImageId;
  279. break;
  280. case 201: //@동영상이름
  281. EdStreamAddr->Text = pObj->Text;
  282. break;
  283. }
  284. }
  285. }
  286. }
  287. //---------------------------------------------------------------------------
  288. void __fastcall TVMSM630M::BtnClosexClick(TObject *Sender)
  289. {
  290. FSelected = false;
  291. Close();
  292. }
  293. //---------------------------------------------------------------------------
  294. void __fastcall TVMSM630M::FormClose(TObject *Sender, TCloseAction &Action)
  295. {
  296. CommClose();
  297. VMSM630M = NULL;
  298. //Action = caFree;
  299. }
  300. //---------------------------------------------------------------------------
  301. void __fastcall TVMSM630M::LoadFormObjectInfo(String AFormId, TVmsFormDesigner *ADesigner)
  302. {
  303. ADesigner->Clear();
  304. String sQry;
  305. TADOQuery *pADO = NULL;
  306. sQry = "SELECT A.*, \r\n"
  307. " C.VMS_FONT_NAME_NM, \r\n"
  308. " B.IMAG_DATA AS SYMB_IMG, \r\n"
  309. " B.SYMB_EXPL AS SYMB_IMG_NM, \r\n"
  310. " B.SYMB_FILE_NM AS SYMB_FILE_NM \r\n"
  311. " FROM TB_VMS_FORM_OBJECT A, \r\n"
  312. " TB_VMS_SYMB_LIB B, \r\n"
  313. " TB_VMS_FONT_NAME C, \r\n"
  314. " TB_VMS_FORM D \r\n"
  315. " WHERE D.VMS_FORM_ID = :p01 \r\n"
  316. " AND D.VMS_FORM_ID = A.VMS_FORM_ID \r\n"
  317. " AND B.SYMB_LIB_NMBR = :p02 \r\n"
  318. " AND A.VMS_FONT_NAME_CD = C.VMS_FONT_NAME_CD(+) \r\n"
  319. " ORDER BY A.VMS_FORM_OBJECT_ID ASC \r\n";
  320. try
  321. {
  322. try
  323. {
  324. pADO = new TADOQuery(NULL);
  325. pADO->Close();
  326. pADO->Connection = ITSDb_GetConnection();
  327. ITSDb_SQLText(pADO, sQry);
  328. ITSDb_SQLBind(pADO, "p01", AFormId);
  329. ITSDb_SQLBind(pADO, "p02", FSymbLibNmbr);
  330. ITSDb_SQLOpen(pADO);
  331. int nDrawType;
  332. String sObjKind;
  333. for( ; !pADO->Eof; pADO->Next())
  334. {
  335. int nFormId = pADO->FieldByName("VMS_FORM_ID")->AsInteger;
  336. int nObjId = pADO->FieldByName("VMS_FORM_OBJECT_ID")->AsInteger;
  337. int nObjType = pADO->FieldByName("VMS_FORM_OBJECT_TYPE_CD")->AsInteger;
  338. if (nObjType == 1 || //심볼
  339. nObjType == 2 || //이미지
  340. nObjType == 3 || //배경이미지
  341. nObjType == 17 || //@소통정보이미지 (1열)
  342. nObjType == 27 || //@소통정보이미지2(2열)
  343. nObjType == 37 || //@소통정보이미지3(3열)
  344. nObjType == 47 || //소통이미지4
  345. nObjType == 200 || //동영상
  346. nObjType == 300 || //스트리밍영상
  347. nObjType == 406 || //@통합대기등급 이미지
  348. nObjType == 407 || //@미세먼지등급 이미지
  349. nObjType == 408 || //@초미세먼지등급 이미지
  350. nObjType == 413 //@오존등급이미지
  351. )
  352. {
  353. sObjKind = OBJKIND_IMAGEID; //Image Id
  354. nDrawType = 1; //이미지그리기
  355. }
  356. else
  357. {
  358. sObjKind = OBJKIND_TEXT; //문자열
  359. nDrawType = 0; //문자열그리기
  360. }
  361. //실재 맵핑된 구간의 정보를 표출하도록 한다.
  362. int nBlinking = pADO->FieldByName("VMS_DSPL_BLINKING")->AsInteger;
  363. int nPosX = pADO->FieldByName("VMS_DSPL_XCRDN")->AsInteger;
  364. int nPosY = pADO->FieldByName("VMS_DSPL_YCRDN")->AsInteger;
  365. TVmsFormObject *pObj = ADesigner->AddObject((VmsObjectDrawType)nDrawType);
  366. if (!pObj) continue;
  367. pObj->Text = pADO->FieldByName("SYMB_IMG_NM")->AsString.Trim();
  368. if (FStreamAddr == "") pObj->RunText = pObj->Text;
  369. else pObj->RunText = FStreamAddr; //pObj->Text;
  370. pObj->EditMode = false;
  371. pObj->ObjSeq = nObjId;
  372. pObj->ObjId = nObjId;
  373. pObj->ObjKind = sObjKind;
  374. pObj->Tag = pADO->FieldByName("VMS_IFSC_ID")->AsString;
  375. pObj->ObjType = pADO->FieldByName("VMS_FORM_OBJECT_TYPE_CD")->AsString;
  376. pObj->ObjSize = pADO->FieldByName("VMS_DSPL_SIZE")->AsInteger;
  377. pObj->BkColorCode = pADO->FieldByName("VMS_DSPL_BKCOLOR")->AsString;
  378. pObj->Blink = nBlinking == 1 ? true : false;
  379. pObj->ImageId = pADO->FieldByName("SYMB_LIB_NMBR")->AsString;
  380. pObj->SetPos(nPosX, nPosY);
  381. if (pObj->ObjKind == OBJKIND_TEXT) // 문자열
  382. {
  383. int nFontBold = pADO->FieldByName("VMS_FONT_BOLD")->AsInteger;
  384. pObj->Text = pADO->FieldByName("SYMB_FILE_NM")->AsString;
  385. pObj->FontName = pADO->FieldByName("VMS_FONT_NAME_NM")->AsString;
  386. pObj->FontNameCode = pADO->FieldByName("VMS_FONT_NAME_CD")->AsString;
  387. pObj->FontColorCode = pADO->FieldByName("VMS_FONT_COLR_CD")->AsString;
  388. pObj->FontSize = pADO->FieldByName("VMS_FONT_SIZE")->AsInteger;
  389. pObj->FontBold = nFontBold == 1 ? true : false;
  390. pObj->TextAlign = pADO->FieldByName("VMS_FONT_ALIGN")->AsInteger;
  391. pObj->SetSize(pADO->FieldByName("VMS_DSPL_WIDTH")->AsInteger, pADO->FieldByName("VMS_DSPL_HEIGHT")->AsInteger);
  392. pObj->SetRuntimeText(pObj->RunText);
  393. }
  394. else //if (sObjKind == "1" || sObjKind == "2") // 이미지(1), 이미지 ID(2)
  395. {
  396. if (pObj->ObjKind == OBJKIND_IMAGEID)
  397. {
  398. pObj->Text = pADO->FieldByName("SYMB_LIB_NMBR")->AsString;
  399. }
  400. TStream *pStream = NULL;
  401. //pStream = pADO->CreateBlobStream(pADO->FieldByName("VMS_DSPL_FIGR"), bmRead);
  402. pStream = pADO->CreateBlobStream(pADO->FieldByName("SYMB_IMG"), bmRead);
  403. try
  404. {
  405. if (pStream && pStream->Size > 0)
  406. {
  407. Graphics::TBitmap *Bitmap = pObj->GetBitmap();
  408. pStream->Position = 0;
  409. Bitmap->LoadFromStream(pStream);
  410. pObj->SetSize(Bitmap->Width, Bitmap->Height);
  411. if (FSymbLibNmbr != "200" && FSymbLibNmbr != "300")
  412. pObj->SetPos(0, 0);
  413. }
  414. }
  415. __finally
  416. {
  417. SAFE_DELETE(pStream);
  418. }
  419. }
  420. #if 0
  421. switch(nObjType)
  422. {
  423. case 200: pObj->Text = FSymbLibNmbr; break;
  424. case 201: pObj->Text = FStreamAddr; break;
  425. case 300: pObj->Text = FSymbLibNmbr; break;
  426. case 301: pObj->Text = FStreamAddr; break;
  427. }
  428. #endif
  429. pObj->Show();
  430. pObj->BringToFront();
  431. }
  432. }
  433. catch(EDatabaseError &E)
  434. {
  435. DBERRORMSG("TVMSM630M::LoadFormObjectInfo", String(E.ClassName()), E.Message, sQry);
  436. throw Exception(String(E.ClassName()) + E.Message);
  437. }
  438. catch(Exception &exception)
  439. {
  440. DBERRORMSG("TVMSM630M::LoadFormObjectInfo", String(exception.ClassName()), exception.Message, sQry);
  441. throw Exception(String(exception.ClassName()) + exception.Message);
  442. }
  443. }
  444. __finally
  445. {
  446. if (pADO)
  447. {
  448. pADO->Close();
  449. delete pADO;
  450. }
  451. }
  452. }
  453. //---------------------------------------------------------------------------
  454. void __fastcall TVMSM630M::FormClear()
  455. {
  456. FSelIdx = -1;
  457. EdFormId->Clear();
  458. EdObjId->Clear();
  459. FNewDb = false;
  460. }
  461. //---------------------------------------------------------------------------
  462. void __fastcall TVMSM630M::BtnSaveClick(TObject *Sender)
  463. {
  464. FSymbLibNmbr = EdSymbLibNmbr->Text;
  465. FStreamAddr = EdStreamAddr->Text;
  466. m_pEdtDesigner->GetVmsFormImage(ImgForm);
  467. FSelected = true;
  468. Close();
  469. }
  470. //---------------------------------------------------------------------------
  471. void __fastcall TVMSM630M::TrackBar1Change(TObject *Sender)
  472. {
  473. if (!FTrackChanging && !IsMouseDown())
  474. {
  475. FFPlayer->Seek(FDuration * FTrackBar->Position / FTrackBar->Max);
  476. }
  477. }
  478. //---------------------------------------------------------------------------
  479. void __fastcall TVMSM630M::FFPlayer1FileOpen(TObject *Sender, const __int64 ADuration, int AFrameWidth, int AFrameHeight,
  480. int &AScreenWidth, int &AScreenHeight)
  481. {
  482. if (PnlEditForm->Visible) PnlEditForm->Visible = false;
  483. FDuration = ADuration;
  484. FLblDuration->Caption = DurationToStr(ADuration);
  485. FLblCurrPTS->Caption = "N/A";
  486. // setup track bar
  487. FTrackBar->Frequency = 5;
  488. FTrackBar->TickStyle = tsAuto;
  489. FTrackBar->Max = FTrackBar->Width;
  490. FTrackBar->SelStart = 0;
  491. FTrackBar->SelEnd = 0;
  492. FTrackBar->SliderVisible = ADuration > 0;
  493. FTrackChanging = true;
  494. try
  495. {
  496. FTrackBar->Position = 0;
  497. }
  498. __finally
  499. {
  500. FTrackChanging= false;
  501. }
  502. }
  503. //---------------------------------------------------------------------------
  504. void __fastcall TVMSM630M::FFPlayer1OpenFailed(TObject *Sender)
  505. {
  506. String sLastErrMsg = FFPlayer->LastErrMsg;
  507. FDispArea->Caption = sLastErrMsg;
  508. }
  509. //---------------------------------------------------------------------------
  510. void __fastcall TVMSM630M::FFPlayer1Position(TObject *Sender, const __int64 APTS)
  511. {
  512. FLblCurrPTS->Caption = DurationToStr(APTS);
  513. if ((APTS >= 0) && (FDuration > 0))
  514. {
  515. FTrackBar->SelEnd = FTrackBar->Max * APTS / FDuration;
  516. if (FTrackChanging == false && (IsMouseDown() == false || FTrackBar->Focused() == false))
  517. {
  518. FTrackChanging = true;
  519. try
  520. {
  521. FTrackBar->Position = FTrackBar->Max * APTS / FDuration;
  522. }
  523. __finally
  524. {
  525. FTrackChanging = false;
  526. }
  527. }
  528. }
  529. }
  530. //---------------------------------------------------------------------------
  531. void __fastcall TVMSM630M::FFPlayer1State(TObject *Sender, TPlayState APlayState)
  532. {
  533. switch(APlayState)
  534. {
  535. case Ffbasecomponent::psPlay:
  536. case Ffbasecomponent::psResume:
  537. break;
  538. case Ffbasecomponent::psPause:
  539. case Ffbasecomponent::psStep:
  540. break;
  541. case Ffbasecomponent::psStop:
  542. if (FFPlayer->ScreenHandle != NULL)
  543. {
  544. PostMessage(FFPlayer->ScreenHandle, CM_INVALIDATE, 0, 0);
  545. UpdateWindow(FFPlayer->ScreenHandle);
  546. }
  547. break;
  548. case Ffbasecomponent::psEnd:
  549. {
  550. FFPlayer->Stop(true);
  551. if (PnlEditForm->Visible == false) PnlEditForm->Visible = true;
  552. //FFPlayer[nTag]->Seek((__int64)0, TSeekFlags()<<sfBackward);
  553. }
  554. break;
  555. }
  556. }
  557. //---------------------------------------------------------------------------
  558. void __fastcall TVMSM630M::BtnPlayClick(TObject *Sender)
  559. {
  560. BtnPlay->Enabled = false;
  561. Application->ProcessMessages();
  562. try
  563. {
  564. if (FPlayerFile != "")
  565. {
  566. if (FFPlayer->ScreenHandle != NULL)
  567. {
  568. FFPlayer->Stop(true);
  569. PostMessage(FFPlayer->ScreenHandle, CM_INVALIDATE, 0, 0);
  570. UpdateWindow(FFPlayer->ScreenHandle);
  571. }
  572. }
  573. FFPlayer->AspectRatio = ChkFullScreen->Checked ? -1 : 0;
  574. FFPlayer->TryOpen(FPlayerFile, FDispArea->Handle);
  575. Application->ProcessMessages();
  576. }
  577. catch(Exception &e)
  578. {
  579. }
  580. //CxList->Enabled = false;
  581. BtnStop->Enabled = true;
  582. BtnPause->Enabled = true;
  583. }
  584. //---------------------------------------------------------------------------
  585. void __fastcall TVMSM630M::BtnStopClick(TObject *Sender)
  586. {
  587. BtnStop->Enabled = false;
  588. BtnPause->Enabled = false;
  589. try
  590. {
  591. if (FFPlayer->ScreenHandle != NULL)
  592. {
  593. FFPlayer->Stop(true);
  594. }
  595. Application->ProcessMessages();
  596. }
  597. catch(Exception &e)
  598. {
  599. }
  600. //CxList->Enabled = true;
  601. BtnPlay->Enabled = true;
  602. if (PnlEditForm->Visible == false) PnlEditForm->Visible = true;
  603. }
  604. //---------------------------------------------------------------------------
  605. void __fastcall TVMSM630M::BtnPauseClick(TObject *Sender)
  606. {
  607. try
  608. {
  609. if (FFPlayer->ScreenHandle != NULL)
  610. {
  611. FFPlayer->TogglePause();
  612. }
  613. Application->ProcessMessages();
  614. }
  615. catch(Exception &e)
  616. {
  617. }
  618. }
  619. //---------------------------------------------------------------------------
  620. void __fastcall TVMSM630M::TvListFocusedRecordChanged(TcxCustomGridTableView *Sender, TcxCustomGridRecord *APrevFocusedRecord,
  621. TcxCustomGridRecord *AFocusedRecord, bool ANewItemRecordFocusingChanged)
  622. {
  623. if (!AFocusedRecord) return;
  624. int nRow = TvList->DataController->FocusedRecordIndex;
  625. if( nRow <= -1 )
  626. return;
  627. TcxDataController *pGDC = TvList->DataController;
  628. EdSymbLibNmbr->Text = VarToStr(pGDC->Values[nRow][Col00->Index]);
  629. EdStreamAddr->Text = VarToStr(pGDC->Values[nRow][Col03->Index]);
  630. if (BtnStop->Enabled)
  631. BtnStop->Click();
  632. FPlayerFile = EdStreamAddr->Text;
  633. BtnPlay->Enabled = false;
  634. BtnStop->Enabled = false;
  635. BtnPause->Enabled = false;
  636. if (FPlayerFile != "")
  637. {
  638. BtnPlay->Enabled = true;
  639. }
  640. //CxList->Enabled = false;
  641. BtnPlay->Enabled = true;
  642. BtnStop->Enabled = false;
  643. BtnPause->Enabled = false;
  644. TVmsFormObject *pObj;
  645. int nObjCnt = m_pEdtDesigner->GetObjectCount();
  646. for(int ii = 0; ii < nObjCnt; ii++)
  647. {
  648. pObj = m_pEdtDesigner->GetObject(ii);
  649. if (!pObj) continue;
  650. int nObjType = pObj->ObjType.ToIntDef(0);
  651. switch(nObjType)
  652. {
  653. case 200: case 300:
  654. {
  655. if (nRow < FListSymb->Count)
  656. {
  657. Graphics::TBitmap *bitmap = (Graphics::TBitmap*)FListSymb->Items[nRow];
  658. pObj->SetBitmap(bitmap);
  659. pObj->SetPos(0, 0);
  660. }
  661. }
  662. break;
  663. case 201: case 301:
  664. pObj->RunText = VarToStr(pGDC->Values[nRow][Col03->Index]);
  665. pObj->SetRuntimeText(pObj->RunText);
  666. break;
  667. }
  668. }
  669. }
  670. //---------------------------------------------------------------------------