FrmVmsMsgSymbMngrF.cpp 47 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #include <IOUtils.hpp>
  4. #include "ITSSkinF.h"
  5. #include "ITSUtilF.h"
  6. #include "AppGlobalF.h"
  7. #include <jpeg.hpp>
  8. #include <GIFimg.hpp>
  9. #pragma hdrstop
  10. #include "FrmVmsMsgSymbMngrF.h"
  11. //---------------------------------------------------------------------------
  12. #pragma package(smart_init)
  13. #pragma link "cxButtons"
  14. #pragma link "cxCalendar"
  15. #pragma link "cxContainer"
  16. #pragma link "cxControls"
  17. #pragma link "cxDropDownEdit"
  18. #pragma link "cxEdit"
  19. #pragma link "cxGraphics"
  20. #pragma link "cxGroupBox"
  21. #pragma link "cxLabel"
  22. #pragma link "cxLookAndFeelPainters"
  23. #pragma link "cxLookAndFeels"
  24. #pragma link "cxMaskEdit"
  25. #pragma link "cxPC"
  26. #pragma link "cxPCdxBarPopupMenu"
  27. #pragma link "cxSpinEdit"
  28. #pragma link "cxSplitter"
  29. #pragma link "cxTextEdit"
  30. #pragma link "cxTimeEdit"
  31. #pragma link "dxSkinBlack"
  32. #pragma link "dxSkinBlue"
  33. #pragma link "dxSkinCaramel"
  34. #pragma link "dxSkinCoffee"
  35. #pragma link "dxSkinDarkRoom"
  36. #pragma link "dxSkinDarkSide"
  37. #pragma link "dxSkinFoggy"
  38. #pragma link "dxSkinGlassOceans"
  39. #pragma link "dxSkiniMaginary"
  40. #pragma link "dxSkinLilian"
  41. #pragma link "dxSkinLiquidSky"
  42. #pragma link "dxSkinLondonLiquidSky"
  43. #pragma link "dxSkinMcSkin"
  44. #pragma link "dxSkinMoneyTwins"
  45. #pragma link "dxSkinOffice2007Black"
  46. #pragma link "dxSkinOffice2007Blue"
  47. #pragma link "dxSkinOffice2007Green"
  48. #pragma link "dxSkinOffice2007Pink"
  49. #pragma link "dxSkinOffice2007Silver"
  50. #pragma link "dxSkinOffice2010Black"
  51. #pragma link "dxSkinOffice2010Blue"
  52. #pragma link "dxSkinOffice2010Silver"
  53. #pragma link "dxSkinsCore"
  54. #pragma link "dxSkinscxPCPainter"
  55. #pragma link "dxSkinSeven"
  56. #pragma link "dxSkinSharp"
  57. #pragma link "dxSkinSilver"
  58. #pragma link "dxSkinStardust"
  59. #pragma link "cxRadioGroup"
  60. #pragma link "cxClasses"
  61. #pragma link "cxCustomData"
  62. #pragma link "cxData"
  63. #pragma link "cxDataStorage"
  64. #pragma link "cxDBData"
  65. #pragma link "cxFilter"
  66. #pragma link "cxGrid"
  67. #pragma link "cxGridCustomTableView"
  68. #pragma link "cxGridCustomView"
  69. #pragma link "cxGridDBTableView"
  70. #pragma link "cxGridLevel"
  71. #pragma link "cxGridTableView"
  72. #pragma link "cxStyles"
  73. #pragma link "cxCheckBox"
  74. #pragma link "cxImage"
  75. #pragma link "cxButtonEdit"
  76. #pragma link "cxBlobEdit"
  77. #pragma link "cxHint"
  78. #pragma link "dxCustomHint"
  79. #pragma link "dxScreenTip"
  80. #pragma link "dxSkinsForm"
  81. #pragma link "FFBaseComponent"
  82. #pragma link "FFBasePlay"
  83. #pragma link "FFPlay"
  84. #pragma link "dxGDIPlusClasses"
  85. #pragma link "FFDecode"
  86. #pragma link "cxCalc"
  87. #pragma resource "*.dfm"
  88. #define LICENSE_KEY "FSXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX"
  89. #define SBT_GENERAL "SBT1" // 일반
  90. #define SBT_TRAFFIC "SBT2" // 소통정보
  91. #define SBT_ATMP "SBT3" // 대기환경
  92. #define SBT_WEATHER "SBT4" // 기상정보
  93. #define SBT_INCIDENT "SBT5" // 돌발
  94. #define SBT_VIDEO "SBT6" // 동영상
  95. #define SBT_TRAFBAK "SBT7" // 소통정보배경
  96. TFrmVmsMsgSymbMngr *FrmVmsMsgSymbMngr = NULL;
  97. //---------------------------------------------------------------------------
  98. __fastcall TFrmVmsMsgSymbMngr::TFrmVmsMsgSymbMngr(TComponent* Owner)
  99. : TForm(Owner)
  100. {
  101. //CMM_SetFormPosition(g_AppCfg.bSaveForm);
  102. ITSSkin_Initialize(Application, g_AppCfg.sLang);
  103. ITSSkin_Caption(false);
  104. ITSSkin_Load(this);
  105. //CMM_LoadForm(g_sFormsDir, this);
  106. SetColorScheme(g_AppCfg.sSkinName);
  107. PnlSymbol->Align = alClient;
  108. FUpdate= false;
  109. FTitle = Caption;//"VMS 심볼이미지 관리";
  110. PgSymb->Properties->HideTabs = true;
  111. PgSymb->Properties->ActivePage = TsSbt1;
  112. //ChangeSymbPage(SBT_GENERAL);
  113. EditMode = false;
  114. FIsUpdate = false;
  115. TvList->OptionsView->DataRowHeight = 0;
  116. TvList->OptionsView->CellAutoHeight = true;
  117. TvList->OptionsView->Indicator = false;
  118. TvList->OptionsCustomize->ColumnMoving = false;
  119. TvList->OptionsCustomize->ColumnSorting = false;
  120. TvList->Columns[0]->Width = 60;
  121. TvList->Columns[0]->Options->HorzSizing = false;
  122. #if 0
  123. TNotifyEvent evt = CbType->Properties->OnChange;
  124. CbType->Properties->OnChange = NULL;
  125. CbType->Properties->Items->Clear();
  126. CbType->Properties->Items->Add(" [SBT1] 일반");
  127. CbType->Properties->Items->Add(" [SBT2] 소통정보");
  128. CbType->Properties->Items->Add(" [SBT3] 대기환경");
  129. CbType->Properties->Items->Add(" [SBT4] 기상정보");
  130. CbType->Properties->Items->Add(" [SBT5] 돌발");
  131. CbType->Properties->Items->Add(" [SBT6] 동영상");
  132. //CbType->Properties->Items->Add(" [SBT7] 소통정보 배경");
  133. CbType->ItemIndex = 0;
  134. CbType->Properties->OnChange = evt;
  135. #endif
  136. FSymbFmtLists.Push("bmp", new TSymbFmt("bmp", "bmp"));
  137. //FSymbFmtLists.Push("jpg", new TSymbFmt("jpg", "jpg"));
  138. //FSymbFmtLists.Push("jpge", new TSymbFmt("jpge", "jpg"));
  139. //FSymbFmtLists.Push("png", new TSymbFmt("png", "png"));
  140. //FSymbFmtLists.Push("avi", new TSymbFmt("avi", "avi"));
  141. //FSymbFmtLists.Push("ico", new TSymbFmt("ico", "ico"));
  142. FSymbFmtLists.Push("gif", new TSymbFmt("gif", "gif"));
  143. CURR_SYMB_DATA = new TMemoryStream();
  144. CURR_SYMB_AVI_DATA = new TMemoryStream();
  145. FThumbNail = 0;
  146. FMakeThumbNail = false;
  147. #if 0
  148. FFDecoder1->SetLicenseKey(LICENSE_KEY);
  149. String sAVILibDir = g_sAppDir + "LibAV";
  150. FFPlayer1->SetLicenseKey(LICENSE_KEY);
  151. FFPlayer1->DisableFPUExceptions();
  152. if (!FFPlayer1->LoadAVLib(sAVILibDir))
  153. {
  154. Application->MessageBox(L"Stream display library load failed.", L"Stream display fail", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  155. }
  156. #endif
  157. SaveDialog->InitialDir = ExtractFilePath(Application->ExeName);
  158. FPlayStream = false;
  159. }
  160. //---------------------------------------------------------------------------
  161. void __fastcall TFrmVmsMsgSymbMngr::SetColorScheme(String ASkinName)
  162. {
  163. dxSkinController1->SkinName = ASkinName;
  164. dxSkinController1->Refresh();
  165. }
  166. //---------------------------------------------------------------------------
  167. void __fastcall TFrmVmsMsgSymbMngr::CommClose()
  168. {
  169. try
  170. {
  171. #if 0
  172. if (CURR_SYMB_DATA) {
  173. CURR_SYMB_DATA->Free();
  174. }
  175. if (CURR_SYMB_AVI_DATA) {
  176. CURR_SYMB_AVI_DATA->Free();
  177. }
  178. #endif
  179. ITSSkin_Term();
  180. //CMM_SaveForm(g_sFormsDir, this);
  181. }
  182. catch(...)
  183. {
  184. }
  185. }
  186. //---------------------------------------------------------------------------
  187. void __fastcall TFrmVmsMsgSymbMngr::FormShow(TObject *Sender)
  188. {
  189. Refresh();
  190. InitDbLoading();
  191. FormInit();
  192. ChangeEditMode(1);
  193. TmrShow->Enabled = true;
  194. }
  195. //---------------------------------------------------------------------------
  196. void __fastcall TFrmVmsMsgSymbMngr::InitDbLoading()
  197. {
  198. Application->ProcessMessages();
  199. if (!VmsCtlrManager) {
  200. VmsCtlrManager = new TVmsCtlrManager();
  201. }
  202. VmsCtlrManager->LoadVmsModlSize();
  203. VmsCtlrManager->LoadFromDb();
  204. }
  205. //---------------------------------------------------------------------------
  206. void __fastcall TFrmVmsMsgSymbMngr::FormInit()
  207. {
  208. EdNmbr->Text = "";
  209. EdName->Text = "";
  210. EdExpl->Text = "";
  211. SeSize->Value = 0;
  212. SeWidth->Value = 0;
  213. SeHeight->Value = 0;
  214. //EdImageFileName->Text = "";
  215. #if 0
  216. ImgGeneral->Picture->Bitmap->FreeImage();
  217. ImgGeneral->Picture->Bitmap = NULL;
  218. ImgVideo->Picture->Bitmap->FreeImage();
  219. ImgVideo->Picture->Bitmap = NULL;
  220. ImgTemp->Picture->Bitmap->FreeImage();
  221. ImgTemp->Picture->Bitmap = NULL;
  222. #endif
  223. FNewDb = false;
  224. }
  225. //---------------------------------------------------------------------------
  226. void __fastcall TFrmVmsMsgSymbMngr::TmrShowTimer(TObject *Sender)
  227. {
  228. TmrShow->Enabled = false;
  229. LoadImageSymbol();
  230. }
  231. //---------------------------------------------------------------------------
  232. void __fastcall TFrmVmsMsgSymbMngr::BtnCloseClick(TObject *Sender)
  233. {
  234. Close();
  235. }
  236. //---------------------------------------------------------------------------
  237. void __fastcall TFrmVmsMsgSymbMngr::FormClose(TObject *Sender, TCloseAction &Action)
  238. {
  239. CommClose();
  240. FrmVmsMsgSymbMngr = NULL;
  241. Action = caFree;
  242. }
  243. //---------------------------------------------------------------------------
  244. void __fastcall TFrmVmsMsgSymbMngr::LoadingImage(TImage *AImage, String AFileName)
  245. {
  246. try {
  247. AImage->Picture->LoadFromFile(AFileName);
  248. if (AImage->Picture->Graphic->ClassName() == "TGIFImage") {
  249. ((TGIFImage *)AImage->Picture->Graphic)->Animate = true;
  250. AImage->Transparent = true;
  251. }
  252. else {
  253. AImage->Transparent = false;
  254. }
  255. }
  256. catch(Exception &e) {
  257. String errMsg = "이미지를 읽어오는 중에 오류가 발생했습니다.\r\n" + e.Message;
  258. Application->MessageBox(errMsg.c_str(), L"이미지 로딩 실패", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  259. }
  260. }
  261. //---------------------------------------------------------------------------
  262. void __fastcall TFrmVmsMsgSymbMngr::DisplayInfo()
  263. {
  264. FormInit();
  265. int nRow = TvList->DataController->FocusedRecordIndex;
  266. if( nRow <= -1 )
  267. return;
  268. TcxGridDataController *pGDC = TvList->DataController;
  269. nRow = pGDC->FocusedRecordIndex;
  270. CURR_VMS_FORM_OBJ_ID= pGDC->Values[nRow][ColSYMB_NMBR->Index];
  271. CURR_PICT_NM = pGDC->Values[nRow][ColSYMB_NM->Index];
  272. CURR_PICT_EXT = pGDC->Values[nRow][ColSYMB_FILE_EXT->Index];
  273. CURR_PICT_DATA_SZ = pGDC->Values[nRow][ColSYMB_SIZE->Index];
  274. CURR_PICT_WDTH = pGDC->Values[nRow][ColSYMB_WDTH->Index];
  275. CURR_PICT_HGHT = pGDC->Values[nRow][ColSYMB_HGHT->Index];
  276. //CURR_USE_YN = pGDC->Values[nRow][ColUSE_YN->Index];
  277. CURR_LOCAL_FILE_NM = pGDC->Values[nRow][ColImagePath->Index];
  278. LoadingImage(ImgGeneral, CURR_LOCAL_FILE_NM);
  279. EdNmbr->Text = CURR_VMS_FORM_OBJ_ID;
  280. EdName->Text = CURR_PICT_NM;
  281. SeSize->Value = CURR_PICT_DATA_SZ;
  282. SeWidth->Value = CURR_PICT_WDTH;
  283. SeHeight->Value = CURR_PICT_HGHT;
  284. EdImageFileName->Text = CURR_LOCAL_FILE_NM;
  285. ChangeEditMode(3);
  286. BtnPlay->Enabled = true;
  287. BtnStop->Enabled = false;
  288. BtnPause->Enabled = false;
  289. }
  290. //---------------------------------------------------------------------------
  291. void __fastcall TFrmVmsMsgSymbMngr::BtnEditClick(TObject *Sender)
  292. {
  293. if (BtnEdit->Caption == "편집")//"편집")
  294. {
  295. ChangeEditMode(0);
  296. FNewDb = false;
  297. }
  298. else
  299. {
  300. String sId = EdNmbr->Text;
  301. ChangeEditMode(1);
  302. if (CMM_FindGridData(TvList->DataController, sId, ColSYMB_NMBR->Index) >= 0)
  303. {
  304. CMM_SetGridRow(CxList, TvList, sId, ColSYMB_NMBR->Index);
  305. DisplayInfo();
  306. }
  307. }
  308. }
  309. //---------------------------------------------------------------------------
  310. void __fastcall TFrmVmsMsgSymbMngr::ChangeEditMode(int AEdit)
  311. {
  312. FImageUpdate = false;
  313. bool bEnabled = false;
  314. switch(AEdit)
  315. {
  316. case 0: //편집버튼클릭
  317. {
  318. BtnEdit->Enabled = true;
  319. BtnInsert->Enabled = false;
  320. BtnDelete->Enabled = false;
  321. BtnSave->Enabled = true;
  322. BtnEdit->Caption = "취소";//"취소";
  323. BtnEdit->Hint = "데이터 편집 취소";//데이터 편집 취소";
  324. EditMode = true;
  325. //EdImageFileName->Enabled = FIsUpdate;
  326. }
  327. break;
  328. case 1: //편집[취소]버튼클릭
  329. {
  330. FormInit(); //화면을 모두 지운다.
  331. BtnEdit->Enabled = false;
  332. BtnInsert->Enabled = true;
  333. BtnDelete->Enabled = false;
  334. BtnSave->Enabled = false;
  335. BtnEdit->Caption = "편집";//"편집";
  336. BtnEdit->Hint = "데이터 편집";//데이터 편집";
  337. //bEnabled = true;
  338. EditMode = false;
  339. //EdImageFileName->Enabled = false;
  340. }
  341. break;
  342. case 2: //추가
  343. {
  344. BtnEdit->Enabled = true;
  345. BtnInsert->Enabled = false;
  346. BtnDelete->Enabled = false;
  347. BtnSave->Enabled = true;
  348. BtnEdit->Caption = "취소";//"취소";
  349. BtnEdit->Hint = "데이터 편집 취소";//데이터 편집 취소";
  350. EditMode = true;
  351. //EdImageFileName->Enabled = true;
  352. }
  353. break;
  354. case 3: //수정모드
  355. {
  356. BtnEdit->Enabled = true;
  357. BtnInsert->Enabled = true;
  358. BtnDelete->Enabled = true;
  359. BtnSave->Enabled = false;
  360. BtnEdit->Caption = "편집";//"편집";
  361. BtnEdit->Hint = "데이터 편집";//데이터 편집";
  362. bEnabled = true;
  363. EditMode = false;
  364. //EdImageFileName->Enabled = FIsUpdate;
  365. }
  366. break;
  367. }
  368. BtnSaveImgFile->Enabled = false;
  369. #if 0
  370. if (FSymbImag != NULL && FSymbImag->Picture->Bitmap != NULL)
  371. {
  372. if (FSymbImag->Picture->Bitmap->Height != 0)
  373. {
  374. BtnSaveImgFile->Enabled = true;
  375. }
  376. }
  377. #else
  378. if (!EdNmbr->Text.IsEmpty() && CURR_PICT_WDTH > 0 && CURR_PICT_HGHT > 0) {
  379. BtnSaveImgFile->Enabled = true;
  380. }
  381. #endif
  382. if (AEdit == 0 || AEdit == 2)
  383. {
  384. GrpList->Enabled = false;
  385. PnlCmd->Enabled = true;
  386. }
  387. else
  388. {
  389. GrpList->Enabled = true;
  390. PnlCmd->Enabled = false;
  391. }
  392. //PnlEdit->Enabled = EditMode;
  393. }
  394. //---------------------------------------------------------------------------
  395. void __fastcall TFrmVmsMsgSymbMngr::BtnSaveClick(TObject *Sender)
  396. {
  397. if (EdNmbr->Text.IsEmpty()) {
  398. Application->MessageBox(L"VMS 이미지정보 저장\r\VMS 폼객체 ID를 입력하세요.",
  399. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  400. return;
  401. }
  402. if (EdName->Text.Trim().IsEmpty()) {
  403. Application->MessageBox(L"VMS 이미지정보 저장\r\n이미지 명칭을 입력하세요.",
  404. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  405. return;
  406. }
  407. bool bResult = false;
  408. String sNmbr = EdNmbr->Text;
  409. CURR_VMS_FORM_OBJ_ID = sNmbr;
  410. CURR_PICT_NM = EdName->Text.Trim();
  411. CURR_PICT_DATA_SZ = SeSize->Value;
  412. CURR_PICT_WDTH = SeWidth->Value;
  413. CURR_PICT_HGHT = SeHeight->Value;
  414. if (!FNewDb) {
  415. bResult = UpdateVmsSymbLib(CURR_VMS_FORM_OBJ_ID, CURR_PICT_NM);
  416. }
  417. else {
  418. CURR_BASE_YN = "Y";
  419. CURR_USE_YN = "Y";
  420. bResult = InsertVmsSymbLib(CURR_VMS_FORM_OBJ_ID,
  421. CURR_PICT_NM,
  422. CURR_PICT_EXT,
  423. CURR_PICT_DATA_SZ,
  424. CURR_PICT_WDTH,
  425. CURR_PICT_HGHT,
  426. CURR_USE_YN);
  427. }
  428. if (bResult)
  429. {
  430. Application->MessageBox(L"VMS 이미지정보 저장\r\nVMS 이미지정보를 저장 하였습니다.",
  431. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  432. FUpdate = true;
  433. LoadImageSymbol();
  434. CMM_SetGridRow(CxList, TvList, sNmbr, ColSYMB_NMBR->Index);
  435. //DisplayInfo();
  436. }
  437. }
  438. //---------------------------------------------------------------------------
  439. void __fastcall TFrmVmsMsgSymbMngr::BtnInsertClick(TObject *Sender)
  440. {
  441. MnuAddVmsSymbClick((TObject*)MnuGeneral);
  442. }
  443. //---------------------------------------------------------------------------
  444. void __fastcall TFrmVmsMsgSymbMngr::BtnDeleteClick(TObject *Sender)
  445. {
  446. int nIdx = TvList->DataController->FocusedRecordIndex;
  447. if (nIdx < 0) return;
  448. String sId = EdNmbr->Text;
  449. if (sId.IsEmpty())
  450. {
  451. Application->MessageBox(L"삭제할 VMS 이미지를 목록에서 선택하세요.\r\n목록에서 더블클릭하여 선택합니다.",
  452. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  453. return;
  454. }
  455. if (CheckFormObjectUseCount(sId) > 0) {
  456. Application->MessageBox(L"삭제할 이미지가 VMS 폼에서 사용되고 있습니다.\r\n먼저 해당 폼에서 삭제해주시기 바랍니다.",
  457. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  458. return;
  459. }
  460. String sMsg;
  461. sMsg = "VMS 폼객체 ID: " + sId;
  462. sMsg+= "\r\n선택하신 VMS 폼객체 이미지 정보를 삭제하시겠습니까?";
  463. if (Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) == IDYES) {
  464. if (DeleteVmsSymbLib(sId, true))
  465. {
  466. FUpdate = true;
  467. String msg = "VMS 폼객체 이미지 정보삭제\r\nVMS 폼객체 이미지 정보를 삭제 하였습니다.";
  468. Application->MessageBox(msg.c_str(), FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  469. FormInit();
  470. ChangeEditMode(1);
  471. LoadImageSymbol();
  472. }
  473. }
  474. }
  475. //---------------------------------------------------------------------------
  476. void __fastcall TFrmVmsMsgSymbMngr::BtnSaveImgFileClick(TObject *Sender)
  477. {
  478. SaveDialog->Title = FTitle;
  479. //SaveDialog->InitialDir = ExtractFilePath(Application->ExeName);
  480. SaveDialog->Filter = "이미지 파일 (*." + CURR_PICT_EXT + ")|*." + CURR_PICT_EXT;
  481. SaveDialog->FileName = EdNmbr->Text + "." + CURR_PICT_EXT;
  482. if (SaveDialog->Execute()) {
  483. try {
  484. String sFileName = SaveDialog->FileName;
  485. ImgGeneral->Picture->SaveToFile(sFileName);
  486. SaveDialog->InitialDir = ExtractFilePath(sFileName);
  487. }
  488. catch (Exception &exception) {
  489. Application->ShowException(&exception);
  490. }
  491. }
  492. }
  493. //---------------------------------------------------------------------------
  494. void __fastcall TFrmVmsMsgSymbMngr::EdImageFileNameClick(TObject *Sender)
  495. {
  496. #if 0
  497. if (OpenBmp->InitialDir == "") {
  498. OpenBmp->InitialDir = g_sAppDir;
  499. }
  500. OpenBmp->Title = FTitle;
  501. OpenBmp->FileName = "";
  502. OpenBmp->Execute();
  503. #endif
  504. }
  505. //---------------------------------------------------------------------------
  506. void __fastcall TFrmVmsMsgSymbMngr::OpenBmpCanClose(TObject *Sender, bool &CanClose)
  507. {
  508. CURR_LOCAL_FILE_NM = OpenBmp->FileName;
  509. String sFilePath = ExtractFilePath(CURR_LOCAL_FILE_NM);
  510. CURR_PIC_FILE_NM = ExtractFileName(CURR_LOCAL_FILE_NM);
  511. String sFileExt = ExtractFileExt(CURR_LOCAL_FILE_NM);
  512. OpenBmp->InitialDir = sFilePath;
  513. CURR_USE_YN = "Y";
  514. CURR_PICT_EXT = "";
  515. sFileExt = StringReplace(sFileExt, ".", "", TReplaceFlags() << rfReplaceAll);
  516. sFileExt = sFileExt.LowerCase();
  517. TSymbFmt *symbFmt = FSymbFmtLists.Find(sFileExt);
  518. if (symbFmt == NULL) {
  519. Application->MessageBox(L"이미지 심벌로 지원하지 않는 형식입니다.\r\n지원형식(bmp, jpg, png, ico)", L"이미지 심벌 추가 실패", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  520. BtnInsertClick((TObject*)BtnInsert);
  521. return;
  522. }
  523. CURR_PICT_EXT = symbFmt->fmtType;
  524. FImageUpdate = false;
  525. //delete CURR_SYMB_DATA;
  526. TMemoryStream *pPicStream = new TMemoryStream();
  527. try {
  528. try {
  529. pPicStream->LoadFromFile(CURR_LOCAL_FILE_NM);
  530. CURR_PICT_DATA_SZ = pPicStream->Size;
  531. LoadingImage(ImgGeneral, CURR_LOCAL_FILE_NM);
  532. CURR_PICT_WDTH = ImgGeneral->Picture->Width;
  533. CURR_PICT_HGHT = ImgGeneral->Picture->Height;
  534. SeSize->Value = CURR_PICT_DATA_SZ;
  535. SeWidth->Value = CURR_PICT_WDTH;
  536. SeHeight->Value = CURR_PICT_HGHT;
  537. if (ImgGeneral->Picture->Graphic->ClassName() == "TGIFImage") {
  538. ((TGIFImage *)ImgGeneral->Picture->Graphic)->Animate = true;
  539. ImgGeneral->Transparent = true;
  540. }
  541. else {
  542. ImgGeneral->Transparent = false;
  543. }
  544. FImageUpdate = true;
  545. }
  546. catch(Exception &e) {
  547. String errMsg = "이미지 심벌 처리 중에 오류가 발생했습니다.\r\n" + e.Message;
  548. Application->MessageBox(errMsg.c_str(), L"이미지 심벌 추가 실패", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  549. }
  550. }
  551. __finally {
  552. SAFE_DELETE(pPicStream);
  553. }
  554. if (FImageUpdate == false) {
  555. BtnInsertClick((TObject*)BtnInsert);
  556. }
  557. }
  558. //---------------------------------------------------------------------------
  559. void __fastcall TFrmVmsMsgSymbMngr::ClearListMemory()
  560. {
  561. #if 0
  562. try {
  563. TvList->BeginUpdate();
  564. int nRowCnt = TvList->ViewData->RecordCount;
  565. for (int ii = 0; ii < nRowCnt; ii++) {
  566. TcxCustomGridRow* ARow = TvList->ViewData->Rows[ii];
  567. TMemoryStream *pImgStream = (TMemoryStream *)(int)ARow->Values[Column99->Index];
  568. SAFE_DELETE(pImgStream);
  569. }
  570. }
  571. __finally {
  572. TvList->EndUpdate();
  573. }
  574. #endif
  575. CMM_ClearGridTableView(TvList);
  576. }
  577. //---------------------------------------------------------------------------
  578. void __fastcall TFrmVmsMsgSymbMngr::LoadImageSymbol()
  579. {
  580. FormInit();
  581. ClearListMemory();
  582. String sQry;
  583. TADOQuery *pADO = NULL;
  584. sQry = "SELECT * \r\n"
  585. " FROM TB_VMS_FORM_OBJ_PICT \r\n"
  586. " WHERE 1=1 \r\n"
  587. " ORDER BY VMS_FORM_OBJ_ID \r\n";
  588. int nRowHeight = 0;
  589. try
  590. {
  591. int nRow;
  592. TcxDataController *pGDC = TvList->DataController;
  593. TvList->BeginUpdate();
  594. try
  595. {
  596. pADO = new TADOQuery(NULL);
  597. pADO->Close();
  598. pADO->Connection = ITSDb_GetConnection();
  599. ITSDb_SQLText(pADO, sQry);
  600. ITSDb_SQLOpen(pADO);
  601. String imageFilePath;
  602. String saveDirPath = TPath::GetTempPath() + "VMS\\";
  603. ForceDirectories(saveDirPath.c_str());
  604. for( ; !pADO->Eof; pADO->Next())
  605. {
  606. nRow = pGDC->AppendRecord();
  607. String VMS_FORM_OBJ_ID = pADO->FieldByName("VMS_FORM_OBJ_ID")->AsString;
  608. String PICT_TYPE = pADO->FieldByName("PICT_TYPE")->AsString;
  609. String PICT_EXT = DbPictTypeToReal(PICT_TYPE);
  610. pGDC->Values[nRow][ColSYMB_NMBR->Index] = VMS_FORM_OBJ_ID;
  611. pGDC->Values[nRow][ColSYMB_NM->Index] = pADO->FieldByName("PICT_NM")->AsString;
  612. pGDC->Values[nRow][ColSYMB_DATA->Index] = pADO->FieldByName("PICT_DATA")->AsVariant;
  613. pGDC->Values[nRow][ColSYMB_FILE_EXT->Index] = PICT_EXT;
  614. pGDC->Values[nRow][ColSYMB_SIZE->Index] = pADO->FieldByName("PICT_DATA_SZ")->AsInteger;
  615. pGDC->Values[nRow][ColSYMB_WDTH->Index] = pADO->FieldByName("PICT_WDTH")->AsInteger;
  616. pGDC->Values[nRow][ColSYMB_HGHT->Index] = pADO->FieldByName("PICT_HGHT")->AsInteger;
  617. //pGDC->Values[nRow][ColUSE_YN->Index] = pADO->FieldByName("USE_YN")->AsString;
  618. TMemoryStream *pImgStream = new TMemoryStream();
  619. pImgStream->LoadFromStream(pADO->CreateBlobStream(pADO->FieldByName("PICT_DATA"), bmRead));
  620. imageFilePath = saveDirPath + VMS_FORM_OBJ_ID + "." + PICT_EXT;
  621. pImgStream->SaveToFile(imageFilePath);
  622. SAFE_DELETE(pImgStream);
  623. pGDC->Values[nRow][ColImagePath->Index] = imageFilePath;
  624. }
  625. }
  626. catch(EDatabaseError &E)
  627. {
  628. DBERRORMSG("TFrmVmsSymbMngr::LoadImageSymbol", String(E.ClassName()), E.Message, sQry);
  629. throw Exception(String(E.ClassName()) + E.Message);
  630. }
  631. catch(Exception &e)
  632. {
  633. DBERRORMSG("TFrmVmsSymbMngr::LoadImageSymbol", String(e.ClassName()), e.Message, sQry);
  634. throw Exception(String(e.ClassName()) + e.Message);
  635. }
  636. }
  637. __finally
  638. {
  639. if (pADO)
  640. {
  641. pADO->Close();
  642. delete pADO;
  643. }
  644. TvList->EndUpdate();
  645. TvList->ApplyBestFit(NULL, false, false);
  646. }
  647. }
  648. //---------------------------------------------------------------------------
  649. void __fastcall TFrmVmsMsgSymbMngr::TvListCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo,
  650. TMouseButton AButton, TShiftState AShift,
  651. bool &AHandled)
  652. {
  653. if (!ACellViewInfo) return;
  654. DisplayInfo();
  655. }
  656. //---------------------------------------------------------------------------
  657. void __fastcall TFrmVmsMsgSymbMngr::ColSYMB_DATACustomDrawCell(TcxCustomGridTableView *Sender,
  658. TcxCanvas *ACanvas, TcxGridTableDataCellViewInfo *AViewInfo,
  659. bool &ADone)
  660. {
  661. #if 0
  662. int nRow = AViewInfo->GridRecord->RecordIndex;
  663. if (nRow < 0) return;
  664. try
  665. {
  666. Graphics::TBitmap *pBmp = (Graphics::TBitmap*)FListSymb->Items[nRow];
  667. TRect rc;
  668. TRect rcOrg = AViewInfo->Bounds;
  669. int nH = ( (rcOrg.Bottom - rcOrg.Top) - pBmp->Height ) / 2;
  670. rc.Top = rcOrg.Top + nH+1;
  671. rc.Bottom = rcOrg.Bottom - nH+1;
  672. rc.Left = rcOrg.Left + 1;
  673. rc.Right = rc.Left + pBmp->Width;
  674. ACanvas->Canvas->StretchDraw(rc, pBmp);
  675. ADone = true;
  676. }
  677. catch(Exception &e)
  678. {
  679. }
  680. #endif
  681. }
  682. //---------------------------------------------------------------------------
  683. void __fastcall TFrmVmsMsgSymbMngr::TvListFocusedRecordChanged(TcxCustomGridTableView *Sender,
  684. TcxCustomGridRecord *APrevFocusedRecord, TcxCustomGridRecord *AFocusedRecord,
  685. bool ANewItemRecordFocusingChanged)
  686. {
  687. if (!AFocusedRecord) return;
  688. DisplayInfo();
  689. }
  690. //---------------------------------------------------------------------------
  691. void __fastcall TFrmVmsMsgSymbMngr::CbTypePropertiesChange(TObject *Sender)
  692. {
  693. if (CbType->Text.Pos(SBT_GENERAL)) {
  694. //if (LblDesc->Visible) LblDesc->Visible = false;
  695. }
  696. else {
  697. //if (LblDesc->Visible == false) LblDesc->Visible = true;
  698. }
  699. }
  700. //---------------------------------------------------------------------------
  701. void __fastcall TFrmVmsMsgSymbMngr::PnlMenuDblClick(TObject *Sender)
  702. {
  703. FIsUpdate = true;
  704. }
  705. //---------------------------------------------------------------------------
  706. bool __fastcall TFrmVmsMsgSymbMngr::DeleteVmsSymbLib(String VMS_FORM_OBJ_ID, bool ADelete)
  707. {
  708. String sQry;
  709. TADOQuery *pADO = NULL;
  710. if (ADelete) {
  711. sQry = "DELETE TB_VMS_FORM_OBJ_PICT \r\n"
  712. " WHERE VMS_FORM_OBJ_ID = :p01 \r\n";
  713. }
  714. else {
  715. sQry = "UPDATE TB_VMS_FORM_OBJ_PICT \r\n"
  716. " SET CHNGR_ID = :p02, \r\n"
  717. " CHG_DT = SYSDATE \r\n"
  718. " WHERE VMS_FORM_OBJ_ID = :p01 \r\n";
  719. }
  720. try
  721. {
  722. try
  723. {
  724. pADO = new TADOQuery(NULL);
  725. pADO->Close();
  726. pADO->Connection = ITSDb_GetConnection();
  727. ITSDb_SQLText(pADO, sQry);
  728. pADO->Parameters->ParamByName("p01")->Value = VMS_FORM_OBJ_ID;
  729. if (!ADelete) {
  730. pADO->Parameters->ParamByName("p02")->Value = g_AppCfg.OPER_ID;
  731. }
  732. pADO->ExecSQL();
  733. }
  734. catch(EDatabaseError &E)
  735. {
  736. DBERRORMSG("TFrmVmsSymbMngr::DeleteVmsSymbLib", String(E.ClassName()), E.Message, sQry);
  737. return false;
  738. }
  739. catch(Exception &e)
  740. {
  741. DBERRORMSG("TFrmVmsSymbMngr::DeleteVmsSymbLib", String(e.ClassName()), e.Message, sQry);
  742. return false;
  743. }
  744. }
  745. __finally
  746. {
  747. if (pADO)
  748. {
  749. pADO->Close();
  750. delete pADO;
  751. }
  752. }
  753. return true;
  754. }
  755. //---------------------------------------------------------------------------
  756. bool __fastcall TFrmVmsMsgSymbMngr::UpdateVmsSymbLib(String VMS_FORM_OBJ_ID, String PICT_NM)
  757. {
  758. String sQry;
  759. TADOQuery *pADO = NULL;
  760. sQry = "UPDATE TB_VMS_FORM_OBJ_PICT \r\n"
  761. " SET PICT_NM = :p02, \r\n"
  762. " CHNGR_ID = :p03, \r\n"
  763. " CHG_DT = SYSDATE \r\n"
  764. " WHERE VMS_FORM_OBJ_ID = :p01 \r\n";
  765. try
  766. {
  767. try
  768. {
  769. pADO = new TADOQuery(NULL);
  770. pADO->Close();
  771. pADO->Connection = ITSDb_GetConnection();
  772. ITSDb_SQLText(pADO, sQry);
  773. pADO->Parameters->ParamByName("p01")->Value = VMS_FORM_OBJ_ID;
  774. pADO->Parameters->ParamByName("p02")->Value = PICT_NM;
  775. pADO->Parameters->ParamByName("p03")->Value = g_AppCfg.OPER_ID;
  776. pADO->ExecSQL();
  777. }
  778. catch(EDatabaseError &E)
  779. {
  780. DBERRORMSG("TFrmVmsSymbMngr::UpdateVmsSymbLib", String(E.ClassName()), E.Message, sQry);
  781. return false;
  782. }
  783. catch(Exception &e)
  784. {
  785. DBERRORMSG("TFrmVmsSymbMngr::UpdateVmsSymbLib", String(e.ClassName()), e.Message, sQry);
  786. return false;
  787. }
  788. }
  789. __finally
  790. {
  791. if (pADO)
  792. {
  793. pADO->Close();
  794. delete pADO;
  795. }
  796. }
  797. return true;
  798. }
  799. //---------------------------------------------------------------------------
  800. bool __fastcall TFrmVmsMsgSymbMngr::InsertVmsSymbLib(String VMS_FORM_OBJ_ID,
  801. String PICT_NM,
  802. String PICT_EXT,
  803. int PICT_DATA_SZ,
  804. int PICT_WDTH,
  805. int PICT_HGHT,
  806. String USE_YN) {
  807. String sQry;
  808. TADOQuery *pADO = NULL;
  809. sQry = "INSERT INTO TB_VMS_FORM_OBJ_PICT ( \r\n"
  810. " VMS_FORM_OBJ_ID, \r\n"
  811. " PICT_NM, \r\n"
  812. " PICT_WDTH, \r\n"
  813. " PICT_HGHT, \r\n"
  814. " PICT_DATA_SZ, \r\n"
  815. " PICT_DATA, \r\n"
  816. " PICT_TYPE, \r\n"
  817. " RGSTR_ID, \r\n"
  818. " REG_DT ) \r\n"
  819. " VALUES ( \r\n"
  820. " :p01, \r\n"
  821. " :p02, \r\n"
  822. " :p03, \r\n"
  823. " :p04, \r\n"
  824. " :p05, \r\n"
  825. " :p06, \r\n"
  826. " :p07, \r\n"
  827. " :p08, \r\n"
  828. " SYSDATE ) \r\n";
  829. TMemoryStream *dataStream = new TMemoryStream();
  830. try
  831. {
  832. dataStream->LoadFromFile(CURR_LOCAL_FILE_NM);
  833. try
  834. {
  835. pADO = new TADOQuery(NULL);
  836. pADO->Close();
  837. pADO->Connection = ITSDb_GetConnection();
  838. ITSDb_SQLText(pADO, sQry);
  839. pADO->Parameters->ParamByName("p01")->Value = VMS_FORM_OBJ_ID;
  840. pADO->Parameters->ParamByName("p02")->Value = PICT_NM;
  841. pADO->Parameters->ParamByName("p03")->Value = PICT_WDTH;
  842. pADO->Parameters->ParamByName("p04")->Value = PICT_HGHT;
  843. pADO->Parameters->ParamByName("p05")->Value = PICT_DATA_SZ;
  844. pADO->Parameters->ParamByName("p06")->LoadFromStream(dataStream, ftBlob);
  845. pADO->Parameters->ParamByName("p07")->Value = RealPictTypeToDb(PICT_EXT);
  846. pADO->Parameters->ParamByName("p08")->Value = g_AppCfg.OPER_ID;
  847. pADO->ExecSQL();
  848. }
  849. catch(EDatabaseError &E)
  850. {
  851. DBERRORMSG("TFrmVmsSymbMngr::InsertVmsSymbLib", String(E.ClassName()), E.Message, sQry);
  852. return false;
  853. }
  854. catch(Exception &e)
  855. {
  856. DBERRORMSG("TFrmVmsSymbMngr::InsertVmsSymbLib", String(e.ClassName()), e.Message, sQry);
  857. return false;
  858. }
  859. }
  860. __finally
  861. {
  862. if (pADO)
  863. {
  864. pADO->Close();
  865. delete pADO;
  866. }
  867. SAFE_DELETE(dataStream);
  868. }
  869. return true;
  870. }
  871. //---------------------------------------------------------------------------
  872. String __fastcall TFrmVmsMsgSymbMngr::GetNewVmsFormPictObjId()
  873. {
  874. String sQry;
  875. TADOQuery *pADO = NULL;
  876. String result = "SG-0000000";
  877. sQry = "SELECT 'SG-' || LPAD(NVL(MAX(SUBSTR(VMS_FORM_OBJ_ID, -7)), '0000000') + 1, 7, '0') AS NEWID FROM TB_VMS_FORM_OBJ_PICT WHERE SUBSTR(VMS_FORM_OBJ_ID, 1,3) = 'SG-'\r\n";
  878. try
  879. {
  880. try
  881. {
  882. pADO = new TADOQuery(NULL);
  883. pADO->Close();
  884. pADO->Connection = ITSDb_GetConnection();
  885. ITSDb_SQLText(pADO, sQry);
  886. ITSDb_SQLOpen(pADO);
  887. pADO->Open();
  888. result = pADO->FieldByName("NEWID")->AsString;
  889. }
  890. catch(EDatabaseError &E)
  891. {
  892. DBERRORMSG("TFrmVmsSymbMngr::GetNewVmsFormPictObjId", String(E.ClassName()), E.Message, sQry);
  893. return result;
  894. }
  895. catch(Exception &e)
  896. {
  897. DBERRORMSG("TFrmVmsSymbMngr::GetNewVmsFormPictObjId", String(e.ClassName()), e.Message, sQry);
  898. return result;
  899. }
  900. }
  901. __finally
  902. {
  903. if (pADO)
  904. {
  905. pADO->Close();
  906. delete pADO;
  907. }
  908. }
  909. return result;
  910. }
  911. //---------------------------------------------------------------------------
  912. void __fastcall TFrmVmsMsgSymbMngr::MnuAddVmsSymbClick(TObject *Sender)
  913. {
  914. int START_NMBR, END_NMBR;
  915. TMenuItem *pMenu = (TMenuItem*)Sender;
  916. switch(pMenu->Tag) {
  917. case 1: CURR_SYMB_TYPE = SBT_GENERAL; START_NMBR = 1000; END_NMBR = 1999; break; // 일반
  918. case 2: CURR_SYMB_TYPE = SBT_TRAFFIC; START_NMBR = 2000; END_NMBR = 2999; break; // 소통정보
  919. case 3: CURR_SYMB_TYPE = SBT_ATMP; START_NMBR = 3000; END_NMBR = 3999; break; // 대기환경
  920. case 4: CURR_SYMB_TYPE = SBT_WEATHER; START_NMBR = 4000; END_NMBR = 4999; break; // 기상정보
  921. case 5: CURR_SYMB_TYPE = SBT_INCIDENT; START_NMBR = 5000; END_NMBR = 5999; break; // 돌발
  922. case 6: CURR_SYMB_TYPE = SBT_VIDEO; START_NMBR = 6000; END_NMBR = 6999; break; // 동영상
  923. case 7: CURR_SYMB_TYPE = SBT_TRAFBAK; START_NMBR = 7000; END_NMBR = 7999; break; // 소통정보배경
  924. default: return;
  925. }
  926. String symbDefExt = "";
  927. String symbFilter = "";
  928. #if 0
  929. switch(pMenu->Tag) {
  930. case 1: symbDefExt = "bmp"; symbFilter = "심벌 (*.gif;*.png;*.jpg;*.jpeg;*.bmp;*.ico)|*.gif;*.png;*.jpg;*.jpeg;*.bmp;*.ico"; break; // 일반
  931. case 2: symbDefExt = "bmp"; symbFilter = "소통정보 (*.bmp)|*.bmp"; break; // 소통정보
  932. case 3: symbDefExt = "bmp"; symbFilter = "대기환경 (*.gif;*.png;*.jpg;*.jpeg;*.bmp)|*.gif;*.png;*.jpg;*.jpeg;*.bmp"; break; // 대기환경
  933. case 4: symbDefExt = "bmp"; symbFilter = "기상정보 (*.gif;*.png;*.jpg;*.jpeg;*.bmp;*.avi)|*.gif;*.png;*.jpg;*.jpeg;*.bmp;*.avi"; break; // 기상정보
  934. case 5: symbDefExt = "bmp"; symbFilter = "돌발 (*.gif;*.png;*.jpg;*.jpeg;*.bmp)|*.gif;*.png;*.jpg;*.jpeg;*.bmp"; break; // 돌발
  935. case 6: symbDefExt = "avi"; symbFilter = "동영상 (*.avi)|*.avi"; break; // 동영상
  936. case 7: symbDefExt = "bmp"; symbFilter = "소통정보배경 (*.bmp)|*.bmp"; break; // 소통정보배경
  937. default: return;
  938. }
  939. #else
  940. switch(pMenu->Tag) {
  941. case 1: symbDefExt = "bmp"; symbFilter = "심벌 (*.gif;*.bmp)|*.gif;*.bmp"; break; // 일반
  942. case 2: symbDefExt = "bmp"; symbFilter = "소통정보 (*.bmp)|*.bmp"; break; // 소통정보
  943. case 3: symbDefExt = "bmp"; symbFilter = "대기환경 (*.gif;*.bmp)|*.gif;*.bmp"; break; // 대기환경
  944. case 4: symbDefExt = "bmp"; symbFilter = "기상정보 (*.gif;*.bmp)|*.gif;*.bmp"; break; // 기상정보
  945. case 5: symbDefExt = "bmp"; symbFilter = "돌발 (*.gif;*.bmp)|*.gif;*.bmp"; break; // 돌발
  946. case 6: symbDefExt = "avi"; symbFilter = "동영상 (*.avi;*.mpeg;*.mkv;*.mp4)|*.avi;*.mpeg;*.mkv;*.mp4"; break; // 동영상
  947. case 7: symbDefExt = "bmp"; symbFilter = "소통정보배경 (*.bmp)|*.bmp"; break; // 소통정보배경
  948. default: return;
  949. }
  950. #endif
  951. OpenBmp->DefaultExt = symbDefExt;
  952. OpenBmp->Filter = symbFilter;
  953. FormInit();
  954. CURR_VMS_FORM_OBJ_ID = GetNewVmsFormPictObjId();
  955. EdNmbr->Text = CURR_VMS_FORM_OBJ_ID;
  956. ChangeEditMode(2);
  957. FNewDb = true;
  958. if (OpenBmp->InitialDir == "") {
  959. OpenBmp->InitialDir = g_sAppDir;
  960. }
  961. OpenBmp->Title = FTitle;
  962. OpenBmp->FileName = "";
  963. if (!OpenBmp->Execute()) {
  964. ChangeEditMode(1);
  965. }
  966. }
  967. //---------------------------------------------------------------------------
  968. void __fastcall TFrmVmsMsgSymbMngr::ChangeSymbPage(String ASymbType)
  969. {
  970. int itemIdx = -1;
  971. for (int ii = 0; ii < CbType->Properties->Items->Count; ii++) {
  972. String itemText = CbType->Properties->Items->Strings[ii];
  973. if (itemText.Pos(ASymbType)) {
  974. itemIdx = ii;
  975. break;
  976. }
  977. }
  978. CbType->ItemIndex = itemIdx;
  979. if (ASymbType == SBT_TRAFFIC
  980. || ASymbType == SBT_ATMP
  981. || ASymbType == SBT_WEATHER
  982. || ASymbType == SBT_INCIDENT) {
  983. EdExpl->Properties->ReadOnly = true;
  984. }
  985. else EdExpl->Properties->ReadOnly = false;
  986. TcxTabSheet *pNewActive = NULL;
  987. String grpSymbCaption = "▶ 일반 심볼 이미지";
  988. if (ASymbType == SBT_GENERAL) {
  989. pNewActive = TsSbt1;
  990. grpSymbCaption = "▶ 일반 심볼 이미지";
  991. }
  992. else if (ASymbType == SBT_TRAFFIC) {
  993. pNewActive = TsSbt2;
  994. grpSymbCaption = "▶ 소통정보 심볼 이미지";
  995. }
  996. else if (ASymbType == SBT_ATMP)
  997. {
  998. pNewActive = TsSbt3;
  999. grpSymbCaption = "▶ 대기환경 심볼 이미지";
  1000. }
  1001. else if (ASymbType == SBT_WEATHER) {
  1002. pNewActive = TsSbt4;
  1003. grpSymbCaption = "▶ 기상정보 심볼 이미지";
  1004. }
  1005. else if (ASymbType == SBT_INCIDENT) {
  1006. pNewActive = TsSbt5;
  1007. grpSymbCaption = "▶ 돌발 심볼 이미지";
  1008. }
  1009. else if (ASymbType == SBT_VIDEO) {
  1010. pNewActive = TsSbt6;
  1011. grpSymbCaption = "▶ 동영상 심볼 이미지";
  1012. }
  1013. else if (ASymbType == SBT_TRAFBAK) {
  1014. pNewActive = TsSbt7;
  1015. grpSymbCaption = "▶ 소통정보 배경 심볼 이미지";
  1016. }
  1017. else return;
  1018. TcxTabSheet *pCurActive = PgSymb->Properties->ActivePage;
  1019. if (pNewActive != pCurActive) {
  1020. PgSymb->Properties->ActivePage = pNewActive;
  1021. GrpSymbBox->Caption = grpSymbCaption;
  1022. }
  1023. }
  1024. //---------------------------------------------------------------------------
  1025. String __fastcall TFrmVmsMsgSymbMngr::GetSymbTypeDesc(String ASymbType)
  1026. {
  1027. if (ASymbType == SBT_GENERAL) {
  1028. return "일반";
  1029. }
  1030. else if (ASymbType == SBT_TRAFFIC) {
  1031. return "소통정보";
  1032. }
  1033. else if (ASymbType == SBT_ATMP)
  1034. {
  1035. return "대기환경";
  1036. }
  1037. else if (ASymbType == SBT_WEATHER) {
  1038. return "기상정보";
  1039. }
  1040. else if (ASymbType == SBT_INCIDENT) {
  1041. return "돌발";
  1042. }
  1043. else if (ASymbType == SBT_VIDEO) {
  1044. return "동영상";
  1045. }
  1046. else if (ASymbType == SBT_TRAFBAK) {
  1047. return "소통정보 배경";
  1048. }
  1049. return "?-" + ASymbType;
  1050. }
  1051. //---------------------------------------------------------------------------
  1052. void __fastcall TFrmVmsMsgSymbMngr::FFPlayer1FileOpen(TObject *Sender, const __int64 ADuration, int AFrameWidth, int AFrameHeight,
  1053. int &AScreenWidth, int &AScreenHeight)
  1054. {
  1055. #if 0
  1056. FPlayTime = (ADuration + 5000) / 1000000;
  1057. FPlayTime++;
  1058. FThumbNail = 0;
  1059. FMakeThumbNail = true;
  1060. #endif
  1061. FDuration = ADuration;
  1062. lblDuration->Caption = DurationToStr(ADuration);
  1063. lblCurrentPTS->Caption = "N/A";
  1064. // setup track bar
  1065. TrackBar->Frequency = 5;
  1066. TrackBar->TickStyle = tsAuto;
  1067. TrackBar->Max = TrackBar->Width;
  1068. TrackBar->SelStart = 0;
  1069. TrackBar->SelEnd = 0;
  1070. TrackBar->SliderVisible = ADuration > 0;
  1071. FTrackChanging = true;
  1072. try
  1073. {
  1074. TrackBar->Position = 0;
  1075. }
  1076. __finally
  1077. {
  1078. FTrackChanging = false;
  1079. }
  1080. }
  1081. //---------------------------------------------------------------------------
  1082. void __fastcall TFrmVmsMsgSymbMngr::FFPlayer1OpenFailed(TObject *Sender)
  1083. {
  1084. String sLastErrMsg = FFPlayer1->LastErrMsg;
  1085. PnlPlayer->Caption = sLastErrMsg;
  1086. }
  1087. //---------------------------------------------------------------------------
  1088. void __fastcall TFrmVmsMsgSymbMngr::FFPlayer1Position(TObject *Sender, const __int64 APTS)
  1089. {
  1090. lblCurrentPTS->Caption = DurationToStr(APTS);
  1091. if ((APTS >= 0) && (FDuration > 0))
  1092. {
  1093. TrackBar->SelEnd = TrackBar->Max * APTS / FDuration;
  1094. if (FTrackChanging == false && (IsMouseDown() == false || TrackBar->Focused() == false))
  1095. {
  1096. FTrackChanging = true;
  1097. try
  1098. {
  1099. TrackBar->Position = TrackBar->Max * APTS / FDuration;
  1100. }
  1101. __finally
  1102. {
  1103. FTrackChanging = false;
  1104. }
  1105. }
  1106. if (FMakeThumbNail)
  1107. {
  1108. FThumbNail++;
  1109. if (FThumbNail > 2)
  1110. {
  1111. //섬네일이미지 생성
  1112. FMakeThumbNail = false;
  1113. }
  1114. }
  1115. }
  1116. }
  1117. //---------------------------------------------------------------------------
  1118. void __fastcall TFrmVmsMsgSymbMngr::FFPlayer1State(TObject *Sender, TPlayState APlayState)
  1119. {
  1120. switch(APlayState)
  1121. {
  1122. case Ffbasecomponent::psPlay:
  1123. case Ffbasecomponent::psResume:
  1124. break;
  1125. case Ffbasecomponent::psPause:
  1126. case Ffbasecomponent::psStep:
  1127. break;
  1128. case Ffbasecomponent::psStop:
  1129. if (FFPlayer1->ScreenHandle != NULL)
  1130. {
  1131. PostMessage(FFPlayer1->ScreenHandle, CM_INVALIDATE, 0, 0);
  1132. UpdateWindow(FFPlayer1->ScreenHandle);
  1133. }
  1134. break;
  1135. case Ffbasecomponent::psEnd:
  1136. {
  1137. FFPlayer1->Stop(true);
  1138. //FFPlayer1->Seek((__int64)0, TSeekFlags()<<sfBackward);
  1139. }
  1140. break;
  1141. }
  1142. }
  1143. //---------------------------------------------------------------------------
  1144. void __fastcall TFrmVmsMsgSymbMngr::TrackBarChange(TObject *Sender)
  1145. {
  1146. if (!FTrackChanging && !IsMouseDown())
  1147. {
  1148. FFPlayer1->Seek(FDuration * TrackBar->Position / TrackBar->Max);
  1149. }
  1150. }
  1151. //---------------------------------------------------------------------------
  1152. void __fastcall TFrmVmsMsgSymbMngr::BtnPlayClick(TObject *Sender)
  1153. {
  1154. BtnPlay->Enabled = false;
  1155. Application->ProcessMessages();
  1156. try {
  1157. if (FFPlayer1->ScreenHandle != NULL)
  1158. {
  1159. FFPlayer1->Stop(true);
  1160. PostMessage(FFPlayer1->ScreenHandle, CM_INVALIDATE, 0, 0);
  1161. UpdateWindow(FFPlayer1->ScreenHandle);
  1162. }
  1163. FFPlayer1->AspectRatio = ChkFitScreen->Checked ? -1 : 0;
  1164. FFPlayer1->TryOpen(CURR_LOCAL_FILE_NM, PnlPlayer->Handle);
  1165. Application->ProcessMessages();
  1166. }
  1167. catch(Exception &e)
  1168. {
  1169. }
  1170. BtnStop->Enabled = true;
  1171. BtnPause->Enabled = true;
  1172. FPlayStream = true;
  1173. ImgVideo->Visible = false;
  1174. }
  1175. //---------------------------------------------------------------------------
  1176. void __fastcall TFrmVmsMsgSymbMngr::BtnStopClick(TObject *Sender)
  1177. {
  1178. BtnStop->Enabled = false;
  1179. BtnPause->Enabled = false;
  1180. if (FFPlayer1->ScreenHandle != NULL) {
  1181. FFPlayer1->Stop(true);
  1182. }
  1183. BtnPlay->Enabled = true;
  1184. FPlayStream = false;
  1185. ImgVideo->Visible = true;
  1186. }
  1187. //---------------------------------------------------------------------------
  1188. void __fastcall TFrmVmsMsgSymbMngr::BtnPauseClick(TObject *Sender)
  1189. {
  1190. try
  1191. {
  1192. if (FFPlayer1->ScreenHandle != NULL)
  1193. {
  1194. FFPlayer1->TogglePause();
  1195. }
  1196. Application->ProcessMessages();
  1197. }
  1198. catch(Exception &e)
  1199. {
  1200. }
  1201. }
  1202. //---------------------------------------------------------------------------
  1203. void __fastcall TFrmVmsMsgSymbMngr::ChkFitScreenClick(TObject *Sender)
  1204. {
  1205. FFPlayer1->AspectRatio = ChkFitScreen->Checked ? -1 : 0;
  1206. }
  1207. //---------------------------------------------------------------------------
  1208. TImage* __fastcall TFrmVmsMsgSymbMngr::GetPreviewSymb(String ASymbType)
  1209. {
  1210. TImage *imagSymb = NULL;
  1211. if (ASymbType == SBT_GENERAL) {
  1212. imagSymb = ImgGeneral;
  1213. }
  1214. else if (ASymbType == SBT_TRAFFIC) {
  1215. imagSymb = ImagTraffic;
  1216. }
  1217. else if (ASymbType == SBT_ATMP) {
  1218. imagSymb = ImagAtmp;
  1219. }
  1220. else if (ASymbType == SBT_WEATHER) {
  1221. imagSymb = ImagWeather;
  1222. }
  1223. else if (ASymbType == SBT_INCIDENT) {
  1224. imagSymb = ImagIncident;
  1225. }
  1226. else if (ASymbType == SBT_VIDEO) {
  1227. imagSymb = ImgVideo;
  1228. }
  1229. else if (ASymbType == SBT_TRAFBAK) {
  1230. imagSymb = ImagTrafBack;
  1231. }
  1232. return imagSymb;
  1233. }
  1234. //---------------------------------------------------------------------------
  1235. void __fastcall TFrmVmsMsgSymbMngr::ImagTrafficMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
  1236. {
  1237. if (!FNewDb) return;
  1238. ImageClear(ImagTraffic1);
  1239. ImageClear(ImagTraffic2);
  1240. ImageClear(ImagTraffic3);
  1241. ImagTraffic1->Picture->Bitmap->Assign(ImagTraffic->Picture->Bitmap);
  1242. ImagTraffic2->Picture->Bitmap->Assign(ImagTraffic->Picture->Bitmap);
  1243. ImagTraffic3->Picture->Bitmap->Assign(ImagTraffic->Picture->Bitmap);
  1244. TColor FOldColor = ImagTraffic->Picture->Bitmap->Canvas->Pixels[X][Y];
  1245. ImagTraffic1->Picture->Bitmap->Canvas->Brush->Color = clLime;
  1246. ImagTraffic1->Picture->Bitmap->Canvas->FloodFill(X, Y, FOldColor, fsSurface);
  1247. ImagTraffic2->Picture->Bitmap->Canvas->Brush->Color = clYellow;
  1248. ImagTraffic2->Picture->Bitmap->Canvas->FloodFill(X, Y, FOldColor, fsSurface);
  1249. ImagTraffic3->Picture->Bitmap->Canvas->Brush->Color = clRed;
  1250. ImagTraffic3->Picture->Bitmap->Canvas->FloodFill(X, Y, FOldColor, fsSurface);
  1251. }
  1252. //---------------------------------------------------------------------------
  1253. void __fastcall TFrmVmsMsgSymbMngr::ImageClear(TImage *AImage)
  1254. {
  1255. AImage->Picture->Bitmap->FreeImage();
  1256. AImage->Picture->Bitmap->ReleaseHandle();
  1257. AImage->Picture->Assign(NULL);
  1258. AImage->Repaint();
  1259. AImage->Invalidate();
  1260. }
  1261. //---------------------------------------------------------------------------
  1262. void __fastcall TFrmVmsMsgSymbMngr::BtnSubImageSelectClick(TObject *Sender)
  1263. {
  1264. #if 0
  1265. TcxButton *pBtn = (TcxButton*)Sender;
  1266. FSelImag = NULL;
  1267. switch(pBtn->Tag) {
  1268. case 10: FSelImag = ImagAtmp1; break;
  1269. case 11: FSelImag = ImagAtmp2; break;
  1270. case 12: FSelImag = ImagAtmp3; break;
  1271. case 13: FSelImag = ImagAtmp4; break;
  1272. case 20: FSelImag = ImagWeather1; break;
  1273. case 21: FSelImag = ImagWeather2; break;
  1274. case 22: FSelImag = ImagWeather3; break;
  1275. case 23: FSelImag = ImagWeather4; break;
  1276. case 30: FSelImag = ImagIncident1; break;
  1277. case 31: FSelImag = ImagIncident2; break;
  1278. case 32: FSelImag = ImagIncident3; break;
  1279. case 33: FSelImag = ImagIncident4; break;
  1280. default: return;
  1281. }
  1282. OpenSubImag->DefaultExt = OpenBmp->DefaultExt;
  1283. OpenSubImag->Filter = OpenBmp->Filter;
  1284. OpenSubImag->InitialDir = OpenBmp->InitialDir;
  1285. OpenSubImag->Title = FTitle;
  1286. OpenSubImag->FileName = "";
  1287. OpenSubImag->Execute();
  1288. #endif
  1289. }
  1290. //---------------------------------------------------------------------------
  1291. int __fastcall TFrmVmsMsgSymbMngr::CheckFormObjectUseCount(String AFORM_OBJ_ID)
  1292. {
  1293. String sQry;
  1294. TADOQuery *pADO = NULL;
  1295. int nResult = 0;
  1296. sQry = "SELECT COUNT(1) AS CNT \r\n"
  1297. " FROM TB_VMS_FORM_VMS_FORM_OBJ \r\n"
  1298. " WHERE VMS_FORM_OBJ_ID = :p01 \r\n";
  1299. try {
  1300. try {
  1301. pADO = new TADOQuery(NULL);
  1302. pADO->Close();
  1303. pADO->Connection = ITSDb_GetConnection();
  1304. ITSDb_SQLText(pADO, sQry);
  1305. ITSDb_SQLBind(pADO, "p01", AFORM_OBJ_ID);
  1306. ITSDb_SQLOpen(pADO);
  1307. nResult = pADO->FieldByName("CNT")->AsInteger;
  1308. }
  1309. catch(EDatabaseError &E) {
  1310. DBERRORMSG("CheckFormObjectUseCount", String(E.ClassName()), E.Message, sQry);
  1311. return 1;
  1312. }
  1313. catch(Exception &e) {
  1314. DBERRORMSG("CheckFormObjectUseCount", String(e.ClassName()), e.Message, sQry);
  1315. return 1;
  1316. }
  1317. }
  1318. __finally {
  1319. if (pADO) {
  1320. pADO->Close();
  1321. delete pADO;
  1322. }
  1323. }
  1324. return nResult;
  1325. }
  1326. //---------------------------------------------------------------------------