FrmVmsOprMainF.cpp 57 KB

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