VMSM620MF.cpp 26 KB

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