FrmVmsOprMainF.cpp 61 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966
  1. /****************************************************************************
  2. * @source : FrmVmsOprMainF.cpp
  3. * @description : 어플리케이션 메인폼
  4. ****************************************************************************
  5. * DATE AUTHOR DESCRIPTION
  6. * --------------------------------------------------------------------------
  7. * 2011/11/22 정승호 최초작성
  8. *
  9. ****************************************************************************/
  10. //---------------------------------------------------------------------------
  11. #include <vcl.h>
  12. #include "ITSSkinF.h"
  13. #include "ITSUtilF.h"
  14. #include "ITSLangTransF.h"
  15. #pragma hdrstop
  16. #include "FrmVmsOprMainF.h"
  17. #include "TThreadPollingF.h"
  18. #include "FrmInitializeF.h" // 프로그램 초기화화면
  19. //#include "CDSVmsTrafficF.h"
  20. //---------------------------------------------------------------------------
  21. #include "VMS0500MF.h"
  22. #include "VMS0100MF.h"
  23. #include "VMS0200MF.h"
  24. #include "VMS0300MF.h"
  25. #include "VMS0400MF.h"
  26. #include "VMS0600MF.h"
  27. #include "VMS0000MF.h"
  28. #include "VMSM100MF.h"
  29. #include "VMSM200MF.h"
  30. #include "VMSM210MF.h"
  31. #include "VMSM400MF.h"
  32. #include "VMSM410MF.h"
  33. #include "VMSM420MF.h"
  34. #include "VMSM500MF.h"
  35. #include "VMSM600MF.h"
  36. #include "VMSM700MF.h"
  37. #include "VMSM800MF.h"
  38. #include "VMSM900MF.h"
  39. //---------------------------------------------------------------------------
  40. #ifndef ULONG_PTR
  41. #define ULONG_PTR unsigned long *
  42. #endif
  43. #include <stdio.h>
  44. #include <string.h>
  45. #include <list>
  46. #include <map>
  47. #define STRICT
  48. #include <windows.h>
  49. #include <algorithm>
  50. using std::min;
  51. using std::max;
  52. #include "gdiplus.h"
  53. #include "GdiplusBase.h" //항상 넣어 둔다.
  54. class CGdiPlusStarter
  55. {
  56. private:
  57. ULONG_PTR m_gpToken;
  58. public:
  59. bool m_bSuccess;
  60. CGdiPlusStarter()
  61. {
  62. ::CoInitialize(NULL);
  63. Gdiplus::GdiplusStartupInput gpsi;
  64. m_bSuccess = (Gdiplus::GdiplusStartup(&m_gpToken, &gpsi, NULL) == Gdiplus::Ok);
  65. }
  66. ~CGdiPlusStarter()
  67. {
  68. Gdiplus::GdiplusShutdown(m_gpToken);
  69. ::CoUninitialize();
  70. }
  71. };
  72. CGdiPlusStarter g_gps;
  73. //---------------------------------------------------------------------------
  74. #pragma package(smart_init)
  75. #pragma link "cxClasses"
  76. #pragma link "cxContainer"
  77. #pragma link "cxControls"
  78. #pragma link "cxEdit"
  79. #pragma link "cxGraphics"
  80. #pragma link "cxHint"
  81. #pragma link "cxLabel"
  82. #pragma link "cxLookAndFeelPainters"
  83. #pragma link "cxLookAndFeels"
  84. #pragma link "cxMaskEdit"
  85. #pragma link "cxPC"
  86. #pragma link "cxPCdxBarPopupMenu"
  87. #pragma link "cxSpinEdit"
  88. #pragma link "cxTextEdit"
  89. #pragma link "dxBar"
  90. #pragma link "dxCustomHint"
  91. #pragma link "dxRibbon"
  92. #pragma link "dxRibbonGallery"
  93. #pragma link "dxRibbonSkins"
  94. #pragma link "dxRibbonStatusBar"
  95. #pragma link "dxScreenTip"
  96. #pragma link "dxSkinBlack"
  97. #pragma link "dxSkinBlue"
  98. #pragma link "dxSkinCaramel"
  99. #pragma link "dxSkinChooserGallery"
  100. #pragma link "dxSkinCoffee"
  101. #pragma link "dxSkinDarkRoom"
  102. #pragma link "dxSkinDarkSide"
  103. #pragma link "dxSkinFoggy"
  104. #pragma link "dxSkinGlassOceans"
  105. #pragma link "dxSkiniMaginary"
  106. #pragma link "dxSkinLilian"
  107. #pragma link "dxSkinLiquidSky"
  108. #pragma link "dxSkinLondonLiquidSky"
  109. #pragma link "dxSkinMcSkin"
  110. #pragma link "dxSkinMoneyTwins"
  111. #pragma link "dxSkinOffice2007Black"
  112. #pragma link "dxSkinOffice2007Blue"
  113. #pragma link "dxSkinOffice2007Green"
  114. #pragma link "dxSkinOffice2007Pink"
  115. #pragma link "dxSkinOffice2007Silver"
  116. #pragma link "dxSkinOffice2010Black"
  117. #pragma link "dxSkinOffice2010Blue"
  118. #pragma link "dxSkinOffice2010Silver"
  119. #pragma link "dxSkinsCore"
  120. #pragma link "dxSkinscxPCPainter"
  121. #pragma link "dxSkinsdxBarPainter"
  122. #pragma link "dxSkinsdxRibbonPainter"
  123. #pragma link "dxSkinSeven"
  124. #pragma link "dxSkinsForm"
  125. #pragma link "dxSkinSharp"
  126. #pragma link "dxSkinSilver"
  127. #pragma link "dxSkinStardust"
  128. #pragma link "dxStatusBar"
  129. #pragma link "dxTabbedMDI"
  130. #pragma link "IdAntiFreeze"
  131. #pragma link "IdAntiFreezeBase"
  132. #pragma link "IdBaseComponent"
  133. #pragma resource "*.dfm"
  134. TFrmVmsOprMain *FrmVmsOprMain = NULL;
  135. #define MAX_EXEPROGRAM 5
  136. ST_RUNPROGRAM g_RunProgram[MAX_EXEPROGRAM+1] = {
  137. {"TFrmVmsLogStts", "VmsLogStts.exe", "VMS상태이력조회"},
  138. {"TFrmVmsLogMsg", "VmsLogMsg.exe", "VMS제공이력조회"},
  139. {"TFrmVmsLogCtl", "VmsLogCtl.exe", "VMS제어이력조회"},
  140. {"TFrmVmsLogDnld", "VmsLogDnld.exe", "VMS다운로드이력조회"},
  141. {"TFrmVmsCamViewer", "VmsCamViewer.exe", "VMS영상모니터링"},
  142. {"", "", ""},
  143. };
  144. //---------------------------------------------------------------------------
  145. __fastcall TFrmVmsOprMain::TFrmVmsOprMain(TComponent* Owner)
  146. : TdxCustomRibbonForm(Owner)//TdxCustomRibbonForm(Owner)//TForm(Owner)
  147. {
  148. FLogoutTick = 0;
  149. DoubleBuffered = true;
  150. g_AppCfg.lMainWinHandle = (long)Handle;
  151. StartJobThread();
  152. while(!PostJobMessage(WM_THREAD, WP_PING)) ;
  153. Application->OnException = OnAppException;
  154. ::CoInitialize(NULL);
  155. //Caption = g_AppCfg.sTitle;
  156. LangTrans->Translate(this, ITSDb_GetConnection());
  157. ITSSkin_Initialize(Application, g_AppCfg.sLang, false, false);
  158. ITSSkin_Menu(this);
  159. String sCaption = "";
  160. ReadConfigInfo(g_AppCfg.sConfigFile, "APPLICATION", "CAPTION", sCaption);
  161. ITSSkin_Caption(sCaption == "1" ? true : false);
  162. RVMSH400M->Visible = ivNever;
  163. TabVmsConfig->Visible = false;
  164. NVMSM300M->Visible = ivNever; //VMS정보제공축관리
  165. NVMSM310M->Visible = ivNever; //VMS정보제공축설정
  166. Ribbon->ShowTabGroups = true; // 메뉴탭 show/hide
  167. Ribbon->QuickAccessToolbar->Visible = false;
  168. //Ribbon->ApplicationButton->Visible = false;
  169. Ribbon->SupportNonClientDrawing = true;
  170. Ribbon->EnableTabAero = true;
  171. TabVmsSystem->Active = true;
  172. SetColorScheme(g_AppCfg.sSkinName);
  173. //SetColorScheme("Blue");
  174. CMM_SetFormPosition(g_AppCfg.bSaveForm);
  175. CMM_LoadForm(g_sFormsDir, this);
  176. FVmsServerState = vms_normal;
  177. TmrOnShow->Enabled = false;
  178. TmrAppState->Enabled = false;
  179. }
  180. //---------------------------------------------------------------------------
  181. LONG __stdcall HelperExceptionFilter(struct _EXCEPTION_POINTERS * pContext)
  182. {
  183. LONG lRet = EXCEPTION_EXECUTE_HANDLER;
  184. DWORD dwRet = ERROR_SUCCESS;
  185. __try
  186. {
  187. Application->NormalizeTopMosts();
  188. if (g_AppCfg.sLang == "kr")
  189. {
  190. Application->MessageBox(L"시스템에서 알수없는 오류가 발생했습니다.\r\n프로그램을 다시 기동해 주세요.",
  191. L"시스템 오류", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  192. }
  193. else
  194. {
  195. Application->MessageBox(L"The system encountered an unknown error.\r\nPlease re-start the program.",
  196. L"System error", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  197. }
  198. Application->RestoreTopMosts();
  199. //TerminateProcess(GetCurrentProcess(), 0);
  200. }
  201. __finally
  202. {
  203. if(ERROR_SUCCESS != dwRet)
  204. {
  205. lRet = EXCEPTION_CONTINUE_SEARCH;
  206. }
  207. exit(0);
  208. }
  209. return lRet;
  210. }
  211. //---------------------------------------------------------------------------
  212. /*
  213. * Form이 메모리에서 생성될때 호출되는 생성자 이벤트 핸들러
  214. * arguments
  215. * Sender : event handler 객체
  216. * return
  217. * void
  218. */
  219. void __fastcall TFrmVmsOprMain::FormCreate(TObject *Sender)
  220. {
  221. /* 레지스터리 등록 IE 최신버전 */
  222. String sExeName = ExtractFileName(Application->ExeName);
  223. UpdateExplorerEmulatorVersion(sExeName);
  224. //SetUnhandledExceptionFilter(HelperExceptionFilter);
  225. Application->ShowMainForm = false;
  226. try {
  227. Application->Icon->LoadFromResourceName(((unsigned int)HInstance), "MAINICON");
  228. } catch(...) { ShowMessage("LoadFromResourceName failed"); }
  229. //DeleteLogFiles((PTCHAR)g_sLogDir.c_str(), 30, (PTCHAR)"*.*");
  230. //WindowState = wsMaximized;
  231. // 종료조건이 있는경우..
  232. //Application->Terminate();
  233. //return;
  234. Application->ShowMainForm = true;
  235. Application->OnHint = OnAppHint;
  236. ImgAlarm->Visible = false;
  237. ImgAlarmNormal->Visible = true;
  238. }
  239. //---------------------------------------------------------------------------
  240. bool __fastcall TFrmVmsOprMain::UpdateExplorerEmulatorVersion(String AAppName)
  241. {
  242. TRegistry *reg = new TRegistry(KEY_READ|KEY_WRITE|KEY_WOW64_64KEY);
  243. if (reg == NULL) return false;
  244. String sKey = "SOFTWARE\\Wow6432Node\\Microsoft\\Internet Explorer\\MAIN\\FeatureControl\\FEATURE_BROWSER_EMULATION";
  245. reg->RootKey = HKEY_LOCAL_MACHINE;
  246. if (!reg->KeyExists(sKey))
  247. {
  248. //MessageDlg("Key not found! Created now.", mtInformation, TMsgDlgButtons() << mbOK, 0);
  249. bool bOpenKey = reg->CreateKey(sKey);
  250. //return false;
  251. }
  252. reg->Access = KEY_WRITE;
  253. bool openResult = reg->OpenKey(sKey, true);
  254. if(!openResult)
  255. {
  256. //MessageDlg("Unable to create key! Exiting.", mtError, TMsgDlgButtons() << mbOK, 0);
  257. return false;
  258. }
  259. if (!reg->KeyExists(AAppName))
  260. {
  261. reg->WriteInteger(AAppName, 10000);
  262. }
  263. reg->CloseKey();
  264. reg->Free();
  265. return true;
  266. }
  267. //---------------------------------------------------------------------------
  268. /*
  269. * Form을 보여줄때 호출되는 event 메서드이다.
  270. * arguments
  271. * Sender : event handler 객체
  272. * return
  273. * void
  274. */
  275. void __fastcall TFrmVmsOprMain::FormShow(TObject *Sender)
  276. {
  277. Application->ProcessMessages();
  278. g_AppCfg.lMainWinHandle = (long)Handle;
  279. /*
  280. * 프로그램 초기화 작업
  281. */
  282. InitStatusBar();
  283. if (g_pLOGIN)
  284. {
  285. GetUserMenuRight(g_pLOGIN->sUserId, g_pLOGIN->sUserRightId);
  286. }
  287. TmrOnShow->Enabled = true;
  288. }
  289. //---------------------------------------------------------------------------
  290. /*
  291. * 프로그램 기동후 최초에 수행된다.
  292. * arguments
  293. *
  294. * return
  295. * void
  296. */
  297. void __fastcall TFrmVmsOprMain::TmrOnShowTimer(TObject *Sender)
  298. {
  299. TmrOnShow->Enabled = false;
  300. Application->ProcessMessages();
  301. //폴링작업 객체 초기화
  302. FPollTraffic.Cycle = (60*1000*2)+11; // 정보제공구간소통정보
  303. FPollVmsMsg.Cycle = (60*1000*2)+15; // VMS Message
  304. FPollVmsState.Cycle = (60*1000*2)+ 1; // 시설물상태정보
  305. FPollPrcsState.Cycle = (60*1000*2)+ 3; // 프로세스상태정보
  306. FPollIncident.Cycle = (60*1000*2)+ 5; // 돌발정보
  307. FPollTraffic.IsPolling = true;
  308. FPollVmsMsg.IsPolling = true;
  309. FPollVmsState.IsPolling = true;
  310. FPollPrcsState.IsPolling = true;
  311. FPollIncident.IsPolling = true;
  312. TFrmInitialize *FrmInitialize = new TFrmInitialize(this);
  313. FrmInitialize->FThreadId = g_AppCfg.thr.dwThreadId;
  314. FrmInitialize->ShowModal();
  315. UpdateVmsCommStatus(true);
  316. int nPort = 4602;
  317. TItsProcess *pPrcs = ItsProcessManager->FLists.Find(g_AppCfg.sProcessId);
  318. if (!pPrcs)
  319. {
  320. if (g_AppCfg.sLang == "kr")
  321. {
  322. Application->MessageBox(L"통신프로세스를 초기화 하지 못하였습니다.\r\n환경설정에서 시스템ID를 확인하세요.\r\n프로그램을 종료합니다.",
  323. L"프로그램 통신오류_1", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  324. }
  325. else
  326. {
  327. Application->MessageBox(L"Failed to initialize communication process.\r\nPlease check your system ID in preferences.\r\nExit the program.",
  328. L"Program communication error_1", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  329. }
  330. g_AppCfg.bAppClose = true;
  331. Close();
  332. return;
  333. }
  334. nPort = pPrcs->PRGM_PORT.ToIntDef(4602);
  335. nPort += 1; //VMS운영단말은 DB에 저장되어 있지 않기 때문에 포트번호를 1 증가시켜 통신한다.
  336. int nResult = VComm_Initialize((long)Handle, g_AppCfg.sProcessId, "UOT", nPort, g_AppCfg.sLogDay);
  337. if (VERR_NONE != nResult)
  338. {
  339. if (g_AppCfg.sLang == "kr")
  340. {
  341. Application->MessageBox(L"통신프로세스를 초기화 하지 못하였습니다.\r\n환경설정에서 시스템ID를 확인하세요.\r\n프로그램을 종료합니다.",
  342. L"프로그램 통신오류_1", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  343. }
  344. else
  345. {
  346. Application->MessageBox(L"Failed to initialize communication process.\r\nPlease check your system ID in preferences.\r\nExit the program.",
  347. L"Program communication error_1", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  348. }
  349. g_AppCfg.bAppClose = true;
  350. Close();
  351. return;
  352. }
  353. FOR_STL(TItsProcess*, pObj, ItsProcessManager->FLists)
  354. {
  355. if (pObj->DEL_YN == "Y") continue;
  356. AnsiString sProcessId = AnsiString(pObj->SYST_ID);
  357. AnsiString sSystemTp = AnsiString(pObj->SYST_TYPE);
  358. AnsiString sIpAddress = AnsiString(pObj->SYST_IP_1);
  359. AnsiString sUdpPort = AnsiString(pObj->PRGM_PORT);
  360. if (VComm_AddProcess(sProcessId, sSystemTp, sIpAddress, sUdpPort) >= 0)
  361. {
  362. if ("UOT" == sSystemTp)
  363. {
  364. nPort = sUdpPort.ToIntDef(0);
  365. VComm_AddProcess(sProcessId, sSystemTp, sIpAddress, AnsiString(nPort+1));
  366. }
  367. }
  368. }
  369. if (VERR_NONE != VComm_Open())
  370. {
  371. if (g_AppCfg.sLang == "kr")
  372. {
  373. Application->MessageBox(L"통신프로세스를 초기화 하지 못하였습니다.\r\n환경설정에서 시스템ID를 확인하세요.\r\n프로그램을 종료합니다.",
  374. L"프로그램 통신오류_3", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  375. }
  376. else
  377. {
  378. Application->MessageBox(L"Failed to initialize communication process.\r\nPlease check your system ID in preferences.\r\nExit the program.",
  379. L"Program communication error_3", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  380. }
  381. g_AppCfg.bAppClose = true;
  382. Close();
  383. return;
  384. }
  385. UpdateInterCommStatus(true);
  386. Application->ProcessMessages();
  387. ((TdxStatusBarTextPanelStyle*)dxStatusBar->Panels->Items[isbDb]->PanelStyle)->ImageIndex = ITSDb_IsOpen() ? 8 : 7;
  388. //TODO NITS0000MClick((TObject *)NITS0000M); //메인화면을 프로그램 기동과 동시에 호출하는 경우
  389. #if 0
  390. if (g_AppCfg.AutoLogout.LogoutExit)
  391. {
  392. Application->MessageBox(L"이전 프로그램은 자동로그아웃으로 종료되었습니다.\r\n프로그램을 실행합니다.",
  393. L"프로그램 실행정보", MB_OK|MB_ICONQUESTION|MB_APPLMODAL);
  394. }
  395. #endif
  396. g_AppCfg.AutoLogout.LogoutExit = false;
  397. TmrAppState->Enabled = true;
  398. TmrPolling->Enabled = true;
  399. TmrCommTimeout->Enabled = true;
  400. INT_VMS_STATE_REQ Req;
  401. memset((char*)&Req, 0x00, sizeof(Req));
  402. Req.Count = 0;
  403. Req.Type = vms_state_all;
  404. VComm_VmsStateReq(&Req);
  405. }
  406. //---------------------------------------------------------------------------
  407. /*
  408. * 작업스레드 생성
  409. * arguments
  410. *
  411. * return
  412. * void
  413. */
  414. bool __fastcall TFrmVmsOprMain::StartJobThread()
  415. {
  416. TThreadPolling *pPollingThread = new TThreadPolling(false);
  417. if (pPollingThread)
  418. {
  419. pPollingThread->OnTerminate = OnPollingThreadDone;
  420. g_AppCfg.thr.pThread = (TThread *)pPollingThread;
  421. g_AppCfg.thr.dwThreadId = pPollingThread->ThreadID;
  422. g_AppCfg.thr.nHandle = pPollingThread->Handle;
  423. //pPollingThread->Resume();
  424. return true;
  425. }
  426. return false;
  427. }
  428. //---------------------------------------------------------------------------
  429. /*
  430. * 작업스레드 종료
  431. * arguments
  432. *
  433. * return
  434. * void
  435. */
  436. void __fastcall TFrmVmsOprMain::TerminateJobThread()
  437. {
  438. if (g_AppCfg.thr.bRunning)
  439. {
  440. PostJobMessage(WM_THREAD, WM_QUIT);
  441. }
  442. Sleep(500);
  443. try
  444. {
  445. if (g_AppCfg.thr.bRunning)
  446. {
  447. TThreadPolling *pThread = (TThreadPolling *)g_AppCfg.thr.pThread;
  448. pThread->Terminate();
  449. //pThread->WaitFor();
  450. }
  451. g_AppCfg.thr.pThread = NULL;
  452. g_AppCfg.thr.dwThreadId = 0;
  453. g_AppCfg.thr.nHandle = 0;
  454. g_AppCfg.thr.bRunning = false;
  455. }
  456. catch(...)
  457. {
  458. }
  459. }
  460. //---------------------------------------------------------------------------
  461. /*
  462. * Form이 닫히기 전에 프로그램의 종료여부를 확인한다.
  463. * arguments
  464. *
  465. * return
  466. * void
  467. */
  468. void __fastcall TFrmVmsOprMain::FormCloseQuery(TObject *Sender, bool &CanClose)
  469. {
  470. // 폼이 닫히기 전에 수행해야 할 모뮬 기술
  471. // 프로그램 종료를 사용자가 확인할 수 있도록...
  472. if (!g_AppCfg.bAppClose)
  473. {
  474. #if 0
  475. String strMsg;
  476. strMsg = "";
  477. strMsg = "[ " + g_AppCfg.sTitle + " ]\r\n\n";
  478. strMsg+= FrmLang->cxLabel1->Caption;
  479. if(Application->MessageBox(strMsg.c_str(),
  480. FrmLang->cxLabel2->Caption.c_str(),
  481. MB_YESNO|MB_ICONQUESTION) == IDYES)
  482. {
  483. /*
  484. * 화면관련 작업을 못하도록 여기에 코드를 적자...
  485. */
  486. ITSDb_ApplicationTerm();
  487. g_AppCfg.bAppClose = true;
  488. }
  489. #else
  490. ITSDb_ApplicationTerm();
  491. g_AppCfg.bAppClose = true;
  492. #endif
  493. CanClose = false;
  494. }
  495. }
  496. //---------------------------------------------------------------------------
  497. /*
  498. * Form을 닫을때 호출되는 event 메서드
  499. * arguments
  500. * Sender : event handler 객체
  501. * Action : TCloseAction 객체
  502. * return
  503. * void
  504. */
  505. void __fastcall TFrmVmsOprMain::FormClose(TObject *Sender, TCloseAction &Action)
  506. {
  507. CommClose();
  508. Action = caFree;
  509. }
  510. //---------------------------------------------------------------------------
  511. /*
  512. * 닫기버튼 이나 x버튼 클릭시 공통으로 처리하는 로직이들어간다..
  513. * Form과 DataModule class를 delete시킨다.
  514. * arguments
  515. *
  516. * return
  517. * void
  518. */
  519. void __fastcall TFrmVmsOprMain::CommClose()
  520. {
  521. try
  522. {
  523. VComm_Close();
  524. CloseAllWindow();
  525. ITSSkin_Term();
  526. CMM_SaveForm(g_sFormsDir, this);
  527. WriteConfigInfo(g_AppCfg.sConfigFile, "APPLICATION", "LOGDAY", Now().FormatString("dd"));
  528. ::CoUninitialize();
  529. }
  530. catch(...)
  531. {
  532. }
  533. }
  534. //---------------------------------------------------------------------------
  535. /*
  536. * 열려있는 모든 Form Window들을 닫는다.
  537. * parameter
  538. * Sender : Event를 보낸 객체
  539. * return
  540. * None
  541. */
  542. void __fastcall TFrmVmsOprMain::CloseAllWindow()
  543. {
  544. int ii;
  545. if (g_AppCfg.bTermChildProg)
  546. {
  547. // 실행시킨 프로그램을 종료시킨다.
  548. for (ii = 0; ii < MAX_EXEPROGRAM; ii++)
  549. {
  550. if (g_RunProgram[ii].AClassName == "")
  551. continue;
  552. TermItsProgram(g_RunProgram[ii].AClassName, "");
  553. }
  554. }
  555. //실행중인 화면을 종료 시킨다.
  556. try {
  557. for (ii = 0; ii < Screen->FormCount; ii++)
  558. {
  559. if (Screen->Forms[ii] != this)
  560. {
  561. if (::IsWindow(Screen->Forms[ii]->Handle))
  562. {
  563. String sFormName = Screen->Forms[ii]->Name;
  564. if (sFormName == "ITSSkin") continue;
  565. if (sFormName == "FrmSkin") continue;
  566. if (sFormName == "FrmLang") continue;
  567. if (sFormName.SubString(1, 11) == "PlugInChart") continue;
  568. if (Screen->Forms[ii]->Owner == this ||
  569. Screen->Forms[ii]->Owner == Application)
  570. {
  571. Screen->Forms[ii]->Close();
  572. WaitForSingleObject(Screen->Forms[ii]->Handle, 500);
  573. }
  574. }
  575. }
  576. }
  577. } catch(...) {}
  578. }
  579. //---------------------------------------------------------------------------
  580. void __fastcall TFrmVmsOprMain::CloseChildWindow()
  581. {
  582. int ii;
  583. //실행중인 화면을 종료 시킨다.
  584. try {
  585. for (ii = 0; ii < Screen->FormCount; ii++)
  586. {
  587. if (Screen->Forms[ii] != this)
  588. {
  589. if (::IsWindow(Screen->Forms[ii]->Handle))
  590. {
  591. String sFormName = Screen->Forms[ii]->Name;
  592. if (sFormName == "ITSSkin") continue;
  593. if (sFormName == "FrmSkin") continue;
  594. if (sFormName == "FrmLang") continue;
  595. if (sFormName.SubString(1, 11) == "PlugInChart") continue;
  596. if (Screen->Forms[ii]->Owner == this ||
  597. Screen->Forms[ii]->Owner == Application ||
  598. Screen->Forms[ii]->FormStyle == fsMDIChild)
  599. {
  600. Screen->Forms[ii]->Close();
  601. WaitForSingleObject(Screen->Forms[ii]->Handle, 500);
  602. }
  603. }
  604. }
  605. }
  606. } catch(...) {}
  607. }
  608. //---------------------------------------------------------------------------
  609. /*
  610. * 매1초 마다 주기적으로 실행되는 타이머
  611. * arguments
  612. * Sender : event handler 객체
  613. * return
  614. * void
  615. */
  616. void __fastcall TFrmVmsOprMain::TmrAppStateTimer(TObject *Sender)
  617. {
  618. /*
  619. * 타이머가 1초간격으로 응용프로그램의 상태를 체크하고
  620. * 응용프로그램의 상태를 주기적으로 체크하여 필요한 조치를 수행한다.
  621. */
  622. if (g_AppCfg.bAppClose)
  623. {
  624. TmrAppState->Enabled = false;
  625. TmrPolling->Enabled = false;
  626. UserLogout(); // 로그아웃
  627. TerminateJobThread();
  628. ITSDb_Close();
  629. Close(); // 응용프로그램 종료
  630. }
  631. else
  632. {
  633. TmrAppState->Enabled = false;
  634. UpdateStatusBar();
  635. if (g_AppCfg.AutoLogout.Enabled)
  636. {
  637. FLogoutTick++;
  638. if (FLogoutTick > (g_AppCfg.AutoLogout.IntervalMin*60))
  639. {
  640. //자동로그아웃처리
  641. g_AppCfg.bAppClose = true;
  642. g_AppCfg.AutoLogout.LogoutExit = true;
  643. }
  644. }
  645. TmrAppState->Enabled = true;
  646. }
  647. }
  648. //---------------------------------------------------------------------------
  649. void __fastcall TFrmVmsOprMain::UpdateInterCommStatus(bool AOk)
  650. {
  651. int nImgIdx = 8;
  652. if (AOk == false) nImgIdx = 7;
  653. if (((TdxStatusBarTextPanelStyle*)dxStatusBar->Panels->Items[isbComm]->PanelStyle)->ImageIndex != nImgIdx)
  654. {
  655. ((TdxStatusBarTextPanelStyle*)dxStatusBar->Panels->Items[isbComm]->PanelStyle)->ImageIndex = nImgIdx;
  656. }
  657. }
  658. //---------------------------------------------------------------------------
  659. void __fastcall TFrmVmsOprMain::UpdateVmsCommStatus(bool ADb)
  660. {
  661. if (ADb)
  662. {
  663. FOR_STL(TItsProcess*, pPrcs, ItsProcessManager->FLists)
  664. {
  665. if (pPrcs->SYST_TYPE == "VMS")
  666. {
  667. if (pPrcs->FCommStatus == "1")
  668. {
  669. FVmsServerState = vms_normal;
  670. }
  671. else
  672. {
  673. FVmsServerState = vms_error;
  674. }
  675. break;
  676. }
  677. }
  678. }
  679. int nImgIdx = 8;
  680. if (FVmsServerState == vms_error) nImgIdx = 7;
  681. if (((TdxStatusBarTextPanelStyle*)dxStatusBar->Panels->Items[isbVmsComm]->PanelStyle)->ImageIndex != nImgIdx)
  682. {
  683. ((TdxStatusBarTextPanelStyle*)dxStatusBar->Panels->Items[isbVmsComm]->PanelStyle)->ImageIndex = nImgIdx;
  684. }
  685. }
  686. //---------------------------------------------------------------------------
  687. void __fastcall TFrmVmsOprMain::UpdateStatusBar()
  688. {
  689. try
  690. {
  691. dxStatusBar->Panels->Items[isbTime]->Text = Now().FormatString(STR_DATETIME);
  692. #if 0
  693. if (ITSDb_IsOpen())
  694. {
  695. if (((TdxStatusBarTextPanelStyle*)dxStatusBar->Panels->Items[isbDb]->PanelStyle)->ImageIndex != 8)
  696. ((TdxStatusBarTextPanelStyle*)dxStatusBar->Panels->Items[isbDb]->PanelStyle)->ImageIndex = 8;
  697. }
  698. else
  699. {
  700. if (((TdxStatusBarTextPanelStyle*)dxStatusBar->Panels->Items[isbDb]->PanelStyle)->ImageIndex != 7)
  701. ((TdxStatusBarTextPanelStyle*)dxStatusBar->Panels->Items[isbDb]->PanelStyle)->ImageIndex = 7;
  702. }
  703. #endif
  704. }
  705. catch(...)
  706. {
  707. }
  708. }
  709. //---------------------------------------------------------------------------
  710. void __fastcall TFrmVmsOprMain::DebugMsg(String AMsg)
  711. {
  712. dxStatusBar->Panels->Items[isbMsg]->Text = " " + AMsg;
  713. dxStatusBar->Panels->Items[isbMsg]->StatusBarControl->Refresh();
  714. TmrDebugHide->Enabled = false;
  715. TmrDebugHide->Enabled = true;
  716. LOGINFO(AnsiString(AMsg).c_str());
  717. }
  718. //---------------------------------------------------------------------------
  719. void __fastcall TFrmVmsOprMain::TmrDebugHideTimer(TObject *Sender)
  720. {
  721. dxStatusBar->Panels->Items[isbMsg]->Text = "";
  722. dxStatusBar->Panels->Items[isbMsg]->StatusBarControl->Refresh();
  723. TmrDebugHide->Enabled = false;
  724. }
  725. //---------------------------------------------------------------------------
  726. void __fastcall TFrmVmsOprMain::InitStatusBar()
  727. {
  728. try
  729. {
  730. dxStatusBar->Panels->Items[isbGisPos]->Text = "";
  731. dxStatusBar->Panels->Items[isbTime]->Text = Now().FormatString(STR_DATETIME);
  732. if (g_pLOGIN)
  733. {
  734. dxStatusBar->Panels->Items[isbUser]->Text = g_pLOGIN->sUserId;
  735. ((TdxStatusBarTextPanelStyle*)dxStatusBar->Panels->Items[isbUser]->PanelStyle)->ImageIndex = 9;
  736. }
  737. dxStatusBar->Panels->Items[isbHint]->Text = "";
  738. dxStatusBar->Panels->Items[isbMsg]->Text = "";
  739. UpdateStatusBar();
  740. }
  741. catch(...)
  742. {
  743. }
  744. }
  745. //---------------------------------------------------------------------------
  746. bool __fastcall TFrmVmsOprMain::GetUserMenuRight(String AUserId, String AUserRight)
  747. {
  748. String sQry;
  749. TADOQuery *pADO = NULL;
  750. try
  751. {
  752. sQry = "SELECT OPERSYST_MENU_ID \r\n"
  753. " FROM TB_GROP_MENU_ATHR \r\n"
  754. " WHERE ATHR_YN = 'N' \r\n"
  755. " AND GROP_ID = (SELECT GROP_ID \r\n"
  756. " FROM TB_USER_INFR \r\n"
  757. " WHERE USER_ID = :p01) \r\n";
  758. try
  759. {
  760. pADO = new TADOQuery(NULL);
  761. pADO->Close();
  762. pADO->Connection = ITSDb_GetConnection();
  763. ITSDb_SQLText(pADO, sQry);
  764. ITSDb_SQLBind(pADO, "p01", AUserId);
  765. ITSDb_SQLOpen(pADO);
  766. for( ; !pADO->Eof; pADO->Next())
  767. {
  768. String sMenuId = pADO->FieldByName("OPERSYST_MENU_ID")->AsString;
  769. try
  770. {
  771. int nCompnentCnt = this->ComponentCount;
  772. for (int ii = 0; ii < nCompnentCnt; ii++)
  773. {
  774. String sClassName = this->Components[ii]->ClassName();
  775. if(sClassName == "TdxBarLargeButton")
  776. {
  777. TdxBarLargeButton *pMenu = (TdxBarLargeButton *)this->Components[ii];
  778. if (pMenu->Name == sMenuId)
  779. {
  780. pMenu->Enabled = false;
  781. break;
  782. }
  783. }
  784. }
  785. }
  786. catch(...)
  787. {
  788. }
  789. }
  790. }
  791. catch (Exception &exception)
  792. {
  793. throw Exception(String(exception.ClassName()) + exception.Message);
  794. }
  795. catch (...)
  796. {
  797. //throw Exception("운영자권한정보 조회 중에 알수없는 오류가 발생하였습니다.");
  798. }
  799. }
  800. __finally
  801. {
  802. if (pADO)
  803. {
  804. pADO->Close();
  805. delete pADO;
  806. }
  807. }
  808. return true;
  809. }
  810. //---------------------------------------------------------------------------
  811. HWND __fastcall TFrmVmsOprMain::FindChildWindow(String sFormName)
  812. {
  813. int nFormCnt = Screen->FormCount;
  814. for (int ii = 0; ii < nFormCnt; ii++)
  815. {
  816. TForm *pForm = Screen->Forms[ii];
  817. String sTmpFormName = pForm->Name.SubString(1, sFormName.Length());
  818. if (sTmpFormName == sFormName)
  819. {
  820. return pForm->Handle;
  821. }
  822. }
  823. return NULL;
  824. }
  825. //---------------------------------------------------------------------------
  826. void __fastcall TFrmVmsOprMain::OnSkinClick(TObject *Sender)
  827. {
  828. TdxBarButton *pMenu = (TdxBarButton*)Sender;
  829. try {
  830. dxSkinController1->SkinName = pMenu->Caption;
  831. dxSkinController1->Refresh();
  832. //ITSSkin_SetName(dxSkinController1->SkinName);
  833. } catch(...) {}
  834. }
  835. //---------------------------------------------------------------------------
  836. void __fastcall TFrmVmsOprMain::TmrPollingTimer(TObject *Sender)
  837. {
  838. TmrPolling->Enabled = false;
  839. DWORD dwTick = GetTickCount();
  840. UpdateThreadStatus(true); //작업스레드 실행 확인
  841. // 프로세스상태정보
  842. if (FPollPrcsState.IsPolling && FPollPrcsState.IsPollingTime(dwTick))
  843. {
  844. FPollPrcsState.Polling = dwTick;
  845. PostJobMessage(WM_THREAD, WP_PARAM_TRAFFIC, LP_MSG_00);
  846. DebugMsg(">>> Process Status Request");//">>> 프로세스 상태 조회 요청");
  847. }
  848. // VMS상태정보
  849. if (FPollVmsState.IsPolling && FPollVmsState.IsPollingTime(dwTick))
  850. {
  851. FPollVmsState.Polling = dwTick;
  852. PostJobMessage(WM_THREAD, WP_PARAM_TRAFFIC, LP_MSG_01);
  853. DebugMsg(">>> VMS Status Request");//">>> VMS 상태 조회 요청");
  854. }
  855. // VMS Message
  856. if (FPollVmsMsg.IsPolling && FPollVmsMsg.IsPollingTime(dwTick))
  857. {
  858. FPollVmsMsg.Polling = dwTick;
  859. PostJobMessage(WM_THREAD, WP_PARAM_TRAFFIC, LP_MSG_02);
  860. DebugMsg(">>> VMS Display Message Request");//">>> VMS 표출메시지 조회 요청");
  861. }
  862. // 소통정보
  863. if (FPollTraffic.IsPolling && FPollTraffic.IsPollingTime(dwTick))
  864. {
  865. SetProcessWorkingSetSize(GetCurrentProcess(), -1, -1);
  866. FPollTraffic.Polling = dwTick;
  867. PostJobMessage(WM_THREAD, WP_PARAM_TRAFFIC, LP_MSG_03);
  868. DebugMsg(">>> Traffic Request");//">>> 소통정보 조회 요청");
  869. }
  870. // 돌발정보
  871. if (FPollIncident.IsPolling && FPollIncident.IsPollingTime(dwTick))
  872. {
  873. FPollIncident.Polling = dwTick;
  874. PostJobMessage(WM_THREAD, WP_PARAM_TRAFFIC, LP_MSG_05);
  875. DebugMsg(">>> Incident Request");//">>> 돌발정보 조회 요청");
  876. }
  877. if (!g_AppCfg.bAppClose) TmrPolling->Enabled = true;
  878. }
  879. //---------------------------------------------------------------------------
  880. /*
  881. * 작업스레드로 작업 메시지를 전송한다.
  882. * arguments
  883. *
  884. * return
  885. * void
  886. */
  887. bool __fastcall TFrmVmsOprMain::PostJobMessage(UINT nMsg, int WParam/*=0*/, int LParam/*=0*/)
  888. {
  889. int nRes;
  890. //if (g_AppCfg.bDebug) ITSUtil_Trace("PostJobMessage: Msg: %02X, WParam: %02X, LParam: %02X", nMsg, WParam, LParam);
  891. if (g_AppCfg.thr.dwThreadId)
  892. {
  893. for (int ii = 0; ii < 3; ii++)
  894. {
  895. if (PostThreadMessageW(g_AppCfg.thr.dwThreadId, nMsg, WParam, LParam))
  896. {
  897. nRes = 0;
  898. return true;
  899. }
  900. else
  901. {
  902. nRes = GetLastError();
  903. if (ERROR_INVALID_THREAD_ID == nRes)
  904. {
  905. Sleep(500);
  906. continue;
  907. }
  908. }
  909. }
  910. }
  911. return false;
  912. }
  913. //---------------------------------------------------------------------------
  914. void __fastcall TFrmVmsOprMain::dxSkinChooserGalleryItem1SkinChanged(TObject *Sender, const UnicodeString ASkinName)
  915. {
  916. g_AppCfg.sSkinName = ASkinName;
  917. WriteConfigInfo(g_AppCfg.sConfigFile, "APPLICATION", "SKINNAME", g_AppCfg.sSkinName);
  918. SetColorScheme(ASkinName);
  919. }
  920. //---------------------------------------------------------------------------
  921. void __fastcall TFrmVmsOprMain::SetColorScheme(String ASkinName)
  922. {
  923. Ribbon->ColorSchemeName = ASkinName;
  924. dxSkinController1->SkinName = ASkinName;
  925. dxSkinController1->Refresh();
  926. dxTabbedMDIManager1->LookAndFeel->SkinName = ASkinName;
  927. dxStatusBar->Invalidate();
  928. //Panel1->Color = Ribbon->ColorScheme->GetPartColor(rfspRibbonForm);
  929. //Ribbon.ColorSchemeName := AName;
  930. //SkinChooserSelectSkinName(AName);
  931. //Panel1.Color := Ribbon.ColorScheme.GetPartColor(rfspRibbonForm);
  932. //dxStatusBar.Invalidate;
  933. }
  934. //---------------------------------------------------------------------------
  935. void __fastcall TFrmVmsOprMain::ExecuteItsProgram(String AClassName, String AExeName, String AOption)
  936. {
  937. HWND hExeForm = FindWindow(AClassName.c_str(), NULL);
  938. if (hExeForm)
  939. {
  940. SetWindowPos(hExeForm, HWND_TOP, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE);
  941. }
  942. else
  943. {
  944. String sExeName = "";
  945. String sExeParam= "";
  946. //if (!ReadConfigInfo(g_AppCfg.sConfigFile, "PROGRAM", AOption, sExeName))
  947. {
  948. sExeName = AExeName;
  949. sExeParam= g_pLOGIN->sUserId;
  950. }
  951. ShellExecute(Handle, NULL, sExeName.c_str(), sExeParam.c_str(), NULL, SW_SHOWNORMAL);
  952. }
  953. }
  954. //---------------------------------------------------------------------------
  955. void __fastcall TFrmVmsOprMain::TermItsProgram(String AClassName, String AExeName)
  956. {
  957. HWND hExeForm = FindWindow(AClassName.c_str(), NULL);
  958. if (hExeForm)
  959. {
  960. POST_MSG(hExeForm, WM_CLOSE, 0, 0);
  961. }
  962. }
  963. //---------------------------------------------------------------------------
  964. /*
  965. * EXE 프로그램 실행시킴
  966. */
  967. void __fastcall TFrmVmsOprMain::OnRunProgramClick(TObject *Sender)
  968. {
  969. TdxBarLargeButton *pButton = (TdxBarLargeButton*)Sender;
  970. int nIdx = pButton->Tag;
  971. if (nIdx < 0 || nIdx >= MAX_EXEPROGRAM) return;
  972. if (g_RunProgram[nIdx].AClassName == "") return;
  973. ExecuteItsProgram(g_RunProgram[nIdx].AClassName, g_RunProgram[nIdx].AExeName, g_RunProgram[nIdx].AOption);
  974. }
  975. //---------------------------------------------------------------------------
  976. /*
  977. * Application Hint Display Event Handler
  978. * arguments
  979. *
  980. * return
  981. *
  982. */
  983. void __fastcall TFrmVmsOprMain::OnAppHint(TObject *Sender)
  984. {
  985. dxStatusBar->Panels->Items[isbHint]->Text = " " + Application->Hint;
  986. dxStatusBar->Panels->Items[isbHint]->StatusBarControl->Refresh();
  987. }
  988. //---------------------------------------------------------------------------
  989. /*
  990. * Application Exception Event Handler
  991. * arguments
  992. *
  993. * return
  994. *
  995. */
  996. void __fastcall TFrmVmsOprMain::OnAppException(TObject *Sender, Exception *exception)
  997. {
  998. if (g_AppCfg.bDebug) ITSUtil_Trace("OnAppException");
  999. String sClassName = (NULL != Sender) ? Sender->ClassName() : String("Unknown_Class");
  1000. String sErrMsg = (NULL != exception) ? exception->Message : String("Unknown_Error");
  1001. String sError = sClassName + " : " + sErrMsg;
  1002. //Application->ShowException(&exception);
  1003. Application->NormalizeTopMosts();
  1004. Application->MessageBox(sError.c_str(), L"System Error", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  1005. Application->RestoreTopMosts();
  1006. }
  1007. //---------------------------------------------------------------------------
  1008. void __fastcall TFrmVmsOprMain::UpdateThreadStatus(bool ARequest, bool APing/*=true*/)
  1009. {
  1010. return;
  1011. try
  1012. {
  1013. if (APing) if (ARequest) PostJobMessage(WM_THREAD, WP_PING);
  1014. ((TdxStatusBarTextPanelStyle*)dxStatusBar->Panels->Items[isbStatus]->PanelStyle)->ImageIndex = ARequest ? 7 : 8;
  1015. dxStatusBar->Panels->Items[isbDb]->StatusBarControl->Refresh();
  1016. }
  1017. catch(...)
  1018. {
  1019. }
  1020. }
  1021. //---------------------------------------------------------------------------
  1022. void __fastcall TFrmVmsOprMain::UpdateDbStatus(bool ASelect)
  1023. {
  1024. try
  1025. {
  1026. ((TdxStatusBarTextPanelStyle*)dxStatusBar->Panels->Items[isbDb]->PanelStyle)->ImageIndex = ASelect ? 7 : 8;
  1027. dxStatusBar->Panels->Items[isbDb]->StatusBarControl->Refresh();
  1028. }
  1029. catch(...)
  1030. {
  1031. }
  1032. }
  1033. //---------------------------------------------------------------------------
  1034. /*
  1035. * Application Event Message Handler
  1036. * arguments
  1037. *
  1038. * return
  1039. *
  1040. */
  1041. void __fastcall TFrmVmsOprMain::ApplicationEvents1Message(tagMSG &Msg, bool &Handled)
  1042. {
  1043. switch(Msg.message)
  1044. {
  1045. case WM_THREAD:
  1046. switch(Msg.wParam)
  1047. {
  1048. case WP_PING:
  1049. UpdateThreadStatus(false); //스레드 핑 확인
  1050. break;
  1051. case WP_PARAM_TRAFFIC:
  1052. break;
  1053. case WP_DB_SELECT_START:
  1054. UpdateDbStatus(true);
  1055. break;
  1056. case WP_DB_SELECT_OK:
  1057. case WP_DB_SELECT_ERROR:
  1058. case WP_DB_SELECT_CANCEL:
  1059. UpdateDbStatus(false);
  1060. if (Msg.wParam == WP_DB_SELECT_OK)
  1061. {
  1062. OnRefreshMessage(Msg.wParam, Msg.lParam);
  1063. }
  1064. break;
  1065. }
  1066. break;
  1067. #if 0
  1068. case WM_VCOMMDATA_RECV:
  1069. OnUdpDataRecvMessage(Msg);
  1070. UpdateInterCommStatus(true);
  1071. break;
  1072. #endif
  1073. case WM_DATABASE_REFRESH:
  1074. OnDatabaseMessage(Msg.wParam, Msg.lParam);
  1075. break;
  1076. case WM_PLUGINFORM:
  1077. OnRefreshMessage(Msg.wParam, Msg.lParam);
  1078. break;
  1079. case WM_MOUSEMOVE:
  1080. case WM_KEYDOWN:
  1081. case WM_KEYUP:
  1082. FLogoutTick = 0;
  1083. break;
  1084. }
  1085. }
  1086. //---------------------------------------------------------------------------
  1087. void __fastcall TFrmVmsOprMain::OnRefreshMessage(WPARAM AWParam, LPARAM ALParam)
  1088. {
  1089. HWND hWnd;
  1090. if (AWParam == WP_DB_SELECT_OK)
  1091. {
  1092. DWORD dwTick = GetTickCount();
  1093. switch(ALParam)
  1094. {
  1095. case LP_MSG_00: DebugMsg("<<< Process Status Request Completed."/*"<<< 프로세스 상태 조회 완료"*/); FPollPrcsState.Polling = dwTick; break;
  1096. case LP_MSG_01: DebugMsg("<<< VMS Status Request Completed."/*"<<< VMS 상태 조회 완료"*/); FPollVmsState.Polling = dwTick; break;
  1097. case LP_MSG_02: DebugMsg("<<< VMS Display Message Request Completed."/*"<<< VMS 표출메시지 조회 완료"*/); FPollVmsMsg.Polling = dwTick; break;
  1098. case LP_MSG_03: DebugMsg("<<< Traffic Request Completed."/*"<<< 소통정보 조회 완료"*/); FPollTraffic.Polling = dwTick; break;
  1099. case LP_MSG_05: DebugMsg("<<< Incident Request Completed."/*"<<< 돌발정보 조회 완료"*/); FPollIncident.Polling = dwTick; break;
  1100. }
  1101. if (ALParam == LP_MSG_00)
  1102. {
  1103. UpdateVmsCommStatus(true);
  1104. }
  1105. else
  1106. if (ALParam == LP_MSG_02)
  1107. {
  1108. RefreshVmsMessage(WM_VMS_FORM_REFRESH);
  1109. }
  1110. else
  1111. if (ALParam == LP_MSG_05)
  1112. {
  1113. RefreshVmsMessage(WM_VMS_INCIDENT_REFRESH);
  1114. }
  1115. else
  1116. {
  1117. RefreshVmsMessage(WM_VMS_STATE_REFRESH);
  1118. }
  1119. #if 0
  1120. if (NVMS0000M->Enabled)
  1121. {
  1122. hWnd = FindChildWindow("VMS0000M");
  1123. if (hWnd) POST_MSG(hWnd, WM_MAINFORM, AWParam, ALParam);
  1124. }
  1125. #endif
  1126. #if 0
  1127. if (ALParam == LP_MSG_11)
  1128. {
  1129. //시설물 상태정보 업데이트
  1130. ShowFacilityStatus();
  1131. }
  1132. #endif
  1133. }
  1134. else
  1135. {
  1136. LOGERROR("DB Thread failed: %02X[%02X]", ALParam, AWParam);
  1137. }
  1138. }
  1139. //---------------------------------------------------------------------------
  1140. void __fastcall TFrmVmsOprMain::OnDatabaseMessage(WPARAM AWParam, LPARAM ALParam)
  1141. {
  1142. #if 0
  1143. HWND hWnd;
  1144. switch(AWParam)
  1145. {
  1146. case WP_MSG_01: //소통등급변경
  1147. case WP_MSG_02: //돌발정보변경(오보/등록/해제)
  1148. if (NITS0000M->Enabled)
  1149. {
  1150. hWnd = FindChildWindow("ITS0000M");
  1151. if (hWnd) POST_MSG(hWnd, WM_MAINFORM, AWParam, ALParam);
  1152. }
  1153. break;
  1154. case WP_MSG_03: //시설물 정보 변경
  1155. PostJobMessage(WM_THREAD, WP_PARAM_TRAFFIC, LP_MSG_14);
  1156. //hWnd = FindChildWindow("ITS0000M");
  1157. //if (hWnd) POST_MSG(hWnd, WM_MAINFORM, AWParam, ALParam);
  1158. break;
  1159. case WP_MSG_04: // IDB0070M-휴일정보
  1160. case WP_MSG_05: // FrmLinkGradeSet-구간등급변경
  1161. case WP_MSG_06: // IDB0060M - 소통등급
  1162. case WP_MSG_07: // IDB0050M -교통파라미터
  1163. //NodeLinkChangeReq(AnsiString("UTP01")); //통합교통정보가공시스템으로 정보변경 내용을 전송
  1164. break;
  1165. case WP_MSG_09: // IDB0100M
  1166. PostJobMessage(WM_THREAD, WP_PARAM_TRAFFIC, LP_MSG_09); //작업스레드에서 읽어 처리하도록 한다.
  1167. break;
  1168. case WP_MSG_14: // DSRM010M -DSRC-RSE 관리
  1169. PostJobMessage(WM_THREAD, WP_PARAM_TRAFFIC, LP_MSG_14); //작업스레드에서 읽어 처리하도록 한다.
  1170. break;
  1171. default:
  1172. LOGERROR("Unknown Database Msg: %02X[%02X]", ALParam, AWParam);
  1173. break;
  1174. }
  1175. #endif
  1176. }
  1177. //---------------------------------------------------------------------------
  1178. void __fastcall TFrmVmsOprMain::OnUdpDataRecvMessage(TMessage &Msg)
  1179. {
  1180. int nResult;
  1181. IPCUDPMESSAGESTRUCT *RcvData = (IPCUDPMESSAGESTRUCT*)Msg.LParam;
  1182. INT_SENDER *Sender = &RcvData->Sender;
  1183. INT_PACKET *Pkt = &RcvData->Pkt;
  1184. INT_HEAD *head = &Pkt->head;
  1185. INT_DATA *data = &Pkt->data;
  1186. char *pData = &data->Data[2];
  1187. BYTE OpCode = (BYTE)data->Data[0];
  1188. LOGINFO("*** OPR Client Req: %s.%d", VComm_ulong2ip(Sender->IP), Sender->Port);
  1189. String sMsg = "";
  1190. String sVmsNmbr = "";
  1191. TmrCommTimeout->Enabled = false;
  1192. //FVmsServerState = vms_normal;
  1193. UpdateVmsCommStatus(false);
  1194. UpdateInterCommStatus(true);
  1195. if (head->OPCode == INT_OP_COMM_COMMON)
  1196. {
  1197. switch(OpCode)
  1198. {
  1199. case INT_OP_PG_STATE_RES:
  1200. {
  1201. DebugMsg("*** VMS Process Stauts Recvieved");//"*** VMS 프로세스 상태정보 수신");
  1202. INT_PG_STATE_RES *ARes = (INT_PG_STATE_RES*)pData;
  1203. for (int ii = 0; ii < ARes->Count && ii < INT_MAX_PG_STATE; ii++)
  1204. {
  1205. if (ARes->Unit[ii].Type == INT_ID_VMS_SERVER)
  1206. {
  1207. FVmsServerState = ARes->Unit[ii].Action;
  1208. UpdateVmsCommStatus(false);
  1209. FPollPrcsState.Polling = GetTickCount(); //프로세스상태정보 조회 타이머 리셋
  1210. break;
  1211. }
  1212. }
  1213. }
  1214. break;
  1215. case INT_OP_VMS_STATE_RES:
  1216. {
  1217. char szVmsNmbr[INT_VMS_MAX_ID+1];
  1218. INT_VMS_STATE_RES *ARes = (INT_VMS_STATE_RES*)pData;
  1219. sMsg = "";
  1220. //sMsg.printf(L"*** VMS 제어기 상태정보 수신: %d EA", ARes->Count);
  1221. sMsg.printf(L"*** VMS Controller Status Received: %d EA", ARes->Count);
  1222. DebugMsg(sMsg);
  1223. for (int ii = 0; ii < ARes->Count && ii < INT_MAX_VMS_STATE; ii++)
  1224. {
  1225. sMsg = "";
  1226. String sVmsNmbr;
  1227. INT_VMS_STATE *pVms = &ARes->Unit[ii];
  1228. sprintf(szVmsNmbr, "%.*s", INT_VMS_MAX_ID, (char*)pVms->VmsId);
  1229. sVmsNmbr = String(szVmsNmbr);
  1230. TVmsCtlr *pObj = VmsManager->FLists.Find(sVmsNmbr);
  1231. if (pObj)
  1232. {
  1233. VmsStatusCopy(&pObj->WSTATE, pVms);
  1234. if (pObj->WSTATE.OprMode == 'A') pObj->OPER_MODE = "A";
  1235. else if (pObj->WSTATE.OprMode == 'B') pObj->OPER_MODE = "B";
  1236. else pObj->OPER_MODE = "F";
  1237. //pObj->VMS_PHSE_CHNG_CYCL = pObj->WSTATE.ScheduledMessageOperatingTime;
  1238. pObj->VMS_CMNC_ERR_BASS_VAL = pObj->WSTATE.ModuleOperatingTemperature;
  1239. pObj->FAN_MTNS_TMPR = pObj->WSTATE.FanOperatingTemperature;
  1240. pObj->HETR_MTNS_TMPR = pObj->WSTATE.HeaterOperatingTemperature;
  1241. pObj->VMS_MODL_ERR_RATE = pObj->WSTATE.ModuleBasicFailureRate;
  1242. pObj->CheckRunState();
  1243. if (pObj->WSTATE.Comm != vms_normal)
  1244. {
  1245. pObj->VmsMsg->OFFER_YN = false;
  1246. }
  1247. }
  1248. else
  1249. {
  1250. sMsg.printf(L"INT_OP_VMS_STATE_RES VMS not found: %s", sVmsNmbr.c_str());
  1251. DebugMsg(sMsg);
  1252. }
  1253. }
  1254. RefreshVmsMessage(WM_VMS_STATE_REFRESH);
  1255. FPollVmsState.Polling = GetTickCount();
  1256. }
  1257. break;
  1258. case INT_OP_VMS_FORM_SAVE:
  1259. {
  1260. FPollVmsMsg.Reset(); //VMS메시지 조회 타이머 리셋
  1261. char szDateTime[INT_VMS_MAX_DATETIME+1];
  1262. INT_VMS_FORM_SAVE_REQ *AReq = (INT_VMS_FORM_SAVE_REQ*)pData;
  1263. sprintf(szDateTime, "%.*s", INT_VMS_MAX_DATETIME, (char*)AReq->Date);
  1264. String sDateTime = String(szDateTime);
  1265. sMsg = "";
  1266. //sMsg.printf(L"*** VMS 폼생성 완료 메시지 수신: %s", sDateTime.c_str());
  1267. sMsg.printf(L"*** VMS Form Create Message Received: %s", sDateTime.c_str());
  1268. DebugMsg(sMsg);
  1269. }
  1270. break;
  1271. case INT_OP_VMS_FORM_DOWNLOAD:
  1272. {
  1273. char szDateTime[INT_VMS_MAX_DATETIME+1];
  1274. char szVmsNmbr[INT_VMS_MAX_ID+1];
  1275. INT_VMS_FORM_DOWNLOAD_REQ *AReq = (INT_VMS_FORM_DOWNLOAD_REQ*)pData;
  1276. //sMsg.printf(L"*** VMS 폼 다운로드 메시지 수신: %d EA", AReq->Count);
  1277. sMsg.printf(L"*** VMS Form Download Recieved: %d EA", AReq->Count);
  1278. DebugMsg(sMsg);
  1279. for (int ii = 0; ii < AReq->Count && ii < INT_MAX_VMS_FORM_DOWNLOAD; ii++)
  1280. {
  1281. sMsg = "";
  1282. INT_VMS_FORM_DOWNLOAD *pVms = &AReq->Unit[ii];
  1283. sprintf(szVmsNmbr, "%.*s", INT_VMS_MAX_ID, (char*)pVms->VmsId);
  1284. sprintf(szDateTime, "%.*s", INT_VMS_MAX_DATETIME, (char*)pVms->Date);
  1285. sVmsNmbr = String(szVmsNmbr);
  1286. String sDateTime = String(szDateTime);
  1287. TVmsCtlr *pObj = VmsManager->FLists.Find(sVmsNmbr);
  1288. if (pObj)
  1289. {
  1290. bool bDnLd = (pVms->Result == vms_download_succ) ? true : false;
  1291. String sResult = bDnLd ? "Succ" : "Fail";
  1292. pObj->VmsMsg->OFFER_DT = sDateTime;
  1293. pObj->VmsMsg->OFFER_YN = bDnLd;
  1294. for (int kk = 0; kk < pObj->VmsMsg->Total && kk < INT_MAX_VMS_FORM; kk++)
  1295. {
  1296. pObj->VmsMsg->PHASE[kk].DNLD_YN = bDnLd ? "Y" : "N";
  1297. }
  1298. //sMsg.printf(L"*** ===> VMS Msg download: %s, %s", pObj->VMS_CTLR_ID.c_str(), sResult.c_str());
  1299. //DebugMsg(sMsg);
  1300. }
  1301. else
  1302. {
  1303. sMsg.printf(L"*** INT_OP_VMS_FORM_DOWNLOAD VMS not found: %s", sVmsNmbr.c_str());
  1304. DebugMsg(sMsg);
  1305. }
  1306. }
  1307. RefreshVmsMessage(WM_VMS_STATE_REFRESH);
  1308. RefreshVmsMessage(WM_VMS_FORM_REFRESH);
  1309. }
  1310. break;
  1311. }
  1312. }
  1313. TmrCommTimeout->Enabled = true;
  1314. }
  1315. //---------------------------------------------------------------------------
  1316. // Not Used
  1317. void __fastcall TFrmVmsOprMain::OnUdpDataRecvMessage(tagMSG &Msg)
  1318. {
  1319. IPCUDPMESSAGESTRUCT *RcvData = (IPCUDPMESSAGESTRUCT*)Msg.lParam;
  1320. INT_SENDER *Sender = &RcvData->Sender;
  1321. INT_PACKET *Pkt = &RcvData->Pkt;
  1322. INT_HEAD *head = &Pkt->head;
  1323. INT_DATA *data = &Pkt->data;
  1324. char *pData = &data->Data[2];
  1325. BYTE OpCode = (BYTE)data->Data[0];
  1326. LOGINFO("*** OPR Client Req: %s.%d", VComm_ulong2ip(Sender->IP), Sender->Port);
  1327. String sMsg = "";
  1328. String sVmsNmbr = "";
  1329. TmrCommTimeout->Enabled = false;
  1330. //FVmsServerState = vms_normal;
  1331. UpdateVmsCommStatus(false);
  1332. if (head->OPCode == INT_OP_COMM_COMMON)
  1333. {
  1334. switch(OpCode)
  1335. {
  1336. case INT_OP_PG_STATE_RES:
  1337. {
  1338. DebugMsg("*** VMS Process Status Received.");//"*** VMS 프로세스 상태정보 수신");
  1339. INT_PG_STATE_RES *ARes = (INT_PG_STATE_RES*)pData;
  1340. for (int ii = 0; ii < ARes->Count && ii < INT_MAX_PG_STATE; ii++)
  1341. {
  1342. if (ARes->Unit[ii].Type == INT_ID_VMS_SERVER)
  1343. {
  1344. FVmsServerState = ARes->Unit[ii].Action;
  1345. UpdateVmsCommStatus(false);
  1346. FPollPrcsState.Polling = GetTickCount(); //프로세스상태정보 조회 타이머 리셋
  1347. break;
  1348. }
  1349. }
  1350. }
  1351. break;
  1352. case INT_OP_VMS_STATE_RES:
  1353. {
  1354. char szVmsNmbr[INT_VMS_MAX_ID+1];
  1355. INT_VMS_STATE_RES *ARes = (INT_VMS_STATE_RES*)pData;
  1356. sMsg = "";
  1357. //sMsg.printf(L"*** VMS 제어기 상태정보 수신: %d EA", ARes->Count);
  1358. sMsg.printf(L"*** VMS Controller Status Received: %d EA", ARes->Count);
  1359. DebugMsg(sMsg);
  1360. for (int ii = 0; ii < ARes->Count && ii < INT_MAX_VMS_STATE; ii++)
  1361. {
  1362. sMsg = "";
  1363. String sVmsNmbr;
  1364. INT_VMS_STATE *pVms = &ARes->Unit[ii];
  1365. sprintf(szVmsNmbr, "%.*s", INT_VMS_MAX_ID, (char*)pVms->VmsId);
  1366. sVmsNmbr = String(szVmsNmbr);
  1367. TVmsCtlr *pObj = VmsManager->FLists.Find(sVmsNmbr);
  1368. if (pObj)
  1369. {
  1370. VmsStatusCopy(&pObj->WSTATE, pVms);
  1371. if (pObj->WSTATE.OprMode == 'A') pObj->OPER_MODE = "A";
  1372. else if (pObj->WSTATE.OprMode == 'B') pObj->OPER_MODE = "B";
  1373. else pObj->OPER_MODE = "F";
  1374. //pObj->VMS_PHSE_CHNG_CYCL = pObj->WSTATE.ScheduledMessageOperatingTime;
  1375. pObj->VMS_CMNC_ERR_BASS_VAL = pObj->WSTATE.ModuleOperatingTemperature;
  1376. pObj->FAN_MTNS_TMPR = pObj->WSTATE.FanOperatingTemperature;
  1377. pObj->HETR_MTNS_TMPR = pObj->WSTATE.HeaterOperatingTemperature;
  1378. pObj->VMS_MODL_ERR_RATE = pObj->WSTATE.ModuleBasicFailureRate;
  1379. }
  1380. else
  1381. {
  1382. sMsg.printf(L"INT_OP_VMS_STATE_RES VMS not found: %s", sVmsNmbr.c_str());
  1383. DebugMsg(sMsg);
  1384. }
  1385. }
  1386. RefreshVmsMessage(WM_VMS_STATE_REFRESH);
  1387. FPollVmsState.Polling = GetTickCount();
  1388. }
  1389. break;
  1390. case INT_OP_VMS_FORM_SAVE:
  1391. {
  1392. FPollVmsMsg.Reset(); //VMS메시지 조회 타이머 리셋
  1393. char szDateTime[INT_VMS_MAX_DATETIME+1];
  1394. INT_VMS_FORM_SAVE_REQ *AReq = (INT_VMS_FORM_SAVE_REQ*)pData;
  1395. sprintf(szDateTime, "%.*s", INT_VMS_MAX_DATETIME, (char*)AReq->Date);
  1396. String sDateTime = String(szDateTime);
  1397. sMsg = "";
  1398. //sMsg.printf(L"*** VMS 폼생성 완료 메시지 수신: %s", sDateTime.c_str());
  1399. sMsg.printf(L"*** VMS Form Create Received: %s", sDateTime.c_str());
  1400. DebugMsg(sMsg);
  1401. }
  1402. break;
  1403. case INT_OP_VMS_FORM_DOWNLOAD:
  1404. {
  1405. char szDateTime[INT_VMS_MAX_DATETIME+1];
  1406. char szVmsNmbr[INT_VMS_MAX_ID+1];
  1407. INT_VMS_FORM_DOWNLOAD_REQ *AReq = (INT_VMS_FORM_DOWNLOAD_REQ*)pData;
  1408. //sMsg.printf(L"*** VMS 폼 다운로드 메시지 수신: %d EA", AReq->Count);
  1409. sMsg.printf(L"*** VMS Form Download Received: %d EA", AReq->Count);
  1410. DebugMsg(sMsg);
  1411. for (int ii = 0; ii < AReq->Count && ii < INT_MAX_VMS_FORM_DOWNLOAD; ii++)
  1412. {
  1413. sMsg = "";
  1414. INT_VMS_FORM_DOWNLOAD *pVms = &AReq->Unit[ii];
  1415. sprintf(szVmsNmbr, "%.*s", INT_VMS_MAX_ID, (char*)pVms->VmsId);
  1416. sprintf(szDateTime, "%.*s", INT_VMS_MAX_DATETIME, (char*)pVms->Date);
  1417. sVmsNmbr = String(szVmsNmbr);
  1418. String sDateTime = String(szDateTime);
  1419. TVmsCtlr *pObj = VmsManager->FLists.Find(sVmsNmbr);
  1420. if (pObj)
  1421. {
  1422. bool bDnLd = (pVms->Result == vms_download_succ) ? true : false;
  1423. String sResult = bDnLd ? "Succ" : "Fail";
  1424. pObj->VmsMsg->OFFER_DT = sDateTime;
  1425. pObj->VmsMsg->OFFER_YN = bDnLd;
  1426. for (int kk = 0; kk < pObj->VmsMsg->Total && kk < INT_MAX_VMS_FORM; kk++)
  1427. {
  1428. pObj->VmsMsg->PHASE[kk].DNLD_YN = bDnLd ? "Y" : "N";
  1429. }
  1430. sMsg.printf(L"*** ===> VMS Msg download: %s, %s", pObj->VMS_CTLR_ID.c_str(), sResult.c_str());
  1431. }
  1432. else
  1433. {
  1434. sMsg.printf(L"*** INT_OP_VMS_FORM_DOWNLOAD VMS not found: %s", sVmsNmbr.c_str());
  1435. }
  1436. DebugMsg(sMsg);
  1437. }
  1438. }
  1439. break;
  1440. }
  1441. }
  1442. TmrCommTimeout->Enabled = true;
  1443. }
  1444. //---------------------------------------------------------------------------
  1445. void __fastcall TFrmVmsOprMain::RefreshVmsMessage(int AMsg, WPARAM AWParam/*=0*/, LPARAM ALParam/*=0*/)
  1446. {
  1447. HWND hWnd;
  1448. if (NVMS0000M->Enabled)
  1449. {
  1450. hWnd = FindChildWindow("VMS0000M");
  1451. if (hWnd) POST_MSG(hWnd, AMsg, AWParam, ALParam);
  1452. }
  1453. if (NVMS0100M->Enabled)
  1454. {
  1455. hWnd = FindChildWindow("VMS0100M");
  1456. if (hWnd) POST_MSG(hWnd, AMsg, AWParam, ALParam);
  1457. }
  1458. if (NVMS0200M->Enabled)
  1459. {
  1460. hWnd = FindChildWindow("VMS0200M");
  1461. if (hWnd) POST_MSG(hWnd, AMsg, AWParam, ALParam);
  1462. }
  1463. if (NVMS0300M->Enabled)
  1464. {
  1465. hWnd = FindChildWindow("VMS0300M");
  1466. if (hWnd) POST_MSG(hWnd, AMsg, AWParam, ALParam);
  1467. }
  1468. #if 0
  1469. if (NVMS0400M->Enabled)
  1470. {
  1471. hWnd = FindChildWindow("VMS0400M");
  1472. if (hWnd) POST_MSG(hWnd, AMsg, AWParam, ALParam);
  1473. }
  1474. #endif
  1475. if (NVMS0500M->Enabled)
  1476. {
  1477. hWnd = FindChildWindow("VMS0500M");
  1478. if (hWnd) POST_MSG(hWnd, AMsg, AWParam, ALParam);
  1479. }
  1480. if (NVMS0600M->Enabled)
  1481. {
  1482. hWnd = FindChildWindow("VMS0600M");
  1483. if (hWnd) POST_MSG(hWnd, AMsg, AWParam, ALParam);
  1484. }
  1485. }
  1486. //---------------------------------------------------------------------------
  1487. void __fastcall TFrmVmsOprMain::OnPollingThreadDone(TObject *Sender)
  1488. {
  1489. LOGINFO("*** Polling thead terminated ***");
  1490. g_AppCfg.thr.bRunning = false;
  1491. }
  1492. //---------------------------------------------------------------------------
  1493. void __fastcall TFrmVmsOprMain::ShowFacilityStatus()
  1494. {
  1495. // HWND hWnd = FindChildWindow("ITS0000M");
  1496. // if (hWnd) POST_MSG(hWnd, WM_MAINFORM, AWParam, ALParam);
  1497. return;
  1498. #if 0
  1499. bool bShow = false;
  1500. try
  1501. {
  1502. try
  1503. {
  1504. ItsFacilityManager->FLists.Lock();
  1505. FOR_STL(TItsFacility*, pFacility, ItsFacilityManager->FLists)
  1506. {
  1507. if (pFacility->DEL_YN == "Y") continue;
  1508. if (pFacility->FCLT_TYPE == "DSRC")
  1509. {
  1510. if (pFacility->FCollCntBase > pFacility->FCollCntCurr)
  1511. {
  1512. bShow = true;
  1513. break;
  1514. }
  1515. }
  1516. if (pFacility->FComm != "1")
  1517. {
  1518. bShow = true;
  1519. break;
  1520. }
  1521. else
  1522. {
  1523. try
  1524. {
  1525. String sValue = pFacility->FCBoxTmpr;
  1526. int nValue = 0;
  1527. if (TryStrToInt(sValue, nValue))
  1528. {
  1529. if (nValue > g_AppCfg.Temp.AlarmValue)
  1530. {
  1531. bShow = true;
  1532. break;
  1533. }
  1534. }
  1535. } catch(...) {}
  1536. }
  1537. }
  1538. }
  1539. __finally
  1540. {
  1541. ItsFacilityManager->FLists.UnLock();
  1542. }
  1543. }
  1544. catch(...)
  1545. {
  1546. }
  1547. if (!bShow)
  1548. {
  1549. LblAlarm->Style->Font->Color = clBlack;
  1550. LblAlarm->Caption = "알람정보";
  1551. ImgAlarm->Visible = false;
  1552. ImgAlarmNormal->Visible = true;
  1553. try {
  1554. if (ImgAlarm->Picture->Graphic->ClassName() == "TGIFImage")
  1555. ((TGIFImage *)ImgAlarm->Picture->Graphic)->Animate = false;
  1556. } catch(...) {}
  1557. return;
  1558. }
  1559. ImgAlarmNormal->Visible = false;
  1560. ImgAlarm->Visible = true;
  1561. try {
  1562. if (ImgAlarm->Picture->Graphic->ClassName() == "TGIFImage")
  1563. ((TGIFImage *)ImgAlarm->Picture->Graphic)->Animate = true;
  1564. } catch(...) {}
  1565. LblAlarm->Caption = "알람발생";
  1566. LblAlarm->Style->Font->Color = clRed;
  1567. if (!g_AppCfg.Alarm.Enabled) return;
  1568. if (!g_AppCfg.Alarm.Window) return;
  1569. #endif
  1570. }
  1571. //---------------------------------------------------------------------------
  1572. void __fastcall TFrmVmsOprMain::NTST0000MClick(TObject *Sender)
  1573. {
  1574. VmsManager->LoadVmsMsg();
  1575. #if 0
  1576. String sExeName = "Project1.exe";
  1577. String sParam = "\"" + g_pLOGIN->sUserId + "\" \"" + g_pLOGIN->sUserId + "\"";
  1578. //ShellExecute(NULL,"open", "C:\\myprocess.exe", "\"my argument 1 containing spaces\" \"my argument 2\"","C:\\",SW_SHOWNORMAL);
  1579. ShellExecute(Handle, NULL, sExeName.c_str(), sParam.c_str(), NULL, SW_SHOWNORMAL);
  1580. #endif
  1581. }
  1582. //---------------------------------------------------------------------------
  1583. void __fastcall TFrmVmsOprMain::NVMSM100MClick(TObject *Sender)
  1584. {
  1585. FORMSHOW(VMSM100M);
  1586. }
  1587. //---------------------------------------------------------------------------
  1588. void __fastcall TFrmVmsOprMain::NVMSM200MClick(TObject *Sender)
  1589. {
  1590. FORMSHOW(VMSM200M);
  1591. }
  1592. //---------------------------------------------------------------------------
  1593. void __fastcall TFrmVmsOprMain::NVMSM210MClick(TObject *Sender)
  1594. {
  1595. FORMSHOW(VMSM210M);
  1596. }
  1597. //---------------------------------------------------------------------------
  1598. void __fastcall TFrmVmsOprMain::NVMSM300MClick(TObject *Sender)
  1599. {
  1600. //FORMSHOW(VMSM300M);
  1601. }
  1602. //---------------------------------------------------------------------------
  1603. void __fastcall TFrmVmsOprMain::NVMSM310MClick(TObject *Sender)
  1604. {
  1605. //FORMSHOW(VMSM310M);
  1606. }
  1607. //---------------------------------------------------------------------------
  1608. void __fastcall TFrmVmsOprMain::NVMSM400MClick(TObject *Sender)
  1609. {
  1610. FORMSHOW(VMSM400M);
  1611. }
  1612. //---------------------------------------------------------------------------
  1613. void __fastcall TFrmVmsOprMain::NVMSM410MClick(TObject *Sender)
  1614. {
  1615. FORMSHOW(VMSM410M);
  1616. }
  1617. //---------------------------------------------------------------------------
  1618. void __fastcall TFrmVmsOprMain::NVMSM420MClick(TObject *Sender)
  1619. {
  1620. FORMSHOW(VMSM420M);
  1621. }
  1622. //---------------------------------------------------------------------------
  1623. void __fastcall TFrmVmsOprMain::NVMSM500MClick(TObject *Sender)
  1624. {
  1625. FORMSHOW(VMSM500M);
  1626. }
  1627. //---------------------------------------------------------------------------
  1628. void __fastcall TFrmVmsOprMain::NVMSM600MClick(TObject *Sender)
  1629. {
  1630. FORMSHOW(VMSM600M);
  1631. }
  1632. //---------------------------------------------------------------------------
  1633. void __fastcall TFrmVmsOprMain::NVMSM700MClick(TObject *Sender)
  1634. {
  1635. FORMSHOW(VMSM700M);
  1636. }
  1637. //---------------------------------------------------------------------------
  1638. void __fastcall TFrmVmsOprMain::NVMSM800MClick(TObject *Sender)
  1639. {
  1640. FORMSHOW(VMSM800M);
  1641. }
  1642. //---------------------------------------------------------------------------
  1643. void __fastcall TFrmVmsOprMain::NVMSM900MClick(TObject *Sender)
  1644. {
  1645. FORMSHOW(VMSM900M);
  1646. }
  1647. //---------------------------------------------------------------------------
  1648. void __fastcall TFrmVmsOprMain::NVMS0000MClick(TObject *Sender)
  1649. {
  1650. FORMSHOW(VMS0000M);
  1651. }
  1652. //---------------------------------------------------------------------------
  1653. void __fastcall TFrmVmsOprMain::NVMS0100MClick(TObject *Sender)
  1654. {
  1655. if (g_AppCfg.bOnlyOneScreen) CloseChildWindow();
  1656. FORMSHOW(VMS0100M);
  1657. }
  1658. //---------------------------------------------------------------------------
  1659. void __fastcall TFrmVmsOprMain::NVMS0200MClick(TObject *Sender)
  1660. {
  1661. if (g_AppCfg.bOnlyOneScreen) CloseChildWindow();
  1662. FORMSHOW(VMS0200M);
  1663. }
  1664. //---------------------------------------------------------------------------
  1665. void __fastcall TFrmVmsOprMain::NVMS0300MClick(TObject *Sender)
  1666. {
  1667. if (g_AppCfg.bOnlyOneScreen) CloseChildWindow();
  1668. FORMSHOW(VMS0300M);
  1669. }
  1670. //---------------------------------------------------------------------------
  1671. void __fastcall TFrmVmsOprMain::NVMS0400MClick(TObject *Sender)
  1672. {
  1673. //FORMSHOW(VMS0400M);
  1674. }
  1675. //---------------------------------------------------------------------------
  1676. void __fastcall TFrmVmsOprMain::NVMS0500MClick(TObject *Sender)
  1677. {
  1678. if (g_AppCfg.bOnlyOneScreen) CloseChildWindow();
  1679. FORMSHOW(VMS0500M);
  1680. }
  1681. //---------------------------------------------------------------------------
  1682. void __fastcall TFrmVmsOprMain::NVMS0600MClick(TObject *Sender)
  1683. {
  1684. if (g_AppCfg.bOnlyOneScreen) CloseChildWindow();
  1685. FORMSHOW(VMS0600M);
  1686. }
  1687. //---------------------------------------------------------------------------
  1688. void __fastcall TFrmVmsOprMain::TmrCommTimeoutTimer(TObject *Sender)
  1689. {
  1690. //통신타임아웃
  1691. TmrCommTimeout->Enabled = false;
  1692. UpdateInterCommStatus(false);
  1693. FVmsServerState = vms_error;
  1694. UpdateVmsCommStatus(false);
  1695. LOGINFO("xxx VMS Communication Time out xxx");
  1696. }
  1697. //---------------------------------------------------------------------------
  1698. void __fastcall TFrmVmsOprMain::ApplicationEvents1Restore(TObject *Sender)
  1699. {
  1700. //화면 재생
  1701. }
  1702. //---------------------------------------------------------------------------
  1703. void __fastcall TFrmVmsOprMain::ApplicationEvents1Minimize(TObject *Sender)
  1704. {
  1705. //화면 정지
  1706. }
  1707. //---------------------------------------------------------------------------
  1708. void __fastcall TFrmVmsOprMain::OnMenuMouseMove(TObject *Sender, TShiftState Shift, int X,
  1709. int Y)
  1710. {
  1711. ::SetCursor(Screen->Cursors[crHandPoint]);
  1712. }
  1713. //---------------------------------------------------------------------------
  1714. void __fastcall TFrmVmsOprMain::ApplicationEvents1SettingChange(TObject *Sender, int Flag,
  1715. const UnicodeString Section, int &Result)
  1716. {
  1717. DateSeparator = '-';
  1718. TimeSeparator = ':';
  1719. ShortDateFormat = "yyyy-MM-dd";
  1720. ShortTimeFormat = "HH:NN:SS";
  1721. LongTimeFormat = "HH:NN:SS";
  1722. cxFormatController()->BeginUpdate();
  1723. cxFormatController()->UseDelphiDateTimeFormats = true;
  1724. cxFormatController()->EndUpdate();
  1725. cxFormatController()->GetFormats();
  1726. cxFormatController()->NotifyListeners();
  1727. }
  1728. //---------------------------------------------------------------------------