FrmMainF.cpp 96 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #include "ITSSkinF.h"
  4. #include "ITSUtilF.h"
  5. #include "ITSLangTransF.h"
  6. #pragma hdrstop
  7. #include "FrmMainF.h"
  8. #include "TThreadPollingF.h"
  9. #include "FrmInitializeF.h" // 프로그램 초기화화면
  10. #include "FrmFacilityAlarmF.h"
  11. #include "FrmIncidentAlarmF.h"
  12. #include "CDSTrafficF.h"
  13. #define D_IDB0140Mx
  14. #define D_WBH0010Mx
  15. #define D_BLACKBOXx
  16. //---------------------------------------------------------------------------
  17. #include "ITS0000MF.h" // 통합모니터링
  18. #include "ITS0010MF.h" // 현재소통정보
  19. #include "ITS0020MF.h" // 소통정보제보 관리
  20. #include "ITS0030MF.h" // 돌발상황정보 관리
  21. #include "ITS0040MF.h" // 반복정체구간관리
  22. //#include "ITS0050MF.h" // 반복정체구간관리(기상)
  23. //---------------------------------------------------------------------------
  24. #include "IFM0010MF.h" // 시설물 정보관리
  25. #include "IFM0020MF.h" // 시설물 업체 관리
  26. #include "IFM0030MF.h" // 시설물 장애 관리
  27. #include "IFM0040MF.h" // 시설물장애 이력
  28. #include "IFM0050MF.h" // 시설물 장애코드 관리
  29. //---------------------------------------------------------------------------
  30. #include "IDB0010MF.h" // 노드
  31. #include "IDB0020MF.h" // 링크
  32. #include "IDB0030MF.h" // 서비스링크
  33. #include "IDB0040MF.h" // 도로
  34. #include "IDB0050MF.h" // 가공파라미터관리
  35. #include "IDB0051MF.h" // 가공파라미터관리
  36. #include "IDB0060MF.h" // 소통등급관리
  37. #include "IDB0070MF.h" // 휴일관리
  38. #include "IDB0080MF.h" // 운영코드 관리
  39. #include "IDB0090MF.h" // 운영자관리
  40. #include "IDB0100MF.h" // 서버/프로세스관리
  41. #include "IDB0110MF.h" // 기관관리
  42. #include "IDB0120MF.h" // 간선도로관리
  43. #include "IDB0130MF.h" // 운영자그룹 메뉴관리
  44. #ifdef D_IDB0140M
  45. #include "IDB0140MF.h" // 홈페이지 관리자
  46. #endif
  47. //---------------------------------------------------------------------------
  48. #include "IHS0010MF.h" // 운영자 접속이력
  49. #include "IHS0020MF.h" // 프로세스상태이력
  50. #include "IHS0030MF.h" // 수집데이터 이력조회
  51. #include "IHS0040MF.h" // 가공데이터 이력조회
  52. #include "IHS0060MF.h" // 수집데이터 이력분석
  53. //---------------------------------------------------------------------------
  54. #include "IST0010MF.h" // 인터넷 접속통계
  55. #include "IST0020MF.h" // CCTV 접속통계
  56. #include "IST0030MF.h" // 소통정보 통계
  57. #include "IST0040MF.h" // 돌발상황 통계
  58. #include "IST0050MF.h" // 시설물 통신단절통계
  59. #include "IST0060MF.h" // 프로세스 상태통계
  60. #include "IST0070MF.h" // 도로소통정보 통계
  61. #include "IST0080MF.h" // 도로소통정보 통계
  62. #include "IRP0010MF.h" // 보고서
  63. //---------------------------------------------------------------------------
  64. #include "IAN0010MF.h" // 교통정보 수집결과 분석
  65. #include "IAN0020MF.h" // 교통정보 가공결과 분석
  66. #include "IAN0030MF.h" // 교통정보 제공결과 분석
  67. #include "IAN0040MF.h" // 소통정보 이력분석
  68. #include "IAN0050MF.h" // 패턴데이터 분석
  69. #include "IAN0060MF.h" // 반복정체구간 분석
  70. //#include "IAN0070MF.h" // 반복정체구간 분석(기상)
  71. //---------------------------------------------------------------------------
  72. #include "CFG0000MF.h" // 시스템 환경설정
  73. //---------------------------------------------------------------------------
  74. #ifdef USE_DSRC
  75. #include "DSRH010MF.h" //DSRC-RSE 상태이력
  76. #include "DSRH020MF.h" //DSRC-RSE 로그이력
  77. #include "DSRH030MF.h" //DSRC-RSE 제어이력
  78. #include "DSRH040MF.h" //DSRC-RSE 가공정보 이력조회
  79. #include "DSRH050MF.h" //DSRC-RSE 제공정보 이력조회
  80. #include "DSRM010MF.h" //DSRC-RSE 관리
  81. #include "DSRM020MF.h" //DSRC-RSE 제어
  82. #include "DSRM030MF.h" //DSRC-RSE 수집구간 설정
  83. #include "DSRM040MF.h" //DSRC-RSE 제공구간 관리
  84. #include "DSRH060MF.h" //DSRC-RSE OBU 수집 이력조회
  85. #include "DSRH070MF.h" //DSRC-RSE OBU 수집 통계조회
  86. #endif
  87. //---------------------------------------------------------------------------
  88. #ifdef USE_VDS
  89. #include "VDSM010MF.h" //VDS-제어기 관리
  90. #include "VDSM020MF.h" //VDS-검지기 관리
  91. #include "VDSH010MF.h" //VDS-제어기 상태이력
  92. #include "VDSH020MF.h" //VDS-제어기 이벤트이력
  93. #include "VDSH030MF.h" //VDS-검지기 과거수집이력
  94. #include "VDSH040MF.h" //VDS-검지기 원시수집이력
  95. #include "VDSH050MF.h" //VDS-검지기 평활화이력
  96. #include "VDSH060MF.h" //VDS-검지기 보정이력
  97. #include "VDSS010MF.h" //VDS-검지기 통계조회
  98. #include "VDSS020MF.h" //VDS-검지기 통계조회
  99. #endif
  100. //---------------------------------------------------------------------------
  101. #ifdef USE_AVI
  102. #include "AVIM010MF.h" //AVI-제어기 관리
  103. #include "AVIM020MF.h" //AVI-구간 관리
  104. #include "AVIH010MF.h" //AVI-제어기 상태이력
  105. #include "AVIH020MF.h" //AVI-제어기 차량인식이력
  106. #include "AVIH030MF.h" //AVI-제어기 교통정보이력
  107. #include "AVIH040MF.h" //AVI-제어기 차량통과이력
  108. #include "AVIH050MF.h" //AVI-구간 매칭이력
  109. #include "AVIH060MF.h" //AVI-구간 수집이력
  110. #include "AVIH070MF.h" //AVI-구간 소통상황이력
  111. #include "AVIH080MF.h" //AVI 지점 원시수집 이력
  112. #include "AVIS010MF.h" //AVI-구간 소통상황통계
  113. #include "AVIS020MF.h" //AVI-검지기 소통상황통계
  114. #endif
  115. //---------------------------------------------------------------------------
  116. #ifdef USE_PARK
  117. #include "PIS0010MF.h" //주차장관리
  118. #include "PIS0020MF.h" //주차장실시간정보
  119. #include "PISH010MF.h" //주차장실시간정보이력
  120. #include "PIS0030MF.h" //주차장제어
  121. #endif
  122. //---------------------------------------------------------------------------
  123. #ifdef D_BLACKBOX
  124. #include "BDS0010MF.h"
  125. #include "BDS0020MF.h"
  126. #include "BDSH010MF.h"
  127. #include "BDSH020MF.h"
  128. #endif
  129. //---------------------------------------------------------------------------
  130. #include "TAS0010MF.h"
  131. #include "TAS0020MF.h"
  132. #include "TAS0030MF.h"
  133. #include "TAS0040MF.h"
  134. #include "TAS0050MF.h"
  135. //---------------------------------------------------------------------------
  136. #ifdef D_WBH0010M
  137. #include "WBH0010MF.h" //홈페이지 관리자 이력조회
  138. #endif
  139. //---------------------------------------------------------------------------
  140. #pragma package(smart_init)
  141. #pragma link "cxClasses"
  142. #pragma link "cxContainer"
  143. #pragma link "cxControls"
  144. #pragma link "cxEdit"
  145. #pragma link "cxGraphics"
  146. #pragma link "cxHint"
  147. #pragma link "cxLabel"
  148. #pragma link "cxLookAndFeelPainters"
  149. #pragma link "cxLookAndFeels"
  150. #pragma link "cxPC"
  151. #pragma link "cxPCdxBarPopupMenu"
  152. #pragma link "dxBar"
  153. #pragma link "dxCustomHint"
  154. #pragma link "dxRibbon"
  155. #pragma link "dxRibbonGallery"
  156. #pragma link "dxRibbonSkins"
  157. #pragma link "dxRibbonStatusBar"
  158. #pragma link "dxScreenTip"
  159. #pragma link "dxSkinBlack"
  160. #pragma link "dxSkinBlue"
  161. #pragma link "dxSkinChooserGallery"
  162. #pragma link "dxSkinsCore"
  163. #pragma link "dxSkinscxPCPainter"
  164. #pragma link "dxSkinsdxBarPainter"
  165. #pragma link "dxSkinsdxRibbonPainter"
  166. #pragma link "dxSkinsForm"
  167. #pragma link "dxStatusBar"
  168. #pragma link "dxTabbedMDI"
  169. #pragma resource "*.dfm"
  170. TFrmMain *FrmMain = NULL;
  171. #define MAX_EXEPROGRAM 21
  172. ST_RUNPROGRAM g_RunProgram[MAX_EXEPROGRAM] = {
  173. {"TfrmCctv", "CctvMgr.exe", "CCTV관리"}, //CCTV 관리 프로그램 호출 // 0
  174. {"TfrmCptnMgr", "CctvOpt.exe", "CCTV모니터링"}, //CCTV 모니터링 프로그램 호출 // 1
  175. #if 1
  176. {"TFrmVmsOprMain", "VmsOprMain.exe", "VMS 운영관리"}, //VMS 관리 프로그램 호출 // 2
  177. #else
  178. {"TfrmVmsMgr", "VmsOpt.exe", "VMS관리"}, //VMS 관리 프로그램 호출 // 2
  179. #endif
  180. {"TfrmCctvLog", "CctvLog.exe", "CCTV상태이력"}, //CCTV 상태이력 프로그램 호출 // 3
  181. #if 1
  182. {"TFrmVmsLogStts", "VmsLogStts.exe", "VMS상태이력조회"}, //VMS 상태이력 프로그램 호출 // 4
  183. {"TFrmVmsLogMsg", "VmsLogMsg.exe", "VMS제공이력조회"}, //VMS 표출이력 프로그램 호출 // 5
  184. #else
  185. {"TfrmVmsLog", "VmsSttsLog.exe", "VMS상태이력"}, //VMS 상태이력 프로그램 호출 // 4
  186. {"TfrmVmsMsgLog", "VmsMsgLog.exe", "VMS표출이력"}, //VMS 표출이력 프로그램 호출 // 5
  187. #endif
  188. {"TfrmVdsStatistics", "VmsMsgLog.exe", "VDS통계"}, //VDS 통계정보 조회 프로그램 호출 // 6
  189. {"TfrmLinkDSRC", "DsrcSect.exe", "DSRC구간설정"}, //DSRC-RSE 수집구간 설정 // 7
  190. {"TfrmWebCamMgr", "WebCamMgr.exe", "WEBCAM관리"}, //웹카메라관리 // 8
  191. {"TfrmWebCamOpt", "WebCamOpt.exe", "WEBCAM모니터링"}, //웹카메라 모니터링 // 9
  192. //VDS
  193. {"TfrmVdsMaster", "VdsMgr.exe", "VDS 제어기 관리"}, //VDS 제어기 관리 호출 //10
  194. {"TfrmVdsDetector", "VdsDetector.exe", "VDS 검지기 관리"}, //VDS 검지기 관리 호출 //11
  195. {"TfrmVdsCtrl", "VdsCtrl.exe", "VDS 제어"}, //VDS 제어 호출 //12
  196. //AVI
  197. {"TfrmAviMaster", "AviMgr.exe", "AVI 제어기 관리"}, //AVI 제어기 관리 호출 //13
  198. {"TfrmAviDetector", "AviDetector.exe", "AVI 검지기 관리"}, //AVI 검지기 관리 호출 //14
  199. {"TfrmAviLink", "AviLink.exe", "AVI 구간 관리"}, //AVI 구간 관리 호출 //15
  200. {"TfrmAviControl", "AviCtrl.exe", "AVI 제어"}, //AVI 제어 호출 //16
  201. //VMS ADD Form
  202. {"TFrmVmsLogCtl", "VmsLogCtl.exe", "VMS제어이력조회"}, //VMS제어이력조회 호출 //17
  203. {"TFrmVmsLogDnld", "VmsLogDnld.exe", "VMS다운로드이력조회"}, //VMS다운로드이력조회 호출 //18
  204. //ETC
  205. {"", "", ""},
  206. {"", "", ""},
  207. };
  208. #define FORMSHOW(x) if (x) \
  209. { \
  210. try { \
  211. ShowWindow(x->Handle, SW_RESTORE); \
  212. x->BringToFront(); \
  213. } catch(...) {} \
  214. } \
  215. else \
  216. { \
  217. Application->CreateForm(__classid(T##x), &x); \
  218. if (x) x->Show(); \
  219. }
  220. //---------------------------------------------------------------------------
  221. class TdxMyBarControl : public TdxBarControl
  222. {
  223. __published:
  224. __property OnMouseMove;
  225. __property OnMouseEnter;
  226. __property OnMouseLeave;
  227. public:
  228. __fastcall virtual TdxMyBarControl(Classes::TComponent* AOwner) : TdxBarControl(AOwner){};
  229. };
  230. //---------------------------------------------------------------------------
  231. LONG __stdcall HelperExceptionFilter(struct _EXCEPTION_POINTERS * pContext)
  232. {
  233. LONG lRet = EXCEPTION_EXECUTE_HANDLER;
  234. DWORD dwRet = ERROR_SUCCESS;
  235. __try
  236. {
  237. Application->NormalizeTopMosts();
  238. if (g_AppCfg.sLang == "kr")
  239. {
  240. Application->MessageBox(L"시스템에서 알수없는 오류가 발생했습니다.\r\n프로그램을 다시 기동해 주세요.",
  241. L"시스템 오류", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  242. }
  243. else
  244. {
  245. Application->MessageBox(L"The system encountered an unknown error.\r\nPlease re-start the program.",
  246. L"System error", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  247. }
  248. Application->RestoreTopMosts();
  249. //TerminateProcess(GetCurrentProcess(), 0);
  250. }
  251. __finally
  252. {
  253. if(ERROR_SUCCESS != dwRet)
  254. {
  255. lRet = EXCEPTION_CONTINUE_SEARCH;
  256. }
  257. exit(0);
  258. }
  259. return lRet;
  260. }
  261. //---------------------------------------------------------------------------
  262. void __fastcall TFrmMain::OnMenuMouseMove(TObject *Sender, TShiftState Shift, int X, int Y)
  263. {
  264. ::SetCursor(Screen->Cursors[crHandPoint]);
  265. }
  266. //---------------------------------------------------------------------------
  267. __fastcall TFrmMain::TFrmMain(TComponent* Owner)
  268. : TdxCustomRibbonForm(Owner)//TdxCustomRibbonForm(Owner)//TForm(Owner)
  269. {
  270. //::CoInitialize(NULL);
  271. Caption = g_AppCfg.sTitle;
  272. Application->OnException = OnAppException;
  273. LangTrans->Translate(this, ITSDb_GetConnection());
  274. ITSSkin_Initialize(Application, g_AppCfg.sLang, false, false);
  275. TmrOnShow->Enabled = false;
  276. TmrAppState->Enabled = false;
  277. FLogoutTick = 0;
  278. g_AppCfg.lMainWinHandle = (long)Handle;
  279. StartJobThread();
  280. while(!PostJobMessage(WM_THREAD, WP_PING)) ;
  281. String sCaption = "";
  282. ReadConfigInfo(g_AppCfg.sConfigFile, "APPLICATION", "CAPTION", sCaption);
  283. ITSSkin_Caption(sCaption == "1" ? true : false);
  284. //탭메뉴비활성
  285. TabBlackBox->Visible = false; //BlackBox
  286. TabCctv->Visible = false;
  287. TabAvi->Visible = false;
  288. TabDsrc->Visible = false;
  289. TabSms->Visible = false; //SMD
  290. TabParking->Visible = false;
  291. //메뉴전체 비활성
  292. BarWebCam->Visible = false; //웹카메라(서브메뉴)
  293. BarConfig4->Visible = false; //스킨
  294. // 메뉴비활성
  295. #ifndef D_IDB0140M
  296. NIDB0140M->Visible = ivNever;
  297. #endif
  298. #ifndef D_WBH0010M
  299. NWBH0010M->Visible = ivNever;
  300. #endif
  301. //환경설정
  302. NCFG0001M->Visible = ivNever; //지도 레이어설정
  303. //통계-분석
  304. NIST0010M->Visible = ivNever; //인터넷접속 통계
  305. NIST0020M->Visible = ivNever; //CCTV접속 통계
  306. //NIAN0040M->Visible = ivNever; //소통정보이력 분석 - 남양주(교통정보분석지원 메뉴에서 대체)
  307. //시설물관리
  308. NIFM0040M->Visible = ivNever; //시설물장애 이력
  309. NIFM0050M->Visible = ivNever; //시설물 장애코드 관리
  310. //AVI
  311. RAVIC010M->Visible = ivNever; //AVI 제어[R]
  312. //VMS
  313. RVMSH300M->Visible = ivNever; //VMS 제어이력(R)
  314. RVMSH400M->Visible = ivNever; //VMS 다운로드이력(R)
  315. //주차장
  316. NPIS0030M->Visible = ivNever; //주차장 제어
  317. NITS0050M->Visible = ivNever; //반복정체관리(기상)
  318. //Ribon config
  319. Ribbon->ShowTabGroups = true; // 메뉴탭 show/hide
  320. Ribbon->QuickAccessToolbar->Visible = false;
  321. //Ribbon->ApplicationButton->Visible = false;
  322. Ribbon->SupportNonClientDrawing = true;
  323. Ribbon->EnableTabAero = true;
  324. //Active Tab set
  325. TabTraffic->Active = true;
  326. SetColorScheme(g_AppCfg.sSkinName);
  327. CMM_SetFormPosition(g_AppCfg.bSaveForm);
  328. CMM_LoadForm(g_sFormsDir, this);
  329. #if 1
  330. int nCompnentCnt = this->ComponentCount;
  331. for (int ii = 0; ii < nCompnentCnt; ii++)
  332. {
  333. String sClassName = this->Components[ii]->ClassName();
  334. if(sClassName == "TdxBar")
  335. {
  336. TdxBar *pMenuGrp = (TdxBar *)this->Components[ii];
  337. if (pMenuGrp->Visible == false) continue;
  338. static_cast<TdxMyBarControl *>(pMenuGrp->Control)->OnMouseMove = OnMenuMouseMove;
  339. }
  340. }
  341. #endif
  342. //ITSSkin_Menu(this);
  343. }
  344. //---------------------------------------------------------------------------
  345. /*
  346. * Form이 메모리에서 생성될때 호출되는 생성자 이벤트 핸들러
  347. * arguments
  348. * Sender : event handler 객체
  349. * return
  350. * void
  351. */
  352. void __fastcall TFrmMain::FormCreate(TObject *Sender)
  353. {
  354. /* 레지스터리 등록 IE 최신버전 */
  355. String sExeName = ExtractFileName(Application->ExeName);
  356. UpdateExplorerEmulatorVersion(sExeName);
  357. //SetUnhandledExceptionFilter(HelperExceptionFilter);
  358. Application->ShowMainForm = false;
  359. try {
  360. Application->Icon->LoadFromResourceName(((unsigned int)HInstance), "MAINICON");
  361. } catch(...) { ShowMessage("LoadFromResourceName failed"); }
  362. //DeleteLogFiles((PTCHAR)g_sLogDir.c_str(), 30, (PTCHAR)"*.*");
  363. WindowState = wsMaximized;
  364. // 종료조건이 있는경우..
  365. //Application->Terminate();
  366. //return;
  367. Application->ShowMainForm = true;
  368. Application->OnHint = OnAppHint;
  369. ImgAlarm->Visible = false;
  370. ImgAlarmNormal->Visible = true;
  371. }
  372. //---------------------------------------------------------------------------
  373. bool __fastcall TFrmMain::UpdateExplorerEmulatorVersion(String AAppName)
  374. {
  375. TRegistry *reg = new TRegistry(KEY_READ|KEY_WRITE|KEY_WOW64_64KEY);
  376. if (reg == NULL) return false;
  377. String sKey = "SOFTWARE\\Wow6432Node\\Microsoft\\Internet Explorer\\MAIN\\FeatureControl\\FEATURE_BROWSER_EMULATION";
  378. reg->RootKey = HKEY_LOCAL_MACHINE;
  379. if (!reg->KeyExists(sKey))
  380. {
  381. //MessageDlg("Key not found! Created now.", mtInformation, TMsgDlgButtons() << mbOK, 0);
  382. bool bOpenKey = reg->CreateKey(sKey);
  383. //return false;
  384. }
  385. reg->Access = KEY_WRITE;
  386. bool openResult = reg->OpenKey(sKey, true);
  387. if(!openResult)
  388. {
  389. //MessageDlg("Unable to create key! Exiting.", mtError, TMsgDlgButtons() << mbOK, 0);
  390. return false;
  391. }
  392. if (!reg->KeyExists(AAppName))
  393. {
  394. reg->WriteInteger(AAppName, 10000);
  395. //reg->WriteInteger(AAppName, 10001);
  396. //reg->WriteInteger(AAppName, 11000);
  397. #if 0
  398. 11001 Internet Explorer 11. Webpages are displayed in IE11 edge mode, regardless of the !DOCTYPE directive.
  399. 11000 IE11. Webpages containing standards-based !DOCTYPE directives are displayed in IE11 edge mode. Default value for IE11.
  400. 10001 Internet Explorer 10. Webpages are displayed in IE10 Standards mode, regardless of the !DOCTYPE directive.
  401. 10000 Internet Explorer 10. Webpages containing standards-based !DOCTYPE directives are displayed in IE10 Standards mode. Default value for Internet Explorer 10.
  402. 9999 Windows Internet Explorer 9. Webpages are displayed in IE9 Standards mode, regardless of the !DOCTYPE directive.
  403. 9000 Internet Explorer 9. Webpages containing standards-based !DOCTYPE directives are displayed in IE9 mode. Default value for Internet Explorer 9.
  404. 8888 Webpages are displayed in IE8 Standards mode, regardless of the !DOCTYPE directive.
  405. 8000 Webpages containing standards-based !DOCTYPE directives are displayed in IE8 mode. Default value for Internet Explorer 8
  406. 7000 Webpages containing standards-based !DOCTYPE directives are displayed in IE7 Standards mode. Default value for applications hosting the WebBrowser Control.
  407. #endif
  408. }
  409. reg->CloseKey();
  410. reg->Free();
  411. return true;
  412. }
  413. //---------------------------------------------------------------------------
  414. /*
  415. * Form을 보여줄때 호출되는 event 메서드이다.
  416. * arguments
  417. * Sender : event handler 객체
  418. * return
  419. * void
  420. */
  421. void __fastcall TFrmMain::FormShow(TObject *Sender)
  422. {
  423. Application->ProcessMessages();
  424. g_AppCfg.lMainWinHandle = (long)Handle;
  425. /*
  426. * 프로그램 초기화 작업
  427. */
  428. InitStatusBar();
  429. if (g_pLOGIN)
  430. {
  431. GetUserMenuRight(g_pLOGIN->sUserId, g_pLOGIN->sUserRightId);
  432. }
  433. TmrOnShow->Enabled = true;
  434. }
  435. //---------------------------------------------------------------------------
  436. /*
  437. * 프로그램 기동후 최초에 수행된다.
  438. * arguments
  439. *
  440. * return
  441. * void
  442. */
  443. void __fastcall TFrmMain::TmrOnShowTimer(TObject *Sender)
  444. {
  445. TmrOnShow->Enabled = false;
  446. Application->ProcessMessages();
  447. TFrmInitialize *FrmInitialize = new TFrmInitialize(this);
  448. FrmInitialize->FThreadId = g_AppCfg.thr.dwThreadId;
  449. FrmInitialize->ShowModal();
  450. //폴링작업 객체 초기화
  451. FPollTraffic00.Cycle = (60*1000*2)+ 5; // 링크소통정보(전체)
  452. FPollTraffic01.Cycle = (60*1000*2)+10; // 링크소통정보
  453. FPollTraffic02.Cycle = (60*1000*2)+11; // 서비스링크소통정보
  454. FPollTraffic03.Cycle = (60*1000*2)+12; // 도로소통정보
  455. FPollTraffic04.Cycle = (60*1000*2)+13; // 반복정체구간
  456. FPollTraffic05.Cycle = (60*1000*5)+ 0; // UTIS운영정보
  457. FPollStatus01.Cycle = (60*1000*1)+ 1; // 시설물상태정보
  458. FPollStatus02.Cycle = (60*1000*5)+ 3; // 프로세스상태정보
  459. FPollStatus03.Cycle = (60*1000*1)+ 5; // 돌발정보
  460. FPollEvent01.Cycle = (60*1000*1)+ 1; // 블랙박스이벤트
  461. FPollVilgFrcs.Cycle = (60*1000*10)+1; // 기상정보
  462. FPollTraffic00.IsPolling = true; // 링크소통정보(전체)
  463. FPollTraffic01.IsPolling = false; // 링크소통정보
  464. FPollTraffic02.IsPolling = false; // 서비스링크소통정보
  465. FPollTraffic03.IsPolling = false; // 도로소통정보
  466. FPollTraffic04.IsPolling = true; // 반복정체구간
  467. #ifdef USE_UTIS
  468. FPollTraffic05.IsPolling = true; // UTIS운영정보
  469. #else
  470. FPollTraffic05.IsPolling = true;//false; // UTIS운영정보
  471. #endif
  472. FPollStatus01.IsPolling = true; // 시설물상태정보
  473. FPollStatus02.IsPolling = true; // 프로세스상태정보
  474. FPollStatus03.IsPolling = true; // 돌발정보
  475. FPollEvent01.IsPolling = true; // 블랙박스이벤트
  476. FPollVilgFrcs.IsPolling = true; // 기상정보
  477. //내부통신 초기화 시작...
  478. TItsProcess *pPrcs = ItsProcessManager->FLists.Find(g_AppCfg.sProcessId);
  479. if (!pPrcs)
  480. {
  481. if (g_AppCfg.sLang == "kr")
  482. {
  483. Application->MessageBox(L"통신프로세스를 초기화 하지 못하였습니다.\r\n환경설정에서 시스템ID를 확인하세요.\r\n프로그램을 종료합니다.",
  484. L"프로그램 통신오류_1", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  485. }
  486. else
  487. {
  488. Application->MessageBox(L"Failed to initialize communication process.\r\nPlease check your system ID in preferences.\r\nExit the program.",
  489. L"Program communication error_1", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  490. }
  491. g_AppCfg.bAppClose = true;
  492. Close();
  493. return;
  494. }
  495. int nPort = pPrcs->PRGM_PORT.ToIntDef(4602);
  496. int nResult = VComm_Initialize((long)Handle, g_AppCfg.sProcessId, "UOT", nPort, g_AppCfg.sLogDay);
  497. if (VERR_NONE != nResult)
  498. {
  499. if (g_AppCfg.sLang == "kr")
  500. {
  501. Application->MessageBox(L"통신프로세스를 초기화 하지 못하였습니다.\r\n환경설정에서 시스템ID를 확인하세요.\r\n프로그램을 종료합니다.",
  502. L"프로그램 통신오류_2", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  503. }
  504. else
  505. {
  506. Application->MessageBox(L"Failed to initialize communication process.\r\nPlease check your system ID in preferences.\r\nExit the program.",
  507. L"Program communication error_2", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  508. }
  509. g_AppCfg.bAppClose = true;
  510. Close();
  511. return;
  512. }
  513. FOR_STL(TItsProcess*, pObj, ItsProcessManager->FLists)
  514. {
  515. if (pObj->DEL_YN == "Y") continue;
  516. AnsiString sProcessId = AnsiString(pObj->SYST_ID);
  517. AnsiString sSystemTp = AnsiString(pObj->SYST_TYPE);
  518. AnsiString sIpAddress = AnsiString(pObj->SYST_IP_1);
  519. AnsiString sUdpPort = AnsiString(pObj->PRGM_PORT);
  520. if (VComm_AddProcess(sProcessId, sSystemTp, sIpAddress, sUdpPort) >= 0)
  521. {
  522. #if 0
  523. if ("UOT" == sSystemTp)
  524. {
  525. nPort = sUdpPort.ToIntDef(0);
  526. VComm_AddProcess(sProcessId, sSystemTp, sIpAddress, AnsiString(nPort+1));
  527. }
  528. #endif
  529. }
  530. }
  531. if (VERR_NONE != VComm_Open())
  532. {
  533. if (g_AppCfg.sLang == "kr")
  534. {
  535. Application->MessageBox(L"통신프로세스를 초기화 하지 못하였습니다.\r\n환경설정에서 시스템ID를 확인하세요.\r\n프로그램을 종료합니다.",
  536. L"프로그램 통신오류_3", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  537. }
  538. else
  539. {
  540. Application->MessageBox(L"Failed to initialize communication process.\r\nPlease check your system ID in preferences.\r\nExit the program.",
  541. L"Program communication error_3", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  542. }
  543. g_AppCfg.bAppClose = true;
  544. Close();
  545. return;
  546. }
  547. //내부통신 초기화 끝...
  548. ((TdxStatusBarTextPanelStyle*)dxStatusBar->Panels->Items[isbComm]->PanelStyle)->ImageIndex = 8;
  549. Application->ProcessMessages();
  550. ((TdxStatusBarTextPanelStyle*)dxStatusBar->Panels->Items[isbDb]->PanelStyle)->ImageIndex = ITSDb_IsOpen() ? 8 : 7;
  551. //TODO NITS0000MClick((TObject *)NITS0000M); //메인화면을 프로그램 기동과 동시에 호출하는 경우
  552. #if 0
  553. if (g_AppCfg.AutoLogout.LogoutExit)
  554. {
  555. Application->MessageBox(L"이전 프로그램은 자동로그아웃으로 종료되었습니다.\r\n프로그램을 실행합니다.",
  556. L"프로그램 실행정보", MB_OK|MB_ICONQUESTION|MB_APPLMODAL);
  557. }
  558. #endif
  559. g_AppCfg.AutoLogout.LogoutExit = false;
  560. TmrAppState->Enabled = true;
  561. TmrPolling->Enabled = true;
  562. TmrDbCheck->Enabled = true;
  563. }
  564. //---------------------------------------------------------------------------
  565. /*
  566. * 작업스레드 생성
  567. * arguments
  568. *
  569. * return
  570. * void
  571. */
  572. bool __fastcall TFrmMain::StartJobThread()
  573. {
  574. TThreadPolling *pPollingThread = new TThreadPolling(false);
  575. if (pPollingThread)
  576. {
  577. pPollingThread->OnTerminate = OnPollingThreadDone;
  578. g_AppCfg.thr.pThread = (TThread *)pPollingThread;
  579. g_AppCfg.thr.dwThreadId = pPollingThread->ThreadID;
  580. g_AppCfg.thr.nHandle = pPollingThread->Handle;
  581. //pPollingThread->Resume();
  582. return true;
  583. }
  584. return false;
  585. }
  586. //---------------------------------------------------------------------------
  587. /*
  588. * 작업스레드 종료
  589. * arguments
  590. *
  591. * return
  592. * void
  593. */
  594. void __fastcall TFrmMain::TerminateJobThread()
  595. {
  596. if (g_AppCfg.thr.bRunning)
  597. {
  598. PostJobMessage(WM_THREAD, WM_QUIT);
  599. }
  600. Sleep(500);
  601. try
  602. {
  603. if (g_AppCfg.thr.bRunning)
  604. {
  605. TThreadPolling *pThread = (TThreadPolling *)g_AppCfg.thr.pThread;
  606. pThread->Terminate();
  607. //pThread->WaitFor();
  608. }
  609. g_AppCfg.thr.pThread = NULL;
  610. g_AppCfg.thr.dwThreadId = 0;
  611. g_AppCfg.thr.nHandle = 0;
  612. g_AppCfg.thr.bRunning = false;
  613. }
  614. catch(...)
  615. {
  616. }
  617. }
  618. //---------------------------------------------------------------------------
  619. /*
  620. * Form이 닫히기 전에 프로그램의 종료여부를 확인한다.
  621. * arguments
  622. *
  623. * return
  624. * void
  625. */
  626. void __fastcall TFrmMain::FormCloseQuery(TObject *Sender, bool &CanClose)
  627. {
  628. // 폼이 닫히기 전에 수행해야 할 모뮬 기술
  629. // 프로그램 종료를 사용자가 확인할 수 있도록...
  630. if (!g_AppCfg.bAppClose)
  631. {
  632. String strMsg;
  633. strMsg = "";
  634. strMsg = "[ " + g_AppCfg.sTitle + " ]\r\n\n";
  635. strMsg+= FrmLang->cxLabel1->Caption;
  636. if(Application->MessageBox(strMsg.c_str(),
  637. FrmLang->cxLabel2->Caption.c_str(),
  638. MB_YESNO|MB_ICONQUESTION) == IDYES)
  639. {
  640. /*
  641. * 화면관련 작업을 못하도록 여기에 코드를 적자...
  642. */
  643. ITSDb_ApplicationTerm();
  644. g_AppCfg.bAppClose = true;
  645. }
  646. CanClose = false;
  647. }
  648. }
  649. //---------------------------------------------------------------------------
  650. /*
  651. * Form을 닫을때 호출되는 event 메서드
  652. * arguments
  653. * Sender : event handler 객체
  654. * Action : TCloseAction 객체
  655. * return
  656. * void
  657. */
  658. void __fastcall TFrmMain::FormClose(TObject *Sender, TCloseAction &Action)
  659. {
  660. CommClose();
  661. Action = caFree;
  662. }
  663. //---------------------------------------------------------------------------
  664. /*
  665. * 닫기버튼 이나 x버튼 클릭시 공통으로 처리하는 로직이들어간다..
  666. * Form과 DataModule class를 delete시킨다.
  667. * arguments
  668. *
  669. * return
  670. * void
  671. */
  672. void __fastcall TFrmMain::CommClose()
  673. {
  674. try
  675. {
  676. CloseAllWindow();
  677. ITSSkin_Term();
  678. CMM_SaveForm(g_sFormsDir, this);
  679. WriteConfigInfo(g_AppCfg.sConfigFile, "APPLICATION", "LOGDAY", Now().FormatString("dd"));
  680. ::CoUninitialize();
  681. }
  682. catch(...)
  683. {
  684. }
  685. }
  686. //---------------------------------------------------------------------------
  687. /*
  688. * 열려있는 모든 Form Window들을 닫는다.
  689. * parameter
  690. * Sender : Event를 보낸 객체
  691. * return
  692. * None
  693. */
  694. void __fastcall TFrmMain::CloseAllWindow()
  695. {
  696. int ii;
  697. // 실행시킨 프로그램을 종료시킨다.
  698. for (ii = 0; ii < MAX_EXEPROGRAM; ii++)
  699. {
  700. if (g_RunProgram[ii].AClassName == "")
  701. continue;
  702. TermItsProgram(g_RunProgram[ii].AClassName, "");
  703. }
  704. //실행중인 화면을 종료 시킨다.
  705. try {
  706. int nForms = Screen->FormCount;
  707. for (ii = nForms-1; ii >= 0; ii--)
  708. {
  709. if (Screen->Forms[ii] != this)
  710. {
  711. if (::IsWindow(Screen->Forms[ii]->Handle))
  712. {
  713. String sFormName = Screen->Forms[ii]->Name;
  714. if (sFormName == "ITSSkin") continue;
  715. if (sFormName == "FrmSkin") continue;
  716. if (sFormName == "FrmLang") continue;
  717. if (sFormName.SubString(1, 11) == "PlugInChart") continue;
  718. if (Screen->Forms[ii]->Owner == this ||
  719. Screen->Forms[ii]->Owner == Application)
  720. {
  721. Screen->Forms[ii]->Close();
  722. Application->ProcessMessages();
  723. try {
  724. WaitForSingleObject(Screen->Forms[ii]->Handle, 500);
  725. }catch(Exception &e) {}
  726. }
  727. }
  728. Application->ProcessMessages();
  729. }
  730. }
  731. } catch(...) {}
  732. }
  733. //---------------------------------------------------------------------------
  734. /*
  735. * 매1초 마다 주기적으로 실행되는 타이머
  736. * arguments
  737. * Sender : event handler 객체
  738. * return
  739. * void
  740. */
  741. void __fastcall TFrmMain::TmrAppStateTimer(TObject *Sender)
  742. {
  743. /*
  744. * 타이머가 1초간격으로 응용프로그램의 상태를 체크하고
  745. * 응용프로그램의 상태를 주기적으로 체크하여 필요한 조치를 수행한다.
  746. */
  747. if (g_AppCfg.bAppClose)
  748. {
  749. TmrAppState->Enabled = false;
  750. TmrPolling->Enabled = false;
  751. TmrDbCheck->Enabled = false;
  752. UserLogout(); // 로그아웃
  753. TerminateJobThread();
  754. ITSDb_Close();
  755. Close(); // 응용프로그램 종료
  756. }
  757. else
  758. {
  759. TmrAppState->Enabled = false;
  760. UpdateStatusBar();
  761. //UpdateCommStatus();
  762. if (g_AppCfg.AutoLogout.Enabled)
  763. {
  764. FLogoutTick++;
  765. if (FLogoutTick > (g_AppCfg.AutoLogout.IntervalMin*60))
  766. {
  767. //자동로그아웃처리
  768. g_AppCfg.bAppClose = true;
  769. g_AppCfg.AutoLogout.LogoutExit = true;
  770. }
  771. }
  772. TmrAppState->Enabled = true;
  773. }
  774. }
  775. //---------------------------------------------------------------------------
  776. void __fastcall TFrmMain::UpdateCommStatus()
  777. {
  778. static bool bStatus = false;
  779. #if 0
  780. if (CenterThreadMonitoring(true))
  781. {
  782. ((TdxStatusBarTextPanelStyle*)dxStatusBar->Panels->Items[isbComm]->PanelStyle)->ImageIndex = 7;
  783. }
  784. else
  785. #endif
  786. {
  787. ((TdxStatusBarTextPanelStyle*)dxStatusBar->Panels->Items[isbComm]->PanelStyle)->ImageIndex = bStatus ? 8 : 7;
  788. bStatus = !bStatus;
  789. }
  790. }
  791. //---------------------------------------------------------------------------
  792. void __fastcall TFrmMain::UpdateStatusBar()
  793. {
  794. try
  795. {
  796. dxStatusBar->Panels->Items[isbTime]->Text = Now().FormatString(STR_DATETIME);
  797. #if 0
  798. if (ITSDb_IsOpen())
  799. {
  800. if (((TdxStatusBarTextPanelStyle*)dxStatusBar->Panels->Items[isbDb]->PanelStyle)->ImageIndex != 8)
  801. ((TdxStatusBarTextPanelStyle*)dxStatusBar->Panels->Items[isbDb]->PanelStyle)->ImageIndex = 8;
  802. }
  803. else
  804. {
  805. if (((TdxStatusBarTextPanelStyle*)dxStatusBar->Panels->Items[isbDb]->PanelStyle)->ImageIndex != 7)
  806. ((TdxStatusBarTextPanelStyle*)dxStatusBar->Panels->Items[isbDb]->PanelStyle)->ImageIndex = 7;
  807. }
  808. #endif
  809. }
  810. catch(...)
  811. {
  812. }
  813. }
  814. //---------------------------------------------------------------------------
  815. void __fastcall TFrmMain::DebugMsg(String AMsg)
  816. {
  817. dxStatusBar->Panels->Items[isbMsg]->Text = " " + AMsg;
  818. dxStatusBar->Panels->Items[isbMsg]->StatusBarControl->Refresh();
  819. TmrDebugHide->Enabled = false;
  820. TmrDebugHide->Enabled = true;
  821. if (g_AppCfg.bDebug) ITSUtil_Trace(AnsiString("ITS_OP: " + AMsg).c_str());
  822. }
  823. //---------------------------------------------------------------------------
  824. void __fastcall TFrmMain::TmrDebugHideTimer(TObject *Sender)
  825. {
  826. dxStatusBar->Panels->Items[isbMsg]->Text = "";
  827. dxStatusBar->Panels->Items[isbMsg]->StatusBarControl->Refresh();
  828. TmrDebugHide->Enabled = false;
  829. }
  830. //---------------------------------------------------------------------------
  831. void __fastcall TFrmMain::InitStatusBar()
  832. {
  833. try
  834. {
  835. dxStatusBar->Panels->Items[isbGisPos]->Text = "";
  836. dxStatusBar->Panels->Items[isbTime]->Text = Now().FormatString(STR_DATETIME);
  837. if (g_pLOGIN)
  838. {
  839. String sUserName = g_pLOGIN->sUserName.Trim();
  840. if (sUserName == "") sUserName = g_pLOGIN->sUserId;
  841. dxStatusBar->Panels->Items[isbUser]->Text = sUserName;
  842. ((TdxStatusBarTextPanelStyle*)dxStatusBar->Panels->Items[isbUser]->PanelStyle)->ImageIndex = 9;
  843. }
  844. else
  845. {
  846. //dxStatusBar->Panels->Items[isbUser]->Text = g_pLOGIN->sUserName;// = "로그인 X";
  847. ((TdxStatusBarTextPanelStyle*)dxStatusBar->Panels->Items[isbUser]->PanelStyle)->ImageIndex = 9;
  848. }
  849. //dxStatusBar->Panels->Items[isbScale]->Visible = false;
  850. //dxStatusBar->Panels->Items[isbPos]->Visible = false;
  851. dxStatusBar->Panels->Items[isbHint]->Text = "";
  852. dxStatusBar->Panels->Items[isbMsg]->Text = "";
  853. //dxStatusBar->Panels->Items[isbDb]->Text = "DB";
  854. //dxStatusBar->Panels->Items[isbComm]->Text = "통신";
  855. UpdateStatusBar();
  856. }
  857. catch(...)
  858. {
  859. }
  860. }
  861. //---------------------------------------------------------------------------
  862. bool __fastcall TFrmMain::GetUserMenuRight(String AUserId, String AUserRight)
  863. {
  864. String sQry;
  865. TADOQuery *pADO = NULL;
  866. try
  867. {
  868. sQry = "SELECT OPERSYST_MENU_ID \r\n"
  869. " FROM TB_GROP_MENU_ATHR \r\n"
  870. " WHERE ATHR_YN = 'N' \r\n"
  871. " AND GROP_ID = (SELECT GROP_ID \r\n"
  872. " FROM TB_USER_INFR \r\n"
  873. " WHERE USER_ID = :p01) \r\n";
  874. try
  875. {
  876. pADO = new TADOQuery(NULL);
  877. pADO->Close();
  878. pADO->Connection = ITSDb_GetConnection();
  879. ITSDb_SQLText(pADO, sQry);
  880. ITSDb_SQLBind(pADO, "p01", AUserId);
  881. ITSDb_SQLOpen(pADO);
  882. for( ; !pADO->Eof; pADO->Next())
  883. {
  884. String sMenuId = pADO->FieldByName("OPERSYST_MENU_ID")->AsString;
  885. try
  886. {
  887. int nCompnentCnt = this->ComponentCount;
  888. for (int ii = 0; ii < nCompnentCnt; ii++)
  889. {
  890. String sClassName = this->Components[ii]->ClassName();
  891. if(sClassName == "TdxBarLargeButton")
  892. {
  893. TdxBarLargeButton *pMenu = (TdxBarLargeButton *)this->Components[ii];
  894. if (pMenu->Name == sMenuId)
  895. {
  896. pMenu->Enabled = false;
  897. break;
  898. }
  899. }
  900. }
  901. }
  902. catch(...)
  903. {
  904. }
  905. }
  906. }
  907. catch (Exception &exception)
  908. {
  909. throw Exception(String(exception.ClassName()) + exception.Message);
  910. }
  911. catch (...)
  912. {
  913. //throw Exception(FrmLang->lblDbErr->Caption);//"운영자권한정보 조회 중에 알수없는 오류가 발생하였습니다.");
  914. }
  915. }
  916. __finally
  917. {
  918. if (pADO)
  919. {
  920. pADO->Close();
  921. delete pADO;
  922. }
  923. }
  924. return true;
  925. }
  926. //---------------------------------------------------------------------------
  927. HWND __fastcall TFrmMain::FindChildWindow(String sFormName)
  928. {
  929. int nFormCnt = Screen->FormCount;
  930. for (int ii = 0; ii < nFormCnt; ii++)
  931. {
  932. TForm *pForm = Screen->Forms[ii];
  933. String sTmpFormName = pForm->Name.SubString(1, sFormName.Length());
  934. if (sTmpFormName == sFormName)
  935. {
  936. return pForm->Handle;
  937. }
  938. }
  939. return NULL;
  940. }
  941. //---------------------------------------------------------------------------
  942. void __fastcall TFrmMain::OnSkinClick(TObject *Sender)
  943. {
  944. TdxBarButton *pMenu = (TdxBarButton*)Sender;
  945. try {
  946. dxSkinController1->SkinName = pMenu->Caption;
  947. dxSkinController1->Refresh();
  948. //ITSSkin_SetName(dxSkinController1->SkinName);
  949. } catch(...) {}
  950. }
  951. //---------------------------------------------------------------------------
  952. void __fastcall TFrmMain::TmrPollingTimer(TObject *Sender)
  953. {
  954. TmrPolling->Enabled = false;
  955. DWORD dwTick = GetTickCount();
  956. UpdateThreadStatus(true); //작업스레드 실행 확인
  957. // 링크소통정보(전체)
  958. if (FPollTraffic00.IsPolling && FPollTraffic00.IsPollingTime(dwTick))
  959. {
  960. SetProcessWorkingSetSize(GetCurrentProcess(), -1, -1);
  961. FPollTraffic00.Polling = dwTick;
  962. PostJobMessage(WM_THREAD, WP_PARAM_TRAFFIC, LP_MSG_00);
  963. DebugMsg(FrmLang->cxLabel3->Caption + FrmLang->cxLabelReq->Caption);
  964. }
  965. // 링크소통정보
  966. if (FPollTraffic01.IsPolling && FPollTraffic01.IsPollingTime(dwTick))
  967. {
  968. FPollTraffic01.Polling = dwTick;
  969. PostJobMessage(WM_THREAD, WP_PARAM_TRAFFIC, LP_MSG_01);
  970. DebugMsg(FrmLang->cxLabel4->Caption + FrmLang->cxLabelReq->Caption);
  971. }
  972. // 서비스링크소통정보
  973. if (FPollTraffic02.IsPolling && FPollTraffic02.IsPollingTime(dwTick))
  974. {
  975. FPollTraffic02.Polling = dwTick;
  976. PostJobMessage(WM_THREAD, WP_PARAM_TRAFFIC, LP_MSG_02);
  977. DebugMsg(FrmLang->cxLabel5->Caption + FrmLang->cxLabelReq->Caption);
  978. }
  979. // 도로소통정보
  980. if (FPollTraffic03.IsPolling && FPollTraffic03.IsPollingTime(dwTick))
  981. {
  982. FPollTraffic03.Polling = dwTick;
  983. PostJobMessage(WM_THREAD, WP_PARAM_TRAFFIC, LP_MSG_03);
  984. DebugMsg(FrmLang->cxLabel6->Caption + FrmLang->cxLabelReq->Caption);
  985. }
  986. // 반복정체구간
  987. if (FPollTraffic04.IsPolling && FPollTraffic04.IsPollingTime(dwTick))
  988. {
  989. FPollTraffic04.Polling = dwTick;
  990. PostJobMessage(WM_THREAD, WP_PARAM_TRAFFIC, LP_MSG_04);
  991. DebugMsg(FrmLang->cxLabel7->Caption + FrmLang->cxLabelReq->Caption);
  992. }
  993. // UTIS운영정보
  994. if (FPollTraffic05.IsPolling && FPollTraffic05.IsPollingTime(dwTick))
  995. {
  996. FPollTraffic05.Polling = dwTick;
  997. DebugMsg(FrmLang->cxLabel18->Caption + FrmLang->cxLabelReq->Caption); //UTIS운영정보 조회, Database 운영정보조회
  998. PostJobMessage(WM_THREAD, WP_PARAM_TRAFFIC, LP_MSG_05);
  999. }
  1000. // 시설물상태정보
  1001. if (FPollStatus01.IsPolling && FPollStatus01.IsPollingTime(dwTick))
  1002. {
  1003. FPollStatus01.Polling = dwTick;
  1004. PostJobMessage(WM_THREAD, WP_PARAM_TRAFFIC, LP_MSG_11);
  1005. DebugMsg(FrmLang->cxLabel8->Caption + FrmLang->cxLabelReq->Caption);
  1006. }
  1007. // 프로세스상태정보
  1008. if (FPollStatus02.IsPolling && FPollStatus02.IsPollingTime(dwTick))
  1009. {
  1010. FPollStatus02.Polling = dwTick;
  1011. PostJobMessage(WM_THREAD, WP_PARAM_TRAFFIC, LP_MSG_12);
  1012. DebugMsg(FrmLang->cxLabel9->Caption + FrmLang->cxLabelReq->Caption);
  1013. }
  1014. // 돌발정보
  1015. if (FPollStatus03.IsPolling && FPollStatus03.IsPollingTime(dwTick))
  1016. {
  1017. FPollStatus03.Polling = dwTick;
  1018. PostJobMessage(WM_THREAD, WP_PARAM_TRAFFIC, LP_MSG_13);
  1019. DebugMsg(FrmLang->cxLabel10->Caption + FrmLang->cxLabelReq->Caption);
  1020. }
  1021. // 블랙박스이벤트
  1022. if (FPollEvent01.IsPolling && FPollEvent01.IsPollingTime(dwTick))
  1023. {
  1024. FPollEvent01.Polling = dwTick;
  1025. //PostJobMessage(WM_THREAD, WP_PARAM_TRAFFIC, LP_MSG_16);
  1026. DebugMsg(FrmLang->cxLabel11->Caption + FrmLang->cxLabelReq->Caption);
  1027. }
  1028. if (FPollVilgFrcs.IsPolling && FPollVilgFrcs.IsPollingTime(dwTick))
  1029. {
  1030. FPollVilgFrcs.Polling = dwTick;
  1031. //PostJobMessage(WM_THREAD, WP_PARAM_TRAFFIC, LP_MSG_17);
  1032. DebugMsg(FrmLang->cxLabel12->Caption + FrmLang->cxLabelReq->Caption);
  1033. }
  1034. if (Now().FormatString("nn") == "13")
  1035. {
  1036. // 매시 10분에 기상정보를 저장하니까 13분에 디비에서 읽자
  1037. String sCurrTm = Now().FormatString("hh");
  1038. }
  1039. if (!g_AppCfg.bAppClose) TmrPolling->Enabled = true;
  1040. }
  1041. //---------------------------------------------------------------------------
  1042. /*
  1043. * 작업스레드로 작업 메시지를 전송한다.
  1044. * arguments
  1045. *
  1046. * return
  1047. * void
  1048. */
  1049. bool __fastcall TFrmMain::PostJobMessage(UINT nMsg, int WParam/*=0*/, int LParam/*=0*/)
  1050. {
  1051. int nRes;
  1052. if (g_AppCfg.bDebug) ITSUtil_Trace("PostJobMessage: Msg: %02X, WParam: %02X, LParam: %02X", nMsg, WParam, LParam);
  1053. if (g_AppCfg.thr.dwThreadId)
  1054. {
  1055. for (int ii = 0; ii < 3; ii++)
  1056. {
  1057. if (PostThreadMessageW(g_AppCfg.thr.dwThreadId, nMsg, WParam, LParam))
  1058. {
  1059. nRes = 0;
  1060. return true;
  1061. }
  1062. else
  1063. {
  1064. nRes = GetLastError();
  1065. if (ERROR_INVALID_THREAD_ID == nRes)
  1066. {
  1067. Sleep(500);
  1068. continue;
  1069. }
  1070. }
  1071. }
  1072. }
  1073. return false;
  1074. }
  1075. //---------------------------------------------------------------------------
  1076. /*
  1077. * 통합모니터링 화면 호출
  1078. */
  1079. void __fastcall TFrmMain::NITS0000MClick(TObject *Sender)
  1080. {
  1081. FORMSHOW(ITS0000M);
  1082. }
  1083. //---------------------------------------------------------------------------
  1084. /*
  1085. * 현재소통정보 조회 화면 호출
  1086. */
  1087. void __fastcall TFrmMain::NITS0010MClick(TObject *Sender)
  1088. {
  1089. FORMSHOW(ITS0010M);
  1090. }
  1091. //---------------------------------------------------------------------------
  1092. /*
  1093. * 소통정보제보 관리 화면 호출
  1094. */
  1095. void __fastcall TFrmMain::NITS0020MClick(TObject *Sender)
  1096. {
  1097. FORMSHOW(ITS0020M);
  1098. }
  1099. //---------------------------------------------------------------------------
  1100. /*
  1101. * 돌발상황정보 관리 화면 호출
  1102. */
  1103. void __fastcall TFrmMain::NITS0030MClick(TObject *Sender)
  1104. {
  1105. FORMSHOW(ITS0030M);
  1106. }
  1107. //---------------------------------------------------------------------------
  1108. /*
  1109. * 반복정체구간관리 화면 호출
  1110. */
  1111. void __fastcall TFrmMain::NITS0040MClick(TObject *Sender)
  1112. {
  1113. FORMSHOW(ITS0040M);
  1114. }
  1115. //---------------------------------------------------------------------------
  1116. /*
  1117. * 노드관리 화면 호출
  1118. */
  1119. void __fastcall TFrmMain::NIDB0010MClick(TObject *Sender)
  1120. {
  1121. FORMSHOW(IDB0010M);
  1122. }
  1123. //---------------------------------------------------------------------------
  1124. /*
  1125. * 링크관리 화면 호출
  1126. */
  1127. void __fastcall TFrmMain::NIDB0020MClick(TObject *Sender)
  1128. {
  1129. FORMSHOW(IDB0020M);
  1130. }
  1131. //---------------------------------------------------------------------------
  1132. /*
  1133. * 도로관리 화면 호출
  1134. */
  1135. void __fastcall TFrmMain::NIDB0030MClick(TObject *Sender)
  1136. {
  1137. FORMSHOW(IDB0030M);
  1138. }
  1139. //---------------------------------------------------------------------------
  1140. /*
  1141. * 회전정보 화면 호출
  1142. */
  1143. void __fastcall TFrmMain::NIDB0040MClick(TObject *Sender)
  1144. {
  1145. FORMSHOW(IDB0040M);
  1146. }
  1147. //---------------------------------------------------------------------------
  1148. /*
  1149. * 간선도로 관리 화면 호출
  1150. */
  1151. void __fastcall TFrmMain::NIDB0120MClick(TObject *Sender)
  1152. {
  1153. FORMSHOW(IDB0120M);
  1154. }
  1155. //---------------------------------------------------------------------------
  1156. /*
  1157. * 운영자그룹 메뉴관리 화면 호출
  1158. */
  1159. void __fastcall TFrmMain::NIDB0130MClick(TObject *Sender)
  1160. {
  1161. FORMSHOW(IDB0130M);
  1162. }
  1163. //---------------------------------------------------------------------------
  1164. /*
  1165. * 파라미터관리 화면 호출
  1166. */
  1167. void __fastcall TFrmMain::NIDB0050MClick(TObject *Sender)
  1168. {
  1169. FORMSHOW(IDB0050M);
  1170. }
  1171. //---------------------------------------------------------------------------
  1172. /*
  1173. * 소통등급관리 화면 호출
  1174. */
  1175. void __fastcall TFrmMain::NIDB0060MClick(TObject *Sender)
  1176. {
  1177. FORMSHOW(IDB0060M);
  1178. }
  1179. //---------------------------------------------------------------------------
  1180. /*
  1181. * 휴일관리 화면 호출
  1182. */
  1183. void __fastcall TFrmMain::NIDB0070MClick(TObject *Sender)
  1184. {
  1185. FORMSHOW(IDB0070M);
  1186. }
  1187. //---------------------------------------------------------------------------
  1188. /*
  1189. * 운영코드 관리 화면 호출
  1190. */
  1191. void __fastcall TFrmMain::NIDB0080MClick(TObject *Sender)
  1192. {
  1193. FORMSHOW(IDB0080M);
  1194. }
  1195. //---------------------------------------------------------------------------
  1196. /*
  1197. * 운영자관리 화면 호출
  1198. */
  1199. void __fastcall TFrmMain::NIDB0090MClick(TObject *Sender)
  1200. {
  1201. FORMSHOW(IDB0090M);
  1202. }
  1203. //---------------------------------------------------------------------------
  1204. /*
  1205. * 기관관리 화면 호출
  1206. */
  1207. void __fastcall TFrmMain::NIDB0110MClick(TObject *Sender)
  1208. {
  1209. FORMSHOW(IDB0110M);
  1210. }
  1211. //---------------------------------------------------------------------------
  1212. /*
  1213. * 서버/프로세스관리 화면 호출
  1214. */
  1215. void __fastcall TFrmMain::NIDB0100MClick(TObject *Sender)
  1216. {
  1217. FORMSHOW(IDB0100M);
  1218. }
  1219. //---------------------------------------------------------------------------
  1220. /*
  1221. * 시스템 환경설정 화면 호출
  1222. */
  1223. void __fastcall TFrmMain::NCFG0000MClick(TObject *Sender)
  1224. {
  1225. String sIniFile = ChangeFileExt(ExtractFileName(Application->ExeName), ".ini");
  1226. CFG0000M = new TCFG0000M(this);
  1227. CFG0000M->IniFile = sIniFile;
  1228. CFG0000M->ShowModal();
  1229. delete CFG0000M;
  1230. CFG0000M = NULL;
  1231. if (NITS0000M->Enabled)
  1232. {
  1233. HWND hWnd = FindChildWindow("ITS0000M");
  1234. if (hWnd) POST_MSG(hWnd, WM_MAINFORM, WP_DB_SELECT_OK, LP_MSG_11);
  1235. }
  1236. ShowFacilityStatus();
  1237. }
  1238. //---------------------------------------------------------------------------
  1239. /*
  1240. * 지도 레이어 설정 화면 호출
  1241. */
  1242. void __fastcall TFrmMain::NCFG0001MClick(TObject *Sender)
  1243. {
  1244. try {
  1245. if (ITS00MAP)
  1246. {
  1247. ITS00MAP->ShowLayerEditForm();
  1248. }
  1249. else
  1250. {
  1251. Application->MessageBox(L"지도레이어 설정은 메인화면이 실행되어 있을때 설정할 수 있습니다.\r\n메인화면을 먼저 실행하세요.",
  1252. L"지도레이어 설정", MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  1253. }
  1254. } catch(...) {}
  1255. }
  1256. //---------------------------------------------------------------------------
  1257. void __fastcall TFrmMain::dxSkinChooserGalleryItem1SkinChanged(TObject *Sender, const UnicodeString ASkinName)
  1258. {
  1259. g_AppCfg.sSkinName = ASkinName;
  1260. WriteConfigInfo(g_AppCfg.sConfigFile, "APPLICATION", "SKINNAME", g_AppCfg.sSkinName);
  1261. SetColorScheme(ASkinName);
  1262. }
  1263. //---------------------------------------------------------------------------
  1264. void __fastcall TFrmMain::SetColorScheme(String ASkinName)
  1265. {
  1266. Ribbon->ColorSchemeName = ASkinName;
  1267. dxSkinController1->SkinName = ASkinName;
  1268. dxSkinController1->Refresh();
  1269. dxTabbedMDIManager1->LookAndFeel->SkinName = ASkinName;
  1270. dxStatusBar->Invalidate();
  1271. //Panel1->Color = Ribbon->ColorScheme->GetPartColor(rfspRibbonForm);
  1272. //Ribbon.ColorSchemeName := AName;
  1273. //SkinChooserSelectSkinName(AName);
  1274. //Panel1.Color := Ribbon.ColorScheme.GetPartColor(rfspRibbonForm);
  1275. //dxStatusBar.Invalidate;
  1276. }
  1277. //---------------------------------------------------------------------------
  1278. void __fastcall TFrmMain::ExecuteItsProgram(String AClassName, String AExeName, String AOption)
  1279. {
  1280. HWND hExeForm = FindWindow(AClassName.c_str(), NULL);
  1281. if (hExeForm)
  1282. {
  1283. SetWindowPos(hExeForm, HWND_TOP, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE);
  1284. }
  1285. else
  1286. {
  1287. String sExeName = "";
  1288. String sExeParam= "";
  1289. //if (!ReadConfigInfo(g_AppCfg.sConfigFile, "PROGRAM", AOption, sExeName))
  1290. {
  1291. if (g_AppCfg.sAppPath == "")
  1292. {
  1293. sExeName = AExeName;
  1294. }
  1295. else
  1296. {
  1297. sExeName = g_AppCfg.sAppPath + "\\" + AExeName;
  1298. }
  1299. sExeParam = g_pLOGIN->sUserId;
  1300. }
  1301. ShellExecute(Handle, NULL, sExeName.c_str(), sExeParam.c_str(), NULL, SW_SHOWNORMAL);
  1302. }
  1303. }
  1304. //---------------------------------------------------------------------------
  1305. void __fastcall TFrmMain::TermItsProgram(String AClassName, String AExeName)
  1306. {
  1307. HWND hExeForm = FindWindow(AClassName.c_str(), NULL);
  1308. if (hExeForm)
  1309. {
  1310. POST_MSG(hExeForm, WM_CLOSE, 0, 0);
  1311. }
  1312. }
  1313. //---------------------------------------------------------------------------
  1314. /*
  1315. * 시설물 정보 관리 화면 호출
  1316. */
  1317. void __fastcall TFrmMain::NIFM0010MClick(TObject *Sender)
  1318. {
  1319. FORMSHOW(IFM0010M);
  1320. }
  1321. //---------------------------------------------------------------------------
  1322. /*
  1323. * 시설물 업체 관리 화면 호출
  1324. */
  1325. void __fastcall TFrmMain::NIFM0020MClick(TObject *Sender)
  1326. {
  1327. FORMSHOW(IFM0020M);
  1328. }
  1329. //---------------------------------------------------------------------------
  1330. /*
  1331. * 시설물 장애 관리 화면 호출
  1332. */
  1333. void __fastcall TFrmMain::NIFM0030MClick(TObject *Sender)
  1334. {
  1335. FORMSHOW(IFM0030M);
  1336. }
  1337. //---------------------------------------------------------------------------
  1338. /*
  1339. * EXE 프로그램 실행시킴
  1340. */
  1341. void __fastcall TFrmMain::OnRunProgramClick(TObject *Sender)
  1342. {
  1343. TdxBarLargeButton *pButton = (TdxBarLargeButton*)Sender;
  1344. int nIdx = pButton->Tag;
  1345. if (nIdx < 0 || nIdx >= MAX_EXEPROGRAM) return;
  1346. if (g_RunProgram[nIdx].AClassName == "") return;
  1347. ExecuteItsProgram(g_RunProgram[nIdx].AClassName, g_RunProgram[nIdx].AExeName, g_RunProgram[nIdx].AOption);
  1348. }
  1349. //---------------------------------------------------------------------------
  1350. /*
  1351. * 운영자 접속이력 화면 호출
  1352. */
  1353. void __fastcall TFrmMain::NIHS0010MClick(TObject *Sender)
  1354. {
  1355. FORMSHOW(IHS0010M);
  1356. }
  1357. //---------------------------------------------------------------------------
  1358. /*
  1359. * 프로세스 이력조회 화면 호출
  1360. */
  1361. void __fastcall TFrmMain::NIHS0020MClick(TObject *Sender)
  1362. {
  1363. FORMSHOW(IHS0020M);
  1364. }
  1365. //---------------------------------------------------------------------------
  1366. /*
  1367. * 수집데이터 이력조회 화면 호출
  1368. */
  1369. void __fastcall TFrmMain::NIHS0030MClick(TObject *Sender)
  1370. {
  1371. FORMSHOW(IHS0030M);
  1372. }
  1373. //---------------------------------------------------------------------------
  1374. /*
  1375. * 가공데이터 이력조회 화면 호출
  1376. */
  1377. void __fastcall TFrmMain::NIHS0040MClick(TObject *Sender)
  1378. {
  1379. FORMSHOW(IHS0040M);
  1380. }
  1381. //---------------------------------------------------------------------------
  1382. /*
  1383. * 교통정보 수집결과 분석조회 화면 호출
  1384. */
  1385. void __fastcall TFrmMain::NIAN0010MClick(TObject *Sender)
  1386. {
  1387. FORMSHOW(IAN0010M);
  1388. }
  1389. //---------------------------------------------------------------------------
  1390. /*
  1391. * 교통정보 가공결과 분석조회 화면 호출
  1392. */
  1393. void __fastcall TFrmMain::NIAN0020MClick(TObject *Sender)
  1394. {
  1395. FORMSHOW(IAN0020M);
  1396. }
  1397. //---------------------------------------------------------------------------
  1398. /*
  1399. * 교통정보 제공결과 분석조회 화면 호출
  1400. */
  1401. void __fastcall TFrmMain::NIAN0030MClick(TObject *Sender)
  1402. {
  1403. FORMSHOW(IAN0030M);
  1404. }
  1405. //---------------------------------------------------------------------------
  1406. /*
  1407. * 소통정보 이력분석화면 호출
  1408. */
  1409. void __fastcall TFrmMain::NIAN0040MClick(TObject *Sender)
  1410. {
  1411. FORMSHOW(IAN0040M);
  1412. }
  1413. //---------------------------------------------------------------------------
  1414. /*
  1415. * 패턴데이터 분석화면 호출
  1416. */
  1417. void __fastcall TFrmMain::NIAN0050MClick(TObject *Sender)
  1418. {
  1419. FORMSHOW(IAN0050M);
  1420. }
  1421. //---------------------------------------------------------------------------
  1422. /*
  1423. * 반복정체구간 분석화면 호출
  1424. */
  1425. void __fastcall TFrmMain::NIAN0060MClick(TObject *Sender)
  1426. {
  1427. FORMSHOW(IAN0060M);
  1428. }
  1429. //---------------------------------------------------------------------------
  1430. /*
  1431. * 인터넷 접속통계화면 호출
  1432. */
  1433. void __fastcall TFrmMain::NIST0010MClick(TObject *Sender)
  1434. {
  1435. FORMSHOW(IST0010M);
  1436. }
  1437. //---------------------------------------------------------------------------
  1438. /*
  1439. * CCTV 접속통계화면 호출
  1440. */
  1441. void __fastcall TFrmMain::NIST0020MClick(TObject *Sender)
  1442. {
  1443. FORMSHOW(IST0020M);
  1444. }
  1445. //---------------------------------------------------------------------------
  1446. /*
  1447. * 소통정보 통계화면 호출
  1448. */
  1449. void __fastcall TFrmMain::NIST0030MClick(TObject *Sender)
  1450. {
  1451. FORMSHOW(IST0030M);
  1452. }
  1453. //---------------------------------------------------------------------------
  1454. void __fastcall TFrmMain::NIST0070MClick(TObject *Sender)
  1455. {
  1456. FORMSHOW(IST0070M);
  1457. }
  1458. //---------------------------------------------------------------------------
  1459. void __fastcall TFrmMain::NIST0080MClick(TObject *Sender)
  1460. {
  1461. FORMSHOW(IST0080M);
  1462. }
  1463. //---------------------------------------------------------------------------
  1464. /*
  1465. * 돌발상황 통계화면 호출
  1466. */
  1467. void __fastcall TFrmMain::NIST0040MClick(TObject *Sender)
  1468. {
  1469. FORMSHOW(IST0040M);
  1470. }
  1471. //---------------------------------------------------------------------------
  1472. /*
  1473. * 시설물 통신단절통계화면 호출
  1474. */
  1475. void __fastcall TFrmMain::NIST0050MClick(TObject *Sender)
  1476. {
  1477. FORMSHOW(IST0050M);
  1478. }
  1479. //---------------------------------------------------------------------------
  1480. /*
  1481. * 프로세스 상태통계화면 호출
  1482. */
  1483. void __fastcall TFrmMain::NIST0060MClick(TObject *Sender)
  1484. {
  1485. FORMSHOW(IST0060M);
  1486. }
  1487. //---------------------------------------------------------------------------
  1488. void __fastcall TFrmMain::NIRP0010MClick(TObject *Sender)
  1489. {
  1490. FORMSHOW(IRP0010M);
  1491. }
  1492. //---------------------------------------------------------------------------
  1493. /*
  1494. * Application Hint Display Event Handler
  1495. * arguments
  1496. *
  1497. * return
  1498. *
  1499. */
  1500. void __fastcall TFrmMain::OnAppHint(TObject *Sender)
  1501. {
  1502. dxStatusBar->Panels->Items[isbHint]->Text = " " + Application->Hint;
  1503. dxStatusBar->Panels->Items[isbHint]->StatusBarControl->Refresh();
  1504. }
  1505. //---------------------------------------------------------------------------
  1506. /*
  1507. * Application Exception Event Handler
  1508. * arguments
  1509. *
  1510. * return
  1511. *
  1512. */
  1513. void __fastcall TFrmMain::OnAppException(TObject *Sender, Exception *exception)
  1514. {
  1515. if (g_AppCfg.bAppClose)
  1516. {
  1517. ITSDb_Close();
  1518. Close(); // 응용프로그램 종료
  1519. }
  1520. String sClassName = (NULL != Sender) ? Sender->ClassName() : String("Unknown_Class");
  1521. String sErrMsg = (NULL != exception) ? exception->Message : String("Unknown_Error");
  1522. String sError = sClassName + " : " + sErrMsg;
  1523. //Application->ShowException(&exception);
  1524. if (sError.Pos("ORA") || sError.Pos("TBR"))
  1525. {
  1526. ITSDb_Close();
  1527. }
  1528. else
  1529. {
  1530. Application->NormalizeTopMosts();
  1531. Application->MessageBox(sError.c_str(), L"System Error", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  1532. Application->RestoreTopMosts();
  1533. }
  1534. }
  1535. //---------------------------------------------------------------------------
  1536. void __fastcall TFrmMain::UpdateThreadStatus(bool ARequest, bool APing/*=true*/)
  1537. {
  1538. return;
  1539. try
  1540. {
  1541. if (APing) if (ARequest) PostJobMessage(WM_THREAD, WP_PING);
  1542. ((TdxStatusBarTextPanelStyle*)dxStatusBar->Panels->Items[isbStatus]->PanelStyle)->ImageIndex = ARequest ? 7 : 8;
  1543. dxStatusBar->Panels->Items[isbDb]->StatusBarControl->Refresh();
  1544. }
  1545. catch(...)
  1546. {
  1547. }
  1548. }
  1549. //---------------------------------------------------------------------------
  1550. void __fastcall TFrmMain::UpdateDbStatus(bool ASelect)
  1551. {
  1552. try
  1553. {
  1554. ((TdxStatusBarTextPanelStyle*)dxStatusBar->Panels->Items[isbDb]->PanelStyle)->ImageIndex = ASelect ? 7 : 8;
  1555. dxStatusBar->Panels->Items[isbDb]->StatusBarControl->Refresh();
  1556. }
  1557. catch(...)
  1558. {
  1559. }
  1560. }
  1561. //---------------------------------------------------------------------------
  1562. /*
  1563. * Application Event Message Handler
  1564. * arguments
  1565. *
  1566. * return
  1567. *
  1568. */
  1569. void __fastcall TFrmMain::ApplicationEvents1Message(tagMSG &Msg, bool &Handled)
  1570. {
  1571. switch(Msg.message)
  1572. {
  1573. case WM_THREAD:
  1574. switch(Msg.wParam)
  1575. {
  1576. case WP_PING:
  1577. UpdateThreadStatus(false); //스레드 핑 확인
  1578. break;
  1579. case WP_PARAM_TRAFFIC:
  1580. break;
  1581. case WP_DB_SELECT_START:
  1582. UpdateDbStatus(true);
  1583. break;
  1584. case WP_DB_SELECT_OK:
  1585. case WP_DB_SELECT_ERROR:
  1586. case WP_DB_SELECT_CANCEL:
  1587. UpdateDbStatus(false);
  1588. if (Msg.wParam == WP_DB_SELECT_OK)
  1589. {
  1590. OnRefreshMessage(Msg.wParam, Msg.lParam);
  1591. }
  1592. else
  1593. {
  1594. DebugMsg(FrmLang->cxLabel13->Caption);
  1595. }
  1596. break;
  1597. }
  1598. break;
  1599. #if 0
  1600. case WM_VCOMMDATA_RECV:
  1601. OnUdpDataRecvMessage(Msg);
  1602. break;
  1603. #endif
  1604. case WM_DATABASE_REFRESH:
  1605. OnDatabaseMessage(Msg.wParam, Msg.lParam);
  1606. break;
  1607. case WM_PLUGINFORM:
  1608. OnRefreshMessage(Msg.wParam, Msg.lParam);
  1609. break;
  1610. case WM_MOUSEMOVE:
  1611. case WM_KEYDOWN:
  1612. case WM_KEYUP:
  1613. FLogoutTick = 0;
  1614. break;
  1615. case WM_USER+0xF4:
  1616. if (Msg.wParam == 0xB2)
  1617. {
  1618. ITSDb_Close();
  1619. DebugMsg(FrmLang->cxLabel14->Caption);
  1620. }
  1621. break;
  1622. }
  1623. }
  1624. //---------------------------------------------------------------------------
  1625. void __fastcall TFrmMain::OnRefreshMessage(WPARAM AWParam, LPARAM ALParam)
  1626. {
  1627. HWND hWnd;
  1628. if (AWParam == WP_DB_SELECT_OK)
  1629. {
  1630. DWORD dwTick = GetTickCount();
  1631. switch(ALParam)
  1632. {
  1633. case LP_MSG_00: DebugMsg(FrmLang->cxLabel3->Caption + FrmLang->cxLabelRes->Caption); FPollTraffic00.Polling = dwTick; break;
  1634. case LP_MSG_01: DebugMsg(FrmLang->cxLabel4->Caption + FrmLang->cxLabelRes->Caption); FPollTraffic01.Polling = dwTick; break;
  1635. case LP_MSG_02: DebugMsg(FrmLang->cxLabel5->Caption + FrmLang->cxLabelRes->Caption); FPollTraffic02.Polling = dwTick; break;
  1636. case LP_MSG_03: DebugMsg(FrmLang->cxLabel6->Caption + FrmLang->cxLabelRes->Caption); FPollTraffic03.Polling = dwTick; break;
  1637. case LP_MSG_04: DebugMsg(FrmLang->cxLabel7->Caption + FrmLang->cxLabelRes->Caption); FPollTraffic04.Polling = dwTick; break;
  1638. case LP_MSG_11: DebugMsg(FrmLang->cxLabel8->Caption + FrmLang->cxLabelRes->Caption); FPollStatus01.Polling = dwTick; break;
  1639. case LP_MSG_12: DebugMsg(FrmLang->cxLabel9->Caption + FrmLang->cxLabelRes->Caption); FPollStatus02.Polling = dwTick; break;
  1640. case LP_MSG_13: DebugMsg(FrmLang->cxLabel10->Caption + FrmLang->cxLabelRes->Caption); FPollStatus03.Polling = dwTick; break;
  1641. case LP_MSG_16: DebugMsg(FrmLang->cxLabel11->Caption + FrmLang->cxLabelRes->Caption); FPollEvent01.Polling = dwTick; break;
  1642. case LP_MSG_17: DebugMsg(FrmLang->cxLabel12->Caption + FrmLang->cxLabelRes->Caption); FPollVilgFrcs.Polling = dwTick; break;
  1643. case LP_MSG_05: DebugMsg(FrmLang->cxLabel18->Caption + FrmLang->cxLabelRes->Caption); FPollTraffic05.Polling = dwTick; break;
  1644. case LP_MSG_09: DebugMsg(FrmLang->cxLabel15->Caption + FrmLang->cxLabelRes->Caption); break; //프로세스정보 재로딩
  1645. case LP_MSG_14: DebugMsg(FrmLang->cxLabel16->Caption + FrmLang->cxLabelRes->Caption); break; //시설물정보 재로딩
  1646. }
  1647. if (NITS0000M->Enabled)
  1648. {
  1649. hWnd = FindChildWindow("ITS0000M");
  1650. if (hWnd) POST_MSG(hWnd, WM_MAINFORM, AWParam, ALParam);
  1651. }
  1652. if (ALParam == LP_MSG_11)
  1653. {
  1654. //시설물 상태정보 업데이트
  1655. ShowFacilityStatus();
  1656. }
  1657. else
  1658. if (ALParam == LP_MSG_13)
  1659. {
  1660. //돌발발생정보
  1661. ShowAutoIncidentInfo();
  1662. }
  1663. }
  1664. else
  1665. if (AWParam == WP_MSG_15)
  1666. {
  1667. if (LP_MSG_15 == ALParam)
  1668. {
  1669. if (g_AppCfg.bDebug) ITSUtil_Trace("LP_MSG_15-GisSelectLink");
  1670. if (NITS0000M->Enabled)
  1671. {
  1672. hWnd = FindChildWindow("ITS0000M");
  1673. if (hWnd) POST_MSG(hWnd, WM_MAINFORM, AWParam, ALParam);
  1674. }
  1675. }
  1676. }
  1677. else
  1678. {
  1679. LOGERROR("DB Thread failed: %02X[%02X]", ALParam, AWParam);
  1680. }
  1681. }
  1682. //---------------------------------------------------------------------------
  1683. void __fastcall TFrmMain::OnDatabaseMessage(WPARAM AWParam, LPARAM ALParam)
  1684. {
  1685. HWND hWnd;
  1686. switch(AWParam)
  1687. {
  1688. case WP_MSG_01: //소통등급변경
  1689. case WP_MSG_02: //돌발정보변경(오보/등록/해제)
  1690. if (NITS0000M->Enabled)
  1691. {
  1692. hWnd = FindChildWindow("ITS0000M");
  1693. if (hWnd) POST_MSG(hWnd, WM_MAINFORM, AWParam, ALParam);
  1694. }
  1695. break;
  1696. case WP_MSG_03: //시설물 정보 변경
  1697. DebugMsg(FrmLang->cxLabel16->Caption + FrmLang->cxLabelReq->Caption);
  1698. PostJobMessage(WM_THREAD, WP_PARAM_TRAFFIC, LP_MSG_14);
  1699. //hWnd = FindChildWindow("ITS0000M");
  1700. //if (hWnd) POST_MSG(hWnd, WM_MAINFORM, AWParam, ALParam);
  1701. break;
  1702. case WP_MSG_04: // IDB0070M-휴일정보
  1703. case WP_MSG_05: // FrmLinkGradeSet-구간등급변경
  1704. case WP_MSG_06: // IDB0060M - 소통등급
  1705. case WP_MSG_07: // IDB0050M -교통파라미터
  1706. //VComm_NodeLinkChangeReq();
  1707. break;
  1708. case WP_MSG_09: // IDB0100M
  1709. DebugMsg(FrmLang->cxLabel12->Caption + FrmLang->cxLabelReq->Caption);
  1710. PostJobMessage(WM_THREAD, WP_PARAM_TRAFFIC, LP_MSG_09); //작업스레드에서 읽어 처리하도록 한다.
  1711. break;
  1712. case WP_MSG_14: // DSRM010M -DSRC-RSE 관리
  1713. PostJobMessage(WM_THREAD, WP_PARAM_TRAFFIC, LP_MSG_14); //작업스레드에서 읽어 처리하도록 한다.
  1714. break;
  1715. default:
  1716. LOGERROR("Unknown Database Msg: %02X[%02X]", ALParam, AWParam);
  1717. break;
  1718. }
  1719. }
  1720. //---------------------------------------------------------------------------
  1721. void __fastcall TFrmMain::OnUdpDataRecvMessage(TMessage &Msg)
  1722. {
  1723. int nResult;
  1724. IPCUDPMESSAGESTRUCT *RcvData = (IPCUDPMESSAGESTRUCT*)Msg.LParam;
  1725. INT_SENDER *Sender = &RcvData->Sender;
  1726. INT_PACKET *Pkt = &RcvData->Pkt;
  1727. INT_HEAD *head = &Pkt->head;
  1728. INT_DATA *data = &Pkt->data;
  1729. char *pData = &data->Data[2];
  1730. BYTE OpCode = (BYTE)data->Data[0];
  1731. LOGINFO("*** OPR Client Req: %s.%d", VComm_ulong2ip(Sender->IP), Sender->Port);
  1732. String sMsg = "";
  1733. String sVmsNmbr = "";
  1734. //UpdateVmsCommStatus(false);
  1735. if (head->OPCode == INT_OP_COMM_COMMON)
  1736. {
  1737. switch(OpCode)
  1738. {
  1739. case INT_OP_PG_STATE_RES:
  1740. {
  1741. DebugMsg(FrmLang->cxLabel19->Caption);
  1742. INT_PG_STATE_RES *ARes = (INT_PG_STATE_RES*)pData;
  1743. for (int ii = 0; ii < ARes->Count && ii < INT_MAX_PG_STATE; ii++)
  1744. {
  1745. if (ARes->Unit[ii].Type == INT_ID_VMS_SERVER)
  1746. {
  1747. #if 0
  1748. FVmsServerState = ARes->Unit[ii].Action;
  1749. UpdateVmsCommStatus(false);
  1750. FPollPrcsState.Polling = GetTickCount(); //프로세스상태정보 조회 타이머 리셋
  1751. #endif
  1752. break;
  1753. }
  1754. }
  1755. }
  1756. break;
  1757. case INT_OP_VMS_STATE_RES:
  1758. {
  1759. char szVmsNmbr[INT_VMS_MAX_ID+1];
  1760. INT_VMS_STATE_RES *ARes = (INT_VMS_STATE_RES*)pData;
  1761. sMsg = "";
  1762. //sMsg.printf(L"*** VMS 제어기 상태정보 수신: %d EA", ARes->Count);
  1763. sMsg.printf(FrmLang->cxLabel19->Caption.c_str(), ARes->Count);
  1764. DebugMsg(sMsg);
  1765. #if 0
  1766. for (int ii = 0; ii < ARes->Count && ii < INT_MAX_VMS_STATE; ii++)
  1767. {
  1768. sMsg = "";
  1769. String sVmsNmbr;
  1770. INT_VMS_STATE *pVms = &ARes->Unit[ii];
  1771. sprintf(szVmsNmbr, "%.*s", INT_VMS_MAX_ID, (char*)pVms->VmsId);
  1772. sVmsNmbr = String(szVmsNmbr);
  1773. TVmsCtlr *pObj = VmsManager->FLists.Find(sVmsNmbr);
  1774. if (pObj)
  1775. {
  1776. VmsStatusCopy(&pObj->WSTATE, pVms);
  1777. if (pObj->WSTATE.OprMode == 'A') pObj->OPER_MODE = "A";
  1778. else if (pObj->WSTATE.OprMode == 'B') pObj->OPER_MODE = "B";
  1779. else pObj->OPER_MODE = "F";
  1780. pObj->VMS_PHSE_CHNG_CYCL = pObj->WSTATE.ScheduledMessageOperatingTime;
  1781. pObj->VMS_CMNC_ERR_BASS_VAL = pObj->WSTATE.ModuleOperatingTemperature;
  1782. pObj->FAN_MTNS_TMPR = pObj->WSTATE.FanOperatingTemperature;
  1783. pObj->HETR_MTNS_TMPR = pObj->WSTATE.HeaterOperatingTemperature;
  1784. pObj->VMS_MODL_ERR_RATE = pObj->WSTATE.ModuleBasicFailureRate;
  1785. pObj->CheckRunState();
  1786. }
  1787. else
  1788. {
  1789. sMsg.printf(L"INT_OP_VMS_STATE_RES VMS not found: %s", sVmsNmbr.c_str());
  1790. DebugMsg(sMsg);
  1791. }
  1792. }
  1793. RefreshVmsMessage(WM_VMS_STATE_REFRESH);
  1794. FPollVmsState.Polling = GetTickCount();
  1795. #endif
  1796. }
  1797. break;
  1798. case INT_OP_VMS_FORM_SAVE:
  1799. {
  1800. #if 0
  1801. FPollVmsMsg.Reset(); //VMS메시지 조회 타이머 리셋
  1802. char szDateTime[INT_VMS_MAX_DATETIME+1];
  1803. INT_VMS_FORM_SAVE_REQ *AReq = (INT_VMS_FORM_SAVE_REQ*)pData;
  1804. sprintf(szDateTime, "%.*s", INT_VMS_MAX_DATETIME, (char*)AReq->Date);
  1805. String sDateTime = String(szDateTime);
  1806. sMsg = "";
  1807. sMsg.printf(L"*** VMS 폼생성 완료 메시지 수신: %s", sDateTime.c_str());
  1808. DebugMsg(sMsg);
  1809. #endif
  1810. }
  1811. break;
  1812. case INT_OP_VMS_FORM_DOWNLOAD:
  1813. {
  1814. #if 0
  1815. char szDateTime[INT_VMS_MAX_DATETIME+1];
  1816. char szVmsNmbr[INT_VMS_MAX_ID+1];
  1817. INT_VMS_FORM_DOWNLOAD_REQ *AReq = (INT_VMS_FORM_DOWNLOAD_REQ*)pData;
  1818. sMsg.printf(L"*** VMS 폼 다운로드 메시지 수신: %d EA", AReq->Count);
  1819. DebugMsg(sMsg);
  1820. for (int ii = 0; ii < AReq->Count && ii < INT_MAX_VMS_FORM_DOWNLOAD; ii++)
  1821. {
  1822. sMsg = "";
  1823. INT_VMS_FORM_DOWNLOAD *pVms = &AReq->Unit[ii];
  1824. sprintf(szVmsNmbr, "%.*s", INT_VMS_MAX_ID, (char*)pVms->VmsId);
  1825. sprintf(szDateTime, "%.*s", INT_VMS_MAX_DATETIME, (char*)pVms->Date);
  1826. sVmsNmbr = String(szVmsNmbr);
  1827. String sDateTime = String(szDateTime);
  1828. TVmsCtlr *pObj = VmsManager->FLists.Find(sVmsNmbr);
  1829. if (pObj)
  1830. {
  1831. bool bDnLd = (pVms->Result == vms_download_succ) ? true : false;
  1832. String sResult = bDnLd ? "Succ" : "Fail";
  1833. pObj->VmsMsg->OFFER_DT = sDateTime;
  1834. pObj->VmsMsg->OFFER_YN = bDnLd;
  1835. for (int kk = 0; kk < pObj->VmsMsg->Total && kk < INT_MAX_VMS_FORM; kk++)
  1836. {
  1837. pObj->VmsMsg->PHASE[kk].DNLD_YN = bDnLd ? "Y" : "N";
  1838. }
  1839. //sMsg.printf(L"*** ===> VMS Msg download: %s, %s", pObj->VMS_CTLR_ID.c_str(), sResult.c_str());
  1840. //DebugMsg(sMsg);
  1841. }
  1842. else
  1843. {
  1844. sMsg.printf(L"*** INT_OP_VMS_FORM_DOWNLOAD VMS not found: %s", sVmsNmbr.c_str());
  1845. DebugMsg(sMsg);
  1846. }
  1847. }
  1848. #endif
  1849. }
  1850. break;
  1851. }
  1852. }
  1853. else
  1854. {
  1855. //Vitzro internal communication
  1856. OpCode = (BYTE)head->OPCode;
  1857. pData = data->Data;
  1858. switch(OpCode)
  1859. {
  1860. case INT_OP_PROC_EVENT: /* 0x01, 교통정보가공완료 */
  1861. {
  1862. if (g_AppCfg.bDebug) ITSUtil_Trace("UDP: 교통정보 가공완료");
  1863. if (NITS0000M->Enabled)
  1864. {
  1865. HWND hWnd = FindChildWindow("ITS0000M");
  1866. if (hWnd) POST_MSG(hWnd, WM_MAINFORM, WP_DB_SELECT_OK, LP_MSG_10);
  1867. }
  1868. FPollTraffic00.Reset(); // 링크소통정보(전체)
  1869. FPollTraffic01.Reset(); // 링크소통정보
  1870. FPollTraffic02.Reset(); // 서비스링크소통정보
  1871. FPollTraffic03.Reset(); // 도로소통정보
  1872. FPollTraffic04.Reset(); // 반복정체구간
  1873. }
  1874. break;
  1875. case INT_OP_NODELINK_CHANGE: /* 0x10, 노드링크 기반 정보 변경 */
  1876. {
  1877. if (g_AppCfg.bDebug) ITSUtil_Trace("UDP: 노드링크 기반 정보 변경");
  1878. //휴일정보
  1879. //구간등급변경
  1880. //소통등급
  1881. //교통파라미터
  1882. /*
  1883. * 기존에는 처리하는것이 없었음.
  1884. * ---> 심심할때 처리하자
  1885. */
  1886. }
  1887. break;
  1888. case INT_OP_FACILITY_CHANGE: /* 0x12, 시설물 기반 정보 변경 */
  1889. {
  1890. //CCTV, VMS관련기본정보
  1891. DebugMsg(FrmLang->cxLabel17->Caption);
  1892. PostJobMessage(WM_THREAD, WP_PARAM_TRAFFIC, LP_MSG_14);
  1893. }
  1894. break;
  1895. case INT_OP_RSE_CONTROL_REQ: /* 0xC0, RSE 제어정보 전송 */
  1896. {
  1897. if (g_AppCfg.bDebug) ITSUtil_Trace("UDP: RSE 제어정보 전송");
  1898. }
  1899. break;
  1900. case INT_OP_RSE_CONTROL_RES: /* 0xC1, RSE 제어정보 응답 */
  1901. {
  1902. if (g_AppCfg.bDebug) ITSUtil_Trace("UDP: RSE 제어정보 응답");
  1903. if (NDSRM020M->Enabled)
  1904. {
  1905. HWND hWnd = FindChildWindow("DSRM020M");
  1906. //if (hWnd) POST_MSG(hWnd, WM_MAINFORM, Msg.wParam, Msg.lParam);
  1907. }
  1908. }
  1909. }
  1910. }
  1911. }
  1912. //---------------------------------------------------------------------------
  1913. void __fastcall TFrmMain::OnUdpDataRecvMessage(tagMSG &Msg)
  1914. {
  1915. IPCUDPMESSAGESTRUCT *RcvData = (IPCUDPMESSAGESTRUCT*)Msg.lParam;
  1916. INT_SENDER *Sender = &RcvData->Sender;
  1917. INT_PACKET *Pkt = &RcvData->Pkt;
  1918. INT_HEAD *head = &Pkt->head;
  1919. INT_DATA *data = &Pkt->data;
  1920. char *pData = &data->Data[2];
  1921. BYTE OpCode = (BYTE)data->Data[0];
  1922. LOGINFO("*** OPR Client Req: %s.%d", VComm_ulong2ip(Sender->IP), Sender->Port);
  1923. String sMsg = "";
  1924. String sVmsNmbr = "";
  1925. //UpdateVmsCommStatus(false);
  1926. if (head->OPCode == INT_OP_COMM_COMMON)
  1927. {
  1928. switch(OpCode)
  1929. {
  1930. case INT_OP_PG_STATE_RES:
  1931. {
  1932. DebugMsg("*** VMS 프로세스 상태정보 수신");
  1933. INT_PG_STATE_RES *ARes = (INT_PG_STATE_RES*)pData;
  1934. for (int ii = 0; ii < ARes->Count && ii < INT_MAX_PG_STATE; ii++)
  1935. {
  1936. if (ARes->Unit[ii].Type == INT_ID_VMS_SERVER)
  1937. {
  1938. //FVmsServerState = ARes->Unit[ii].Action;
  1939. //UpdateVmsCommStatus(false);
  1940. //FPollStatus02.Reset(); //프로세스상태정보 조회 타이머 리셋
  1941. break;
  1942. }
  1943. }
  1944. }
  1945. break;
  1946. case INT_OP_VMS_STATE_RES:
  1947. {
  1948. char szVmsNmbr[INT_VMS_MAX_ID+1];
  1949. INT_VMS_STATE_RES *ARes = (INT_VMS_STATE_RES*)pData;
  1950. sMsg = "";
  1951. sMsg.printf(L"*** VMS 제어기 상태정보 수신: %d EA", ARes->Count);
  1952. DebugMsg(sMsg);
  1953. for (int ii = 0; ii < ARes->Count && ii < INT_MAX_VMS_STATE; ii++)
  1954. {
  1955. String sVmsNmbr;
  1956. INT_VMS_STATE *pVms = &ARes->Unit[ii];
  1957. sprintf(szVmsNmbr, "%.*s", INT_VMS_MAX_ID, (char*)pVms->VmsId);
  1958. sVmsNmbr = String(szVmsNmbr);
  1959. #if 0
  1960. TVmsCtlr *pObj = VmsManager->FLists.Find(sVmsNmbr);
  1961. if (pObj)
  1962. {
  1963. memcpy((char*)&pObj->STATE, (char*)pVms, sizeof(INT_VMS_STATE));
  1964. if (pObj->STATE.OprMode == 'A') pObj->OPER_MODE = "A";
  1965. else if (pObj->STATE.OprMode == 'B') pObj->OPER_MODE = "B";
  1966. else pObj->OPER_MODE = "F";
  1967. pObj->VMS_PHSE_CHNG_CYCL = pObj->STATE.ScheduledMessageOperatingTime;
  1968. pObj->VMS_CMNC_ERR_BASS_VAL = pObj->STATE.ModuleOperatingTemperature;
  1969. pObj->FAN_MTNS_TMPR = pObj->STATE.FanOperatingTemperature;
  1970. pObj->HETR_MTNS_TMPR = pObj->STATE.HeaterOperatingTemperature;
  1971. pObj->VMS_MODL_ERR_RATE = pObj->STATE.ModuleBasicFailureRate;
  1972. }
  1973. #endif
  1974. }
  1975. //RefreshVmsMessage(WM_VMS_STATE_REFRESH);
  1976. }
  1977. break;
  1978. case INT_OP_VMS_FORM_SAVE:
  1979. {
  1980. //FPollVmsMsg.Reset(); //VMS메시지 조회 타이머 리셋
  1981. char szDateTime[INT_VMS_MAX_DATETIME+1];
  1982. INT_VMS_FORM_SAVE_REQ *AReq = (INT_VMS_FORM_SAVE_REQ*)pData;
  1983. sprintf(szDateTime, "%.*s", INT_VMS_MAX_DATETIME, (char*)AReq->Date);
  1984. String sDateTime = String(szDateTime);
  1985. sMsg = "";
  1986. sMsg.printf(L"*** VMS 폼생성 완료 메시지 수신: %s", sDateTime.c_str());
  1987. DebugMsg(sMsg);
  1988. }
  1989. break;
  1990. case INT_OP_VMS_FORM_DOWNLOAD:
  1991. {
  1992. char szDateTime[INT_VMS_MAX_DATETIME+1];
  1993. char szVmsNmbr[INT_VMS_MAX_ID+1];
  1994. INT_VMS_FORM_DOWNLOAD_REQ *AReq = (INT_VMS_FORM_DOWNLOAD_REQ*)pData;
  1995. sMsg.printf(L"*** VMS 폼 다운로드 메시지 수신: %d EA", AReq->Count);
  1996. DebugMsg(sMsg);
  1997. for (int ii = 0; ii < AReq->Count && ii < INT_MAX_VMS_FORM_DOWNLOAD; ii++)
  1998. {
  1999. sMsg = "";
  2000. INT_VMS_FORM_DOWNLOAD *pVms = &AReq->Unit[ii];
  2001. sprintf(szVmsNmbr, "%.*s", INT_VMS_MAX_ID, (char*)pVms->VmsId);
  2002. sprintf(szDateTime, "%.*s", INT_VMS_MAX_DATETIME, (char*)pVms->Date);
  2003. sVmsNmbr = String(szVmsNmbr);
  2004. String sDateTime = String(szDateTime);
  2005. #if 0
  2006. TVmsCtlr *pObj = VmsManager->FLists.Find(sVmsNmbr);
  2007. if (pObj)
  2008. {
  2009. bool bDnLd = (pVms->Result == vms_download_succ) ? true : false;
  2010. String sResult = bDnLd ? "Succ" : "Fail";
  2011. pObj->VmsMsg->OFFER_DT = sDateTime;
  2012. pObj->VmsMsg->OFFER_YN = bDnLd;
  2013. for (int kk = 0; kk < pObj->VmsMsg->Total && kk < INT_MAX_VMS_FORM; kk++)
  2014. {
  2015. pObj->VmsMsg->PHASE[kk].DNLD_YN = bDnLd ? "Y" : "N";
  2016. }
  2017. sMsg.printf(L"*** VMS Msg download: %s, %s", pObj->VMS_CTLR_ID.c_str(), sResult.c_str());
  2018. }
  2019. else
  2020. {
  2021. sMsg.printf(L"*** INT_OP_VMS_FORM_DOWNLOAD VMS not found: %s", sVmsNmbr.c_str());
  2022. }
  2023. DebugMsg(sMsg);
  2024. #endif
  2025. }
  2026. }
  2027. break;
  2028. }
  2029. }
  2030. else
  2031. {
  2032. //Vitzro internal communication
  2033. OpCode = (BYTE)head->OPCode;
  2034. pData = data->Data;
  2035. switch(OpCode)
  2036. {
  2037. case INT_OP_PROC_EVENT: /* 0x01, 교통정보가공완료 */
  2038. {
  2039. if (g_AppCfg.bDebug) ITSUtil_Trace("UDP: 교통정보 가공완료");
  2040. if (NITS0000M->Enabled)
  2041. {
  2042. HWND hWnd = FindChildWindow("ITS0000M");
  2043. if (hWnd) POST_MSG(hWnd, WM_MAINFORM, WP_DB_SELECT_OK, LP_MSG_10);
  2044. }
  2045. FPollTraffic00.Reset(); // 링크소통정보(전체)
  2046. FPollTraffic01.Reset(); // 링크소통정보
  2047. FPollTraffic02.Reset(); // 서비스링크소통정보
  2048. FPollTraffic03.Reset(); // 도로소통정보
  2049. FPollTraffic04.Reset(); // 반복정체구간
  2050. }
  2051. break;
  2052. case INT_OP_NODELINK_CHANGE: /* 0x10, 노드링크 기반 정보 변경 */
  2053. {
  2054. if (g_AppCfg.bDebug) ITSUtil_Trace("UDP: 노드링크 기반 정보 변경");
  2055. //휴일정보
  2056. //구간등급변경
  2057. //소통등급
  2058. //교통파라미터
  2059. /*
  2060. * 기존에는 처리하는것이 없었음.
  2061. * ---> 심심할때 처리하자
  2062. */
  2063. }
  2064. break;
  2065. case INT_OP_FACILITY_CHANGE: /* 0x12, 시설물 기반 정보 변경 */
  2066. {
  2067. if (g_AppCfg.bDebug) ITSUtil_Trace("UDP: 시설물 기반 정보 변경");
  2068. //CCTV, VMS관련기본정보
  2069. PostJobMessage(WM_THREAD, WP_PARAM_TRAFFIC, LP_MSG_14);
  2070. }
  2071. break;
  2072. case INT_OP_RSE_CONTROL_REQ: /* 0xC0, RSE 제어정보 전송 */
  2073. {
  2074. if (g_AppCfg.bDebug) ITSUtil_Trace("UDP: RSE 제어정보 전송");
  2075. }
  2076. break;
  2077. case INT_OP_RSE_CONTROL_RES: /* 0xC1, RSE 제어정보 응답 */
  2078. {
  2079. if (g_AppCfg.bDebug) ITSUtil_Trace("UDP: RSE 제어정보 응답");
  2080. if (NDSRM020M->Enabled)
  2081. {
  2082. HWND hWnd = FindChildWindow("DSRM020M");
  2083. if (hWnd) POST_MSG(hWnd, WM_MAINFORM, Msg.wParam, Msg.lParam);
  2084. }
  2085. }
  2086. }
  2087. }
  2088. }
  2089. //---------------------------------------------------------------------------
  2090. void __fastcall TFrmMain::OnPollingThreadDone(TObject *Sender)
  2091. {
  2092. LOGINFO("Polling thead terminated");
  2093. g_AppCfg.thr.bRunning = false;
  2094. }
  2095. //---------------------------------------------------------------------------
  2096. void __fastcall TFrmMain::ShowFacilityStatus()
  2097. {
  2098. // HWND hWnd = FindChildWindow("ITS0000M");
  2099. // if (hWnd) POST_MSG(hWnd, WM_MAINFORM, AWParam, ALParam);
  2100. bool bShow = false;
  2101. try
  2102. {
  2103. try
  2104. {
  2105. ItsFacilityManager->FLists.Lock();
  2106. FOR_STL(TItsFacility*, pFacility, ItsFacilityManager->FLists)
  2107. {
  2108. if (pFacility->DEL_YN == "Y") continue;
  2109. #if 0
  2110. if (pFacility->FCLT_TYPE == "DSRC")
  2111. {
  2112. if (pFacility->FCollCntBase > pFacility->FCollCntCurr)
  2113. {
  2114. bShow = true;
  2115. break;
  2116. }
  2117. }
  2118. #endif
  2119. if (pFacility->FComm != state_normal)
  2120. {
  2121. bShow = true;
  2122. break;
  2123. }
  2124. else
  2125. {
  2126. #if 0
  2127. try
  2128. {
  2129. String sValue = pFacility->FCBoxTmpr;
  2130. int nValue = 0;
  2131. if (TryStrToInt(sValue, nValue))
  2132. {
  2133. if (nValue > g_AppCfg.Temp.AlarmValue)
  2134. {
  2135. bShow = true;
  2136. break;
  2137. }
  2138. }
  2139. } catch(...) {}
  2140. #endif
  2141. }
  2142. }
  2143. }
  2144. __finally
  2145. {
  2146. ItsFacilityManager->FLists.UnLock();
  2147. }
  2148. }
  2149. catch(...)
  2150. {
  2151. }
  2152. if (!bShow)
  2153. {
  2154. LblAlarm->Style->Font->Color = clBlack;
  2155. //LblAlarm->Caption = "알람정보";
  2156. LblAlarm->Caption = FrmLang->cxLabel21->Caption;
  2157. ImgAlarm->Visible = false;
  2158. ImgAlarmNormal->Visible = true;
  2159. try {
  2160. if (ImgAlarm->Picture->Graphic->ClassName() == "TGIFImage")
  2161. ((TGIFImage *)ImgAlarm->Picture->Graphic)->Animate = false;
  2162. } catch(...) {}
  2163. return;
  2164. }
  2165. ImgAlarmNormal->Visible = false;
  2166. ImgAlarm->Visible = true;
  2167. try {
  2168. if (ImgAlarm->Picture->Graphic->ClassName() == "TGIFImage")
  2169. ((TGIFImage *)ImgAlarm->Picture->Graphic)->Animate = true;
  2170. } catch(...) {}
  2171. //LblAlarm->Caption = "알람발생";
  2172. LblAlarm->Caption = FrmLang->cxLabel22->Caption;
  2173. LblAlarm->Style->Font->Color = clRed;
  2174. if (!g_AppCfg.Alarm.Enabled) return;
  2175. if (!g_AppCfg.Alarm.Window) return;
  2176. try
  2177. {
  2178. if (FrmFacilityAlarm == NULL)
  2179. {
  2180. FrmFacilityAlarm = new TFrmFacilityAlarm(Application);
  2181. }
  2182. FrmFacilityAlarm->Show();
  2183. FrmFacilityAlarm->ShowFacilityAlarm();
  2184. }
  2185. catch(...)
  2186. {
  2187. }
  2188. }
  2189. //---------------------------------------------------------------------------
  2190. void __fastcall TFrmMain::ShowAutoIncidentInfo()
  2191. {
  2192. // HWND hWnd = FindChildWindow("ITS0000M");
  2193. // if (hWnd) POST_MSG(hWnd, WM_MAINFORM, AWParam, ALParam);
  2194. if (!g_AppCfg.Incident.Enabled) return;
  2195. bool bShow = false;
  2196. try
  2197. {
  2198. try
  2199. {
  2200. ItsIncidentManager->FAutoLists.Lock();
  2201. if (ItsIncidentManager->FAutoLists.Size() > 0)
  2202. {
  2203. bShow = true;
  2204. }
  2205. }
  2206. __finally
  2207. {
  2208. ItsIncidentManager->FAutoLists.UnLock();
  2209. }
  2210. }
  2211. catch(...)
  2212. {
  2213. }
  2214. if (!bShow) return;
  2215. try
  2216. {
  2217. if (FrmIncidentAlarm == NULL)
  2218. {
  2219. FrmIncidentAlarm = new TFrmIncidentAlarm(Application);
  2220. }
  2221. FrmIncidentAlarm->Show();
  2222. FrmIncidentAlarm->ShowIncidentAlarm();
  2223. }
  2224. catch(...)
  2225. {
  2226. }
  2227. }
  2228. //---------------------------------------------------------------------------
  2229. /*
  2230. *****************************************************************************
  2231. * DSRC-RSE 정보
  2232. *****************************************************************************
  2233. */
  2234. /*
  2235. * DSRC-RSE 상태이력화면 호출
  2236. */
  2237. void __fastcall TFrmMain::NDSRH010MClick(TObject *Sender)
  2238. {
  2239. #ifdef USE_DSRC
  2240. FORMSHOW(DSRH010M);
  2241. #endif
  2242. }
  2243. //---------------------------------------------------------------------------
  2244. /*
  2245. * DSRC-RSE 로그이력화면 호출
  2246. */
  2247. void __fastcall TFrmMain::NDSRH020MClick(TObject *Sender)
  2248. {
  2249. #ifdef USE_DSRC
  2250. FORMSHOW(DSRH020M);
  2251. #endif
  2252. }
  2253. //---------------------------------------------------------------------------
  2254. /*
  2255. * DSRC-RSE 제어이력화면 호출
  2256. */
  2257. void __fastcall TFrmMain::NDSRH030MClick(TObject *Sender)
  2258. {
  2259. #ifdef USE_DSRC
  2260. FORMSHOW(DSRH030M);
  2261. #endif
  2262. }
  2263. //---------------------------------------------------------------------------
  2264. /*
  2265. * DSRC-RSE 가공정보 이력조회화면 호출
  2266. */
  2267. void __fastcall TFrmMain::NDSRH040MClick(TObject *Sender)
  2268. {
  2269. #ifdef USE_DSRC
  2270. FORMSHOW(DSRH040M);
  2271. #endif
  2272. }
  2273. //---------------------------------------------------------------------------
  2274. /*
  2275. * DSRC-RSE 제공정보 이력조회화면 호출
  2276. */
  2277. void __fastcall TFrmMain::NDSRH050MClick(TObject *Sender)
  2278. {
  2279. #ifdef USE_DSRC
  2280. FORMSHOW(DSRH050M);
  2281. #endif
  2282. }
  2283. //---------------------------------------------------------------------------
  2284. /*
  2285. * DSRC-RSE 관리화면 호출
  2286. */
  2287. void __fastcall TFrmMain::NDSRM010MClick(TObject *Sender)
  2288. {
  2289. #ifdef USE_DSRC
  2290. FORMSHOW(DSRM010M);
  2291. #endif
  2292. }
  2293. //---------------------------------------------------------------------------
  2294. /*
  2295. * DSRC-RSE 제어화면 호출
  2296. */
  2297. void __fastcall TFrmMain::NDSRM020MClick(TObject *Sender)
  2298. {
  2299. #ifdef USE_DSRC
  2300. FORMSHOW(DSRM020M);
  2301. #endif
  2302. }
  2303. //---------------------------------------------------------------------------
  2304. /*
  2305. * DSRC-RSE 수집구간 설정화면 호출
  2306. */
  2307. void __fastcall TFrmMain::NDSRM030MClick(TObject *Sender)
  2308. {
  2309. #ifdef USE_DSRC
  2310. FORMSHOW(DSRM030M);
  2311. #endif
  2312. }
  2313. //---------------------------------------------------------------------------
  2314. /*
  2315. * DSRC-RSE 제공구간 관리화면 호출
  2316. */
  2317. void __fastcall TFrmMain::NDSRM040MClick(TObject *Sender)
  2318. {
  2319. #ifdef USE_DSRC
  2320. FORMSHOW(DSRM040M);
  2321. #endif
  2322. }
  2323. //---------------------------------------------------------------------------
  2324. /*
  2325. * VDS-제어기 관리화면 호출
  2326. */
  2327. void __fastcall TFrmMain::NVDSM010MClick(TObject *Sender)
  2328. {
  2329. FORMSHOW(VDSM010M);
  2330. }
  2331. //---------------------------------------------------------------------------
  2332. /*
  2333. * VDS-검지기 관리화면 호출
  2334. */
  2335. void __fastcall TFrmMain::NVDSM020MClick(TObject *Sender)
  2336. {
  2337. FORMSHOW(VDSM020M);
  2338. }
  2339. //---------------------------------------------------------------------------
  2340. /*
  2341. * VDS-제어기 상태이력화면 호출
  2342. */
  2343. void __fastcall TFrmMain::NVDSH010MClick(TObject *Sender)
  2344. {
  2345. FORMSHOW(VDSH010M);
  2346. }
  2347. //---------------------------------------------------------------------------
  2348. /*
  2349. * VDS-제어기 이벤트이력화면 호출
  2350. */
  2351. void __fastcall TFrmMain::NVDSH020MxClick(TObject *Sender)
  2352. {
  2353. FORMSHOW(VDSH020M);
  2354. }
  2355. //---------------------------------------------------------------------------
  2356. /*
  2357. * VDS-검지기 과거수집이력화면 호출
  2358. */
  2359. void __fastcall TFrmMain::NVDSH030MxClick(TObject *Sender)
  2360. {
  2361. FORMSHOW(VDSH030M);
  2362. }
  2363. //---------------------------------------------------------------------------
  2364. /*
  2365. * VDS-검지기 원시수집이력화면 호출
  2366. */
  2367. void __fastcall TFrmMain::NVDSH040MClick(TObject *Sender)
  2368. {
  2369. FORMSHOW(VDSH040M);
  2370. }
  2371. //---------------------------------------------------------------------------
  2372. /*
  2373. * VDS-검지기 평활화이력화면 호출
  2374. */
  2375. void __fastcall TFrmMain::NVDSH050MxClick(TObject *Sender)
  2376. {
  2377. FORMSHOW(VDSH050M);
  2378. }
  2379. //---------------------------------------------------------------------------
  2380. /*
  2381. * VDS-검지기 보정이력화면 호출
  2382. */
  2383. void __fastcall TFrmMain::NVDSH060MxClick(TObject *Sender)
  2384. {
  2385. FORMSHOW(VDSH060M);
  2386. }
  2387. //---------------------------------------------------------------------------
  2388. /*
  2389. * VDS-검지기 통계조회화면 호출
  2390. */
  2391. void __fastcall TFrmMain::NVDSS010MClick(TObject *Sender)
  2392. {
  2393. FORMSHOW(VDSS010M);
  2394. }
  2395. //---------------------------------------------------------------------------
  2396. void __fastcall TFrmMain::NVDSS020MClick(TObject *Sender)
  2397. {
  2398. FORMSHOW(VDSS020M);
  2399. }
  2400. //---------------------------------------------------------------------------
  2401. /*
  2402. * AVI-제어기 관리화면 호출
  2403. */
  2404. void __fastcall TFrmMain::NAVIM010MClick(TObject *Sender)
  2405. {
  2406. #ifdef USE_AVI
  2407. FORMSHOW(AVIM010M);
  2408. #endif
  2409. }
  2410. //---------------------------------------------------------------------------
  2411. /*
  2412. * AVI-구간 관리화면 호출
  2413. */
  2414. void __fastcall TFrmMain::NAVIM020MClick(TObject *Sender)
  2415. {
  2416. #ifdef USE_AVI
  2417. FORMSHOW(AVIM020M);
  2418. #endif
  2419. }
  2420. //---------------------------------------------------------------------------
  2421. /*
  2422. * AVI-제어기 상태이력화면 호출
  2423. */
  2424. void __fastcall TFrmMain::NAVIH010MClick(TObject *Sender)
  2425. {
  2426. #ifdef USE_AVI
  2427. FORMSHOW(AVIH010M);
  2428. #endif
  2429. }
  2430. //---------------------------------------------------------------------------
  2431. /*
  2432. * AVI-제어기 차량인식이력화면 호출
  2433. */
  2434. void __fastcall TFrmMain::NAVIH020MxClick(TObject *Sender)
  2435. {
  2436. #ifdef USE_AVI
  2437. FORMSHOW(AVIH020M);
  2438. #endif
  2439. }
  2440. //---------------------------------------------------------------------------
  2441. /*
  2442. * AVI-제어기 교통정보이력화면 호출
  2443. */
  2444. void __fastcall TFrmMain::NAVIH030MxClick(TObject *Sender)
  2445. {
  2446. #ifdef USE_AVI
  2447. FORMSHOW(AVIH030M);
  2448. #endif
  2449. }
  2450. //---------------------------------------------------------------------------
  2451. /*
  2452. * AVI-제어기 차량통과이력화면 호출
  2453. */
  2454. void __fastcall TFrmMain::NAVIH040MClick(TObject *Sender)
  2455. {
  2456. #ifdef USE_AVI
  2457. FORMSHOW(AVIH040M);
  2458. #endif
  2459. }
  2460. //---------------------------------------------------------------------------
  2461. /*
  2462. * AVI-구간-매칭이력화면 호출
  2463. */
  2464. void __fastcall TFrmMain::NAVIH050MClick(TObject *Sender)
  2465. {
  2466. #ifdef USE_AVI
  2467. FORMSHOW(AVIH050M);
  2468. #endif
  2469. }
  2470. //---------------------------------------------------------------------------
  2471. /*
  2472. * AVI-구간-수집이력화면 호출
  2473. */
  2474. void __fastcall TFrmMain::NAVIH060MClick(TObject *Sender)
  2475. {
  2476. #ifdef USE_AVI
  2477. FORMSHOW(AVIH060M);
  2478. #endif
  2479. }
  2480. //---------------------------------------------------------------------------
  2481. /*
  2482. * AVI-구간-소통상황이력화면 호출
  2483. */
  2484. void __fastcall TFrmMain::NAVIH070MClick(TObject *Sender)
  2485. {
  2486. #ifdef USE_AVI
  2487. FORMSHOW(AVIH070M);
  2488. #endif
  2489. }
  2490. //---------------------------------------------------------------------------
  2491. /*
  2492. * AVI-구간-소통상황통계화면 호출
  2493. */
  2494. void __fastcall TFrmMain::NAVIS010MClick(TObject *Sender)
  2495. {
  2496. #ifdef USE_AVI
  2497. FORMSHOW(AVIS010M);
  2498. #endif
  2499. }
  2500. //---------------------------------------------------------------------------
  2501. void __fastcall TFrmMain::NAVIS020MClick(TObject *Sender)
  2502. {
  2503. #ifdef USE_AVI
  2504. FORMSHOW(AVIS020M);
  2505. #endif
  2506. }
  2507. //---------------------------------------------------------------------------
  2508. void __fastcall TFrmMain::NSMS0010MClick(TObject *Sender)
  2509. {
  2510. //FORMSHOW(SMS0010M);
  2511. }
  2512. //---------------------------------------------------------------------------
  2513. void __fastcall TFrmMain::NSMS0020MClick(TObject *Sender)
  2514. {
  2515. //FORMSHOW(SMS0020M);
  2516. }
  2517. //---------------------------------------------------------------------------
  2518. void __fastcall TFrmMain::NSMS0030MClick(TObject *Sender)
  2519. {
  2520. //FORMSHOW(SMS0030M);
  2521. }
  2522. //---------------------------------------------------------------------------
  2523. void __fastcall TFrmMain::NIFM0040MClick(TObject *Sender)
  2524. {
  2525. FORMSHOW(IFM0040M);
  2526. }
  2527. //---------------------------------------------------------------------------
  2528. void __fastcall TFrmMain::NIFM0050MClick(TObject *Sender)
  2529. {
  2530. FORMSHOW(IFM0050M);
  2531. }
  2532. //---------------------------------------------------------------------------
  2533. void __fastcall TFrmMain::NPIS0010MClick(TObject *Sender)
  2534. {
  2535. #ifdef USE_PARK
  2536. FORMSHOW(PIS0010M);
  2537. #endif
  2538. }
  2539. //---------------------------------------------------------------------------
  2540. void __fastcall TFrmMain::NPIS0030MClick(TObject *Sender)
  2541. {
  2542. #ifdef USE_PARK
  2543. FORMSHOW(PIS0030M);
  2544. #endif
  2545. }
  2546. //---------------------------------------------------------------------------
  2547. void __fastcall TFrmMain::NPIS0020MClick(TObject *Sender)
  2548. {
  2549. #ifdef USE_PARK
  2550. FORMSHOW(PIS0020M);
  2551. #endif
  2552. }
  2553. //---------------------------------------------------------------------------
  2554. void __fastcall TFrmMain::NPISH010MClick(TObject *Sender)
  2555. {
  2556. #ifdef USE_PARK
  2557. FORMSHOW(PISH010M);
  2558. #endif
  2559. }
  2560. //---------------------------------------------------------------------------
  2561. void __fastcall TFrmMain::NDSRH060MClick(TObject *Sender)
  2562. {
  2563. #ifdef USE_DSRC
  2564. FORMSHOW(DSRH060M);
  2565. #endif
  2566. }
  2567. //---------------------------------------------------------------------------
  2568. void __fastcall TFrmMain::NDSRH070MClick(TObject *Sender)
  2569. {
  2570. #ifdef USE_DSRC
  2571. FORMSHOW(DSRH070M);
  2572. #endif
  2573. }
  2574. //---------------------------------------------------------------------------
  2575. void __fastcall TFrmMain::OnAlarmDblClick(TObject *Sender)
  2576. {
  2577. try
  2578. {
  2579. #if 1
  2580. //TODO
  2581. if (FrmIncidentAlarm == NULL)
  2582. {
  2583. FrmIncidentAlarm = new TFrmIncidentAlarm(Application);
  2584. }
  2585. FrmIncidentAlarm->Show();
  2586. FrmIncidentAlarm->ShowIncidentAlarm();
  2587. #endif
  2588. if (FrmFacilityAlarm == NULL)
  2589. {
  2590. FrmFacilityAlarm = new TFrmFacilityAlarm(Application);
  2591. }
  2592. FrmFacilityAlarm->Show();
  2593. FrmFacilityAlarm->ShowFacilityAlarm();
  2594. }
  2595. catch(...)
  2596. {
  2597. }
  2598. }
  2599. //---------------------------------------------------------------------------
  2600. void __fastcall TFrmMain::NTST0000MClick(TObject *Sender)
  2601. {
  2602. #if 0
  2603. String sExeName = "Project1.exe";
  2604. String sParam = "\"" + g_pLOGIN->sUserId + "\" \"" + g_pLOGIN->sUserId + "\"";
  2605. //ShellExecute(NULL,"open", "C:\\myprocess.exe", "\"my argument 1 containing spaces\" \"my argument 2\"","C:\\",SW_SHOWNORMAL);
  2606. ShellExecute(Handle, NULL, sExeName.c_str(), sParam.c_str(), NULL, SW_SHOWNORMAL);
  2607. #endif
  2608. #include <stdio.h>
  2609. AnsiString sQry1 = "INSERT INTO TB_OPERSYST_MENU VALUES('%s', '%02d.%s', 'N', 1, '');\n";
  2610. AnsiString sQry2 = "INSERT INTO TB_OPERSYST_MENU VALUES('%s', '%s', 'N', 2, '%s');\n";
  2611. AnsiString sMenuFile = g_sAppDir + "Menu.TXT";
  2612. FILE *pFileMenu = NULL;
  2613. pFileMenu = fopen(sMenuFile.c_str(), "w+");
  2614. if (pFileMenu == NULL)
  2615. {
  2616. ShowMessage("메뉴파일을 생성하지 못하였습니다.");
  2617. return;
  2618. }
  2619. int nMenuCnt = 1;
  2620. int nMenuTabs = Ribbon->Tabs->Count;
  2621. for (int ii = 0; ii < nMenuTabs; ii++)
  2622. {
  2623. TdxRibbonTab *pTab = Ribbon->Tabs->Items[ii];
  2624. if (pTab->Visible == false) continue;
  2625. AnsiString sMainName = pTab->Name;
  2626. AnsiString sMainCap = pTab->Caption;
  2627. fprintf(pFileMenu, sQry1.c_str(), sMainName.c_str(), nMenuCnt++, sMainCap.c_str());
  2628. int nSubMenus = pTab->Groups->Count;
  2629. for (int jj = 0; jj < nSubMenus; jj++)
  2630. {
  2631. TdxRibbonTabGroup *pGroup = pTab->Groups->Items[jj];
  2632. TdxBar *pBar = pGroup->ToolBar;
  2633. if (pBar->Visible == false) continue;
  2634. int nMenus = pBar->ItemLinks->Count;
  2635. for (int kk = 0; kk < nMenus; kk++)
  2636. {
  2637. TdxBarItemLink *pItemLink = pBar->ItemLinks->Items[kk];
  2638. TdxBarLargeButton *pMenuBtn = (TdxBarLargeButton*)pItemLink->Item;
  2639. if (pMenuBtn->Visible != ivAlways) continue;
  2640. AnsiString sMenuName = pMenuBtn->Name;
  2641. AnsiString sMenuCap = pMenuBtn->Caption;
  2642. fprintf(pFileMenu, sQry2.c_str(), sMenuName.c_str(), sMenuCap.c_str(), sMainName.c_str());
  2643. }
  2644. }
  2645. }
  2646. fclose(pFileMenu);
  2647. pFileMenu = NULL;
  2648. #if 0
  2649. for (int ii = 0; ii < nCompnentCnt; ii++)
  2650. {
  2651. String sClassName = this->Components[ii]->ClassName();
  2652. if(sClassName == "TdxBarLargeButton")
  2653. {
  2654. TdxBarLargeButton *pMenu = (TdxBarLargeButton *)this->Components[ii];
  2655. if (pMenu->Name == sMenuId)
  2656. {
  2657. pMenu->Enabled = false;
  2658. break;
  2659. }
  2660. }
  2661. }
  2662. #endif
  2663. }
  2664. //---------------------------------------------------------------------------
  2665. void __fastcall TFrmMain::NIHS0060MClick(TObject *Sender)
  2666. {
  2667. FORMSHOW(IHS0060M);
  2668. }
  2669. //---------------------------------------------------------------------------
  2670. void __fastcall TFrmMain::TmrDbCheckTimer(TObject *Sender)
  2671. {
  2672. TmrDbCheck->Enabled = false;
  2673. if (ITSDb_IsOpen() == false)
  2674. {
  2675. //DebugMsg("데이터베이스 연결 오류....");
  2676. DebugMsg(FrmLang->cxLabel23->Caption);
  2677. UpdateDbStatus(true);
  2678. if (DbConnect())
  2679. {
  2680. if (ITSDb_Open())
  2681. {
  2682. UpdateDbStatus(false);
  2683. //DebugMsg("데이터베이스 재연결 성공....");
  2684. DebugMsg(FrmLang->cxLabel24->Caption);
  2685. }
  2686. }
  2687. TmrDbCheck->Interval = 10000;
  2688. }
  2689. else
  2690. {
  2691. if (IsDbAlive())
  2692. {
  2693. TmrDbCheck->Interval = 10000;
  2694. }
  2695. else
  2696. {
  2697. TmrDbCheck->Interval = 5000;
  2698. }
  2699. }
  2700. TmrDbCheck->Enabled = true;
  2701. }
  2702. //---------------------------------------------------------------------------
  2703. bool __fastcall TFrmMain::DbConnect()
  2704. {
  2705. TADOConnection *m_pConnection = new TADOConnection(NULL);
  2706. try
  2707. {
  2708. try
  2709. {
  2710. m_pConnection->ConnectionString = ITSDb_GetConnStr();
  2711. m_pConnection->KeepConnection = true;
  2712. m_pConnection->LoginPrompt = false;
  2713. m_pConnection->Open();
  2714. m_pConnection->Close();
  2715. }
  2716. catch(EDatabaseError &E)
  2717. {
  2718. return false;
  2719. }
  2720. catch (Exception &e)
  2721. {
  2722. return false;
  2723. }
  2724. catch (...)
  2725. {
  2726. return false;
  2727. }
  2728. }
  2729. __finally
  2730. {
  2731. SAFE_DELETE(m_pConnection);
  2732. }
  2733. return true;
  2734. }
  2735. //---------------------------------------------------------------------------
  2736. bool __fastcall TFrmMain::IsDbAlive()
  2737. {
  2738. String sQry;
  2739. TADOQuery *pADO = NULL;
  2740. try
  2741. {
  2742. sQry = "SELECT TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS') AS CURDATE FROM DUAL";
  2743. try
  2744. {
  2745. pADO = new TADOQuery(NULL);
  2746. pADO->Close();
  2747. pADO->Connection = ITSDb_GetConnection();
  2748. pADO->SQL->Clear();
  2749. pADO->SQL->Text = sQry;
  2750. pADO->Open();
  2751. for( ; !pADO->Eof; pADO->Next())
  2752. {
  2753. String sCurrDate = pADO->FieldByName("CURDATE")->AsString;
  2754. }
  2755. }
  2756. catch (Exception &exception)
  2757. {
  2758. ITSDb_Close();
  2759. return false;
  2760. }
  2761. }
  2762. __finally
  2763. {
  2764. if (pADO)
  2765. {
  2766. pADO->Close();
  2767. delete pADO;
  2768. }
  2769. }
  2770. return true;
  2771. }
  2772. //---------------------------------------------------------------------------
  2773. void __fastcall TFrmMain::NBDS0010MClick(TObject *Sender)
  2774. {
  2775. #ifdef D_BLACKBOX
  2776. FORMSHOW(BDS0010M);
  2777. #endif
  2778. }
  2779. //---------------------------------------------------------------------------
  2780. void __fastcall TFrmMain::NBDS0020MClick(TObject *Sender)
  2781. {
  2782. #ifdef D_BLACKBOX
  2783. FORMSHOW(BDS0020M);
  2784. #endif
  2785. }
  2786. //---------------------------------------------------------------------------
  2787. void __fastcall TFrmMain::NBDH0010MClick(TObject *Sender)
  2788. {
  2789. #ifdef D_BLACKBOX
  2790. FORMSHOW(BDSH010M);
  2791. #endif
  2792. }
  2793. //---------------------------------------------------------------------------
  2794. void __fastcall TFrmMain::NBDH0020MClick(TObject *Sender)
  2795. {
  2796. #ifdef D_BLACKBOX
  2797. FORMSHOW(BDSH020M);
  2798. #endif
  2799. }
  2800. //---------------------------------------------------------------------------
  2801. void __fastcall TFrmMain::NTAS0010MClick(TObject *Sender)
  2802. {
  2803. FORMSHOW(TAS0010M);
  2804. }
  2805. //---------------------------------------------------------------------------
  2806. void __fastcall TFrmMain::NTAS0020MClick(TObject *Sender)
  2807. {
  2808. FORMSHOW(TAS0020M);
  2809. }
  2810. //---------------------------------------------------------------------------
  2811. void __fastcall TFrmMain::NTAS0030MClick(TObject *Sender)
  2812. {
  2813. FORMSHOW(TAS0030M);
  2814. }
  2815. //---------------------------------------------------------------------------
  2816. void __fastcall TFrmMain::NTAS0040MClick(TObject *Sender)
  2817. {
  2818. FORMSHOW(TAS0040M);
  2819. }
  2820. //---------------------------------------------------------------------------
  2821. void __fastcall TFrmMain::NTAS0050MClick(TObject *Sender)
  2822. {
  2823. FORMSHOW(TAS0050M);
  2824. }
  2825. //---------------------------------------------------------------------------
  2826. void __fastcall TFrmMain::NWBH0010MClick(TObject *Sender)
  2827. {
  2828. #ifdef D_WBH0010M
  2829. FORMSHOW(WBH0010M);
  2830. #endif
  2831. }
  2832. //---------------------------------------------------------------------------
  2833. void __fastcall TFrmMain::NAVIH080MClick(TObject *Sender)
  2834. {
  2835. #ifdef USE_AVI
  2836. FORMSHOW(AVIH080M);
  2837. #endif
  2838. }
  2839. //---------------------------------------------------------------------------
  2840. void __fastcall TFrmMain::NIDB0140MClick(TObject *Sender)
  2841. {
  2842. #ifdef D_IDB0140M
  2843. FORMSHOW(IDB0140M);
  2844. #endif
  2845. }
  2846. //---------------------------------------------------------------------------
  2847. void __fastcall TFrmMain::NITS0050MClick(TObject *Sender)
  2848. {
  2849. // FORMSHOW(ITS0050M);
  2850. }
  2851. //---------------------------------------------------------------------------
  2852. void __fastcall TFrmMain::RVDSM010MClick(TObject *Sender)
  2853. {
  2854. #ifdef USE_VDS
  2855. FORMSHOW(VDSM010M);
  2856. #endif
  2857. }
  2858. //---------------------------------------------------------------------------
  2859. void __fastcall TFrmMain::RVDSM020MClick(TObject *Sender)
  2860. {
  2861. #ifdef USE_VDS
  2862. FORMSHOW(VDSM020M);
  2863. #endif
  2864. }
  2865. //---------------------------------------------------------------------------