AppGlobalF.cpp 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #pragma hdrstop
  4. #include "AppGlobalF.h"
  5. #include "ITSDbF.h"
  6. #include "FRMLoginF.h"
  7. #include "ITSUtilF.h"
  8. #include <inifiles.hpp>
  9. //---------------------------------------------------------------------------
  10. #pragma package(smart_init)
  11. //---------------------------------------------------------------------------
  12. ST_GISINFO g_GisInfo;
  13. ST_SELLINK g_SelLink;
  14. String CenterCd = ""; // 지역센터 코드
  15. String CenterId = ""; // 지역센터 아이디
  16. String CenterName = ""; // 지역센터 명칭
  17. int g_nPid = -1; // Application Process ID
  18. String g_sAppDir = ""; // Application Directory
  19. String g_sAppName= ""; // Program name
  20. String g_sCfgDir = ""; // Config File Directory
  21. String g_sLogDir = ""; // Program Log Directory
  22. String g_sTempDir = ""; // Program Temp Directory
  23. String g_sFormsDir = ""; // Program Forms Directory
  24. String g_sBlackBox = "";
  25. String g_sLangDir = "";
  26. String g_sImageDir = "";
  27. APP_CONFIG g_AppCfg;
  28. LOGININFO *g_pLOGIN = NULL;
  29. LOG_INFO g_LogCfg;
  30. TITSLog *ITSLog = NULL;
  31. TITSLog *FDbLog = NULL;
  32. //TLangTrans *LangTrans = NULL;
  33. //---------------------------------------------------------------------------
  34. void LoadIcon(TIniFile* AIniFile, String ASection, String AItem, String& AValue)
  35. {
  36. try
  37. {
  38. AValue = AIniFile->ReadString(ASection, AItem, "");
  39. if (AValue != "")
  40. {
  41. AValue = g_sAppDir + "Image\\" + AValue;
  42. if (!FileExists(AValue)) AValue = "";
  43. }
  44. }
  45. catch(Exception &e)
  46. {
  47. }
  48. }
  49. //---------------------------------------------------------------------------
  50. bool LoadDefaultConfigInfo(String ACfgFile/*=""*/)
  51. {
  52. String sCfgFile;
  53. TIniFile *pIniFile = NULL;
  54. String sIniFile = ChangeFileExt(ExtractFileName(Application->ExeName), ".ini");
  55. if (!ACfgFile.IsEmpty())
  56. sIniFile = ACfgFile + ".ini";
  57. sCfgFile = g_sCfgDir + sIniFile;
  58. g_AppCfg.sConfigFile = sCfgFile;
  59. g_AppCfg.AutoLogout.Enabled = false;
  60. g_AppCfg.AutoLogout.IntervalMin = 0;
  61. g_AppCfg.AutoLogout.LogoutExit = false;
  62. g_AppCfg.thr.pThread = NULL;
  63. g_AppCfg.thr.dwThreadId = 0;
  64. g_AppCfg.thr.nHandle = 0;
  65. g_AppCfg.thr.bRunning = false;
  66. g_AppCfg.bAppClose = false;
  67. try
  68. {
  69. String sTmp;
  70. pIniFile = new TIniFile(sCfgFile);
  71. g_AppCfg.sTitle = pIniFile->ReadString("APPLICATION", "TITLE", "광역교통정보 교통관리시스템");
  72. g_AppCfg.sProcessId = pIniFile->ReadString("APPLICATION", "PROCESSID", "999999");
  73. g_AppCfg.sLogDay = pIniFile->ReadString("APPLICATION", "LOGDAY", "");
  74. g_AppCfg.sAppPath = pIniFile->ReadString("APPLICATION", "APP_PATH", "");
  75. g_AppCfg.sSkinName = pIniFile->ReadString("APPLICATION", "SKINNAME", "Black");
  76. if (g_AppCfg.sSkinName.IsEmpty()) g_AppCfg.sSkinName = "Blue";
  77. sTmp = pIniFile->ReadString("APPLICATION", "SAVEFORM", "1");
  78. g_AppCfg.bSaveForm = (sTmp == "1") ? true : false;
  79. sTmp = "1";
  80. sTmp = pIniFile->ReadString("APPLICATION", "LOGINPROMPT", "1");
  81. g_AppCfg.bLoginPrompt = (sTmp == "1") ? true : false;
  82. g_AppCfg.sDefUseId = pIniFile->ReadString("APPLICATION", "LASTUSER", "");
  83. g_AppCfg.sLang = pIniFile->ReadString("APPLICATION", "LANGUAGE", "en");
  84. g_AppCfg.sLang = g_AppCfg.sLang.LowerCase();
  85. if (g_AppCfg.sLang != "en" && g_AppCfg.sLang != "kr")
  86. g_AppCfg.sLang = "kr";
  87. g_AppCfg.bDebug = false;
  88. sTmp = pIniFile->ReadString("APPLICATION", "DEBUG", "0");
  89. if (sTmp == "1") g_AppCfg.bDebug = true;
  90. g_AppCfg.bTermChildProg = true;
  91. sTmp = pIniFile->ReadString("APPLICATION", "TERMCHILD", "1");
  92. if (sTmp == "0") g_AppCfg.bTermChildProg = false;
  93. g_AppCfg.bOnlyOneScreen = true;
  94. sTmp = pIniFile->ReadString("APPLICATION", "ONESCREEN", "1");
  95. if (sTmp == "0") g_AppCfg.bOnlyOneScreen = false;
  96. sTmp = pIniFile->ReadString("ALARM", "WINDOW", "1");
  97. g_AppCfg.Alarm.Window = (sTmp == "1") ? true : false;
  98. sTmp = pIniFile->ReadString("ALARM", "ENABLED", "0");
  99. g_AppCfg.Alarm.Enabled = (sTmp == "1") ? true : false;
  100. sTmp = pIniFile->ReadString("ALARM", "TIMEOUT", "10");
  101. g_AppCfg.Alarm.TimeOut = sTmp.ToIntDef(0);
  102. if (g_AppCfg.Alarm.TimeOut == 0) g_AppCfg.Alarm.TimeOut = 10;
  103. if (g_AppCfg.Alarm.TimeOut > 60) g_AppCfg.Alarm.TimeOut = 60;
  104. sTmp = pIniFile->ReadString("TEMPERATURE", "ALARMVALUE", "45");
  105. g_AppCfg.Temp.AlarmValue = sTmp.ToIntDef(0);
  106. sTmp = pIniFile->ReadString("INCIDENT", "WINDOW", "1");
  107. g_AppCfg.Incident.Window = (sTmp == "1") ? true : false;
  108. sTmp = pIniFile->ReadString("INCIDENT", "ENABLED", "0");
  109. g_AppCfg.Incident.Enabled = (sTmp == "1") ? true : false;
  110. sTmp = pIniFile->ReadString("INCIDENT", "TIMEOUT", "30");
  111. g_AppCfg.Incident.TimeOut = sTmp.ToIntDef(0);
  112. if (g_AppCfg.Incident.TimeOut == 0) g_AppCfg.Incident.TimeOut = 30;
  113. if (g_AppCfg.Incident.TimeOut > 300) g_AppCfg.Incident.TimeOut = 60;
  114. sTmp = pIniFile->ReadString("AUTOLOGOUT", "ENABLED", "0");
  115. g_AppCfg.AutoLogout.Enabled = (sTmp == "1") ? true : false;
  116. sTmp = pIniFile->ReadString("AUTOLOGOUT", "INTERVALMIN", "10");
  117. g_AppCfg.AutoLogout.IntervalMin = sTmp.ToIntDef(0);
  118. if (g_AppCfg.AutoLogout.IntervalMin == 0) g_AppCfg.AutoLogout.IntervalMin = 10;
  119. sTmp = pIniFile->ReadString("AUTOLOGOUT", "LOGOUTEXIT", "0");
  120. g_AppCfg.AutoLogout.LogoutExit = (sTmp == "1") ? true : false;
  121. String sSqlLog;
  122. g_AppCfg.itsdb.bSqlLog = false;
  123. g_AppCfg.itsdb.sProvider = pIniFile->ReadString("ITSDB", "PROVIDER", "OraOLEDB.Oracle.1");
  124. g_AppCfg.itsdb.sServerName = pIniFile->ReadString("ITSDB", "SERVERNAME", "HANTE");
  125. g_AppCfg.itsdb.sUserName = pIniFile->ReadString("ITSDB", "USERNAME", "hnits");
  126. g_AppCfg.itsdb.sPassword = pIniFile->ReadString("ITSDB", "PASSWORD", "hnits");
  127. //sSqlLog = pIniFile->ReadString("ITSDB", "SQLLOG", "0");
  128. //if (sSqlLog == "1") g_AppCfg.itsdb.bSqlLog = true;
  129. //시설물 아이콘 경로 로딩ㄷ
  130. LoadIcon(pIniFile, "VMS", "ICON_N", g_AppCfg.vms.ICON[icon_n]);
  131. LoadIcon(pIniFile, "VMS", "ICON_E", g_AppCfg.vms.ICON[icon_e]);
  132. LoadIcon(pIniFile, "VMS", "ICON_M", g_AppCfg.vms.ICON[icon_m]);
  133. LoadIcon(pIniFile, "VMS", "ICON_R", g_AppCfg.vms.ICON[icon_r]);
  134. LoadIcon(pIniFile, "VMS", "ICON_S", g_AppCfg.vms.ICON[icon_s]);
  135. LoadIcon(pIniFile, "VDS", "ICON_N", g_AppCfg.vds.ICON[icon_n]);
  136. LoadIcon(pIniFile, "VDS", "ICON_E", g_AppCfg.vds.ICON[icon_e]);
  137. LoadIcon(pIniFile, "VDS", "ICON_M", g_AppCfg.vds.ICON[icon_m]);
  138. LoadIcon(pIniFile, "VDS", "ICON_R", g_AppCfg.vds.ICON[icon_r]);
  139. LoadIcon(pIniFile, "VDS", "ICON_S", g_AppCfg.vds.ICON[icon_s]);
  140. CenterId = pIniFile->ReadString("CENTER", "CENTERID", "L01");
  141. CenterName = pIniFile->ReadString("CENTER", "CENTERNAME", "중앙센터");
  142. CenterCd = String(StrToInt(CenterId.SubString(2, 2)));
  143. // GIS 설정정보 로딩
  144. String sApiKey = pIniFile->ReadString("MAP", "APIKEY", "");
  145. String sLeftTopX = pIniFile->ReadString("MAP", "LEFTTOPX", "128.821489368016");
  146. String sLeftTopY = pIniFile->ReadString("MAP", "LEFTTOPY", "34.9358323860641");
  147. String sRightBottomX = pIniFile->ReadString("MAP", "RIGHTBOTTOMX", "128.364067765232");
  148. String sRightBottomY = pIniFile->ReadString("MAP", "RIGHTBOTTOMY", "34.7674700167273");
  149. String sCenterX = pIniFile->ReadString("MAP", "CENTERX", "14.580137");
  150. String sCenterY = pIniFile->ReadString("MAP", "CENTERY", "121.085283");
  151. String sZoomLevel = pIniFile->ReadString("MAP", "ZOOMLEVEL", "14");
  152. g_GisInfo.sApiKey = sApiKey;
  153. g_GisInfo.nZoomLevel = sZoomLevel.ToIntDef(14);
  154. g_GisInfo.dCenterX = sCenterX.ToDouble();
  155. g_GisInfo.dCenterY = sCenterY.ToDouble();
  156. g_GisInfo.dLeftTopX = sLeftTopX.ToDouble();
  157. g_GisInfo.dLeftTopY = sLeftTopY.ToDouble();
  158. g_GisInfo.dRightBottomX = sRightBottomX.ToDouble();
  159. g_GisInfo.dRightBottomY = sRightBottomY.ToDouble();
  160. }
  161. __finally
  162. {
  163. if (pIniFile) delete pIniFile;
  164. pIniFile = NULL;
  165. WriteConfigInfo(sIniFile, "AUTOLOGOUT", "LOGOUTEXIT", "0");
  166. }
  167. return true;
  168. }
  169. //---------------------------------------------------------------------------
  170. bool CMM_InsertLoginHist(PLOGININFO pLogin, bool ALogin)
  171. {
  172. String sQry;
  173. bool bResult= false;
  174. TADOQuery *adoQry = NULL;
  175. if (!pLogin) return false;
  176. if (ALogin)
  177. {
  178. sQry = "INSERT INTO TB_USERCNNC_HS ( \r\n"
  179. " LOGIN_HMS, \r\n"
  180. " USER_ID, \r\n"
  181. " LOGOUT_HMS \r\n"
  182. " ) \r\n"
  183. "VALUES ( \r\n"
  184. " :p01, \r\n"
  185. " :p02, \r\n"
  186. " NULL \r\n"
  187. " ) \r\n";
  188. }
  189. else
  190. {
  191. sQry = "UPDATE TB_USERCNNC_HS SET \r\n"
  192. " LOGOUT_HMS = TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS') \r\n"
  193. " WHERE LOGIN_HMS = :p01 \r\n"
  194. " AND USER_ID = :p02 \r\n";
  195. }
  196. try
  197. {
  198. try
  199. {
  200. adoQry = new TADOQuery(NULL);
  201. adoQry->Connection = ITSDb_GetConnection();
  202. ITSDb_GetConnection()->BeginTrans();
  203. adoQry->Close();
  204. adoQry->SQL->Text = sQry;
  205. adoQry->Parameters->ParamByName("p01")->Value = pLogin->sLoginTime;
  206. adoQry->Parameters->ParamByName("p02")->Value = pLogin->sUserId;
  207. int nRowCnt = adoQry->ExecSQL();
  208. ITSDb_GetConnection()->CommitTrans();
  209. bResult = nRowCnt > 1 ? true : false;
  210. }
  211. catch (Exception &exception)
  212. {
  213. ITSDb_GetConnection()->RollbackTrans();
  214. throw Exception(String(exception.ClassName()) + exception.Message);
  215. }
  216. catch (...)
  217. {
  218. ITSDb_GetConnection()->RollbackTrans();
  219. }
  220. }
  221. __finally
  222. {
  223. if (adoQry)
  224. {
  225. adoQry->Close();
  226. delete adoQry;
  227. }
  228. }
  229. return bResult;
  230. }
  231. //---------------------------------------------------------------------------
  232. bool ITSLoginProc(String sConnSystem, String sDefUser, TComponent *Owner)
  233. {
  234. bool bResult= false;
  235. PLOGININFO pLogin = ITSDb_GetLoginInfo();
  236. if (NULL == pLogin) return bResult;
  237. FRMLogin = new TFRMLogin(Owner);
  238. if (FRMLogin)
  239. {
  240. FRMLogin->EdUserID->Text = sDefUser;
  241. FRMLogin->ShowModal();
  242. pLogin->bLogin = FRMLogin->m_bLogin;
  243. if (pLogin->bLogin)
  244. {
  245. pLogin->sUserId = FRMLogin->m_sUserID;
  246. pLogin->sUserName = FRMLogin->m_sUserName;
  247. pLogin->sUserRightId = FRMLogin->m_sUserRightID;
  248. pLogin->sUserRightName = FRMLogin->m_sUserRightName;
  249. pLogin->sConnSystem = sConnSystem;
  250. pLogin->sLoginIp = FRMLogin->GetLocalIp();
  251. pLogin->sLoginTime = FRMLogin->m_sLoginTime;
  252. }
  253. else
  254. {
  255. pLogin->sUserId = "default";
  256. pLogin->sUserName = "default";
  257. pLogin->sUserRightId = "1";
  258. pLogin->sUserRightName = "";
  259. pLogin->sConnSystem = "OPR";
  260. pLogin->sLoginSeq = "0";
  261. pLogin->sLoginIp = "127.0.0.1";
  262. pLogin->sLoginTime = Now().FormatString("yyyymmddhhnnss");
  263. }
  264. delete FRMLogin;
  265. FRMLogin = NULL;
  266. bResult = pLogin->bLogin;
  267. }
  268. else
  269. {
  270. bResult = false;
  271. }
  272. if (bResult) CMM_InsertLoginHist(pLogin, true);
  273. return bResult;
  274. }
  275. //---------------------------------------------------------------------------
  276. void ITSLogoutProc()
  277. {
  278. if (ITSDb_IsOpen() == false) return;
  279. PLOGININFO pLogin = ITSDb_GetLoginInfo();
  280. if (pLogin)
  281. {
  282. if (pLogin->bLogin) CMM_InsertLoginHist(pLogin, false);
  283. pLogin->bLogin = false;
  284. }
  285. }
  286. //---------------------------------------------------------------------------
  287. int UserLogin()
  288. {
  289. if (ITSLoginProc("OPR", g_AppCfg.sDefUseId, Application))
  290. {
  291. g_pLOGIN = ITSDb_GetLoginInfo();
  292. if (g_pLOGIN) WriteConfigInfo(g_AppCfg.sConfigFile, "APPLICATION", "LASTUSER", g_pLOGIN->sUserId);
  293. }
  294. return g_pLOGIN == NULL ? 0 : 1;
  295. }
  296. //---------------------------------------------------------------------------
  297. int UserLogout()
  298. {
  299. if (g_pLOGIN)
  300. WriteConfigInfo(g_AppCfg.sConfigFile, "APPLICATION", "LASTUSER", g_pLOGIN->sUserId);
  301. if (g_AppCfg.AutoLogout.LogoutExit)
  302. WriteConfigInfo(g_AppCfg.sConfigFile, "AUTOLOGOUT", "LOGOUTEXIT", "1");
  303. else
  304. WriteConfigInfo(g_AppCfg.sConfigFile, "AUTOLOGOUT", "LOGOUTEXIT", "0");
  305. ITSLogoutProc();
  306. g_pLOGIN = NULL;
  307. return 0;
  308. }
  309. //---------------------------------------------------------------------------
  310. /*
  311. * 환경설정 정보를 저장하는 함수.
  312. * arguments
  313. * String : RegisterKey 또는 파일이름
  314. * return
  315. * bool : 실패하면 false
  316. */
  317. bool WriteConfigInfo(String sCfgFile, String sTitle, String sItem, String sValue)
  318. {
  319. String ConfigFile;
  320. TIniFile *pIniFile = NULL;
  321. ConfigFile = sCfgFile;
  322. try
  323. {
  324. pIniFile = new TIniFile(ConfigFile);
  325. if (pIniFile == NULL)
  326. {
  327. return false;
  328. }
  329. pIniFile->WriteString(sTitle, sItem, sValue);
  330. }
  331. catch(...)
  332. {
  333. }
  334. if (pIniFile)
  335. {
  336. pIniFile->Free();
  337. pIniFile = NULL;
  338. }
  339. return true;
  340. }
  341. //---------------------------------------------------------------------------
  342. /*
  343. * 환경설정 정보를 읽어오는 함수.
  344. * arguments
  345. * String : RegisterKey 또는 파일이름
  346. * return
  347. * bool : 실패하면 false
  348. */
  349. bool ReadConfigInfo(String sCfgFile, String sTitle, String sItem, String &sValue)
  350. {
  351. bool bRes;
  352. String ConfigFile;
  353. TIniFile *pIniFile = NULL;
  354. bRes = false;
  355. ConfigFile = sCfgFile;
  356. try
  357. {
  358. pIniFile = new TIniFile(ConfigFile);
  359. if (pIniFile == NULL)
  360. {
  361. return bRes;
  362. }
  363. sValue = pIniFile->ReadString(sTitle, sItem, "");
  364. if (sValue != "")
  365. {
  366. bRes = true;
  367. }
  368. }
  369. catch(...)
  370. {
  371. }
  372. if (pIniFile)
  373. {
  374. pIniFile->Free();
  375. pIniFile = NULL;
  376. }
  377. return bRes;
  378. }
  379. //---------------------------------------------------------------------------
  380. void ShowErrorMsg(String ATitle, String AErrMsg)
  381. {
  382. Application->NormalizeTopMosts();
  383. Application->MessageBox(AErrMsg.c_str(), ATitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  384. Application->RestoreTopMosts();
  385. }
  386. //----------------------------------------------------------------------------
  387. String APP_FillCode(TcxComboBox *ACombo, String ACode)
  388. {
  389. String sDefItem = "";
  390. #if 0
  391. try
  392. {
  393. ACombo->Properties->Items->Clear();
  394. if (!ACombo) return sDefItem;
  395. FOR_STL(TItsSubCode *, pSubCode, ACode->FSubLists)
  396. {
  397. if (pSubCode->USE_YN != "Y") continue;
  398. ACombo->Properties->Items->Add("[" + pSubCode->CMMN_CD + "] " + pSubCode->CMMN_CD_KOR_NM);
  399. if (sDefItem == "") sDefItem = "[" + pSubCode->CMMN_CD + "] " + pSubCode->CMMN_CD_KOR_NM;
  400. }
  401. }
  402. catch(Exception &e)
  403. {
  404. }
  405. ACombo->ItemIndex = 0;
  406. #endif
  407. return sDefItem;
  408. }
  409. //----------------------------------------------------------------------------
  410. String APP_GetCode(TcxComboBox *ACombo)
  411. {
  412. String sReturn = "";
  413. if (ACombo->ItemIndex >= 0)
  414. {
  415. String sDesc = ACombo->Properties->Items->Strings[ACombo->ItemIndex];
  416. String sCode = sDesc.SubString(sDesc.Pos("[") + 1,
  417. sDesc.Pos("]") - (sDesc.Pos("[") + 1));
  418. sReturn = sCode;
  419. }
  420. return sReturn;
  421. }
  422. //----------------------------------------------------------------------------
  423. String APP_GetCodeDesc(TcxComboBox *ACombo, String ACode)
  424. {
  425. String sReturn = "";
  426. for (int ii = 0; ii < ACombo->Properties->Items->Count; ii++)
  427. {
  428. String sDesc = ACombo->Properties->Items->Strings[ii];
  429. String sCode = sDesc.SubString(sDesc.Pos("[") + 1,
  430. sDesc.Pos("]") - (sDesc.Pos("[") + 1));
  431. if (ACode == sCode)
  432. {
  433. sReturn = sDesc;
  434. break;
  435. }
  436. }
  437. return sReturn;
  438. }
  439. //----------------------------------------------------------------------------
  440. String APP_GetCodeDefCode(TcxComboBox *ACombo)
  441. {
  442. String sReturn = "";
  443. if (ACombo->Properties->Items->Count > 0)
  444. {
  445. String sDesc = ACombo->Properties->Items->Strings[0];
  446. String sCode = sDesc.SubString(sDesc.Pos("[") + 1,
  447. sDesc.Pos("]") - (sDesc.Pos("[") + 1));
  448. sReturn = sCode;
  449. }
  450. return sReturn;
  451. }
  452. //----------------------------------------------------------------------------
  453. String APP_GetCodeDefDesc(TcxComboBox *ACombo)
  454. {
  455. String sReturn = "";
  456. if (ACombo->Properties->Items->Count > 0)
  457. {
  458. String sDesc = ACombo->Properties->Items->Strings[0];
  459. sReturn = sDesc;
  460. }
  461. return sReturn;
  462. }
  463. //----------------------------------------------------------------------------
  464. int APP_SetCode(TcxComboBox *ACombo, String ACode)
  465. {
  466. int nItemIndex = -1;
  467. for (int ii = 0; ii < ACombo->Properties->Items->Count; ii++)
  468. {
  469. String sDesc = ACombo->Properties->Items->Strings[ii];
  470. String sCode = sDesc.SubString(sDesc.Pos("[") + 1,
  471. sDesc.Pos("]") - (sDesc.Pos("[") + 1));
  472. if (ACode == sCode)
  473. {
  474. nItemIndex = ii;
  475. break;
  476. }
  477. }
  478. ACombo->ItemIndex = nItemIndex;
  479. return nItemIndex;
  480. }
  481. //----------------------------------------------------------------------------
  482. ULONG ProcIDFromWnd(HWND hwnd) // 윈도우 핸들로 프로세스 아이디 얻기
  483. {
  484. ULONG idProc;
  485. GetWindowThreadProcessId( hwnd, &idProc );
  486. return idProc;
  487. }
  488. //----------------------------------------------------------------------------
  489. HWND GetWinHandle(ULONG pid) // 프로세스 아이디로 윈도우 핸들 얻기
  490. {
  491. HWND tempHwnd = FindWindow(NULL,NULL); // 최상위 윈도우 핸들 찾기
  492. while( tempHwnd != NULL )
  493. {
  494. if( GetParent(tempHwnd) == NULL ) // 최상위 핸들인지 체크, 버튼 등도 핸들을 가질 수 있으므로 무시하기 위해
  495. if( pid == ProcIDFromWnd(tempHwnd) )
  496. return tempHwnd;
  497. tempHwnd = GetWindow(tempHwnd, GW_HWNDNEXT); // 다음 윈도우 핸들 찾기
  498. }
  499. return NULL;
  500. }
  501. #if 0
  502. String ITSUtil_FormatStr(String AStrDateTime, String AFormat)
  503. {
  504. String sDateTime = "";
  505. if (AStrDateTime.IsEmpty()) return sDateTime;
  506. ShowMessage("IN: " + AStrDateTime);
  507. sDateTime = AStrDateTime;
  508. try
  509. {
  510. if (AFormat == STR_DATETIME)
  511. {
  512. if (AStrDateTime.Length() < 14) return AStrDateTime;
  513. sDateTime = AStrDateTime.SubString( 1, 14);
  514. }
  515. else
  516. if (AFormat == STR_HHNN)
  517. {
  518. if (AStrDateTime.Length() < 12) return AStrDateTime;
  519. sDateTime = AStrDateTime.SubString( 1, 12);
  520. }
  521. else
  522. if (AFormat == STR_DATEHOUR)
  523. {
  524. if (AStrDateTime.Length() < 10) return AStrDateTime;
  525. sDateTime = AStrDateTime.SubString( 1, 10);
  526. }
  527. else
  528. if (AFormat == STR_DATE)
  529. {
  530. if (AStrDateTime.Length() < 8) return AStrDateTime;
  531. sDateTime = AStrDateTime.SubString( 1, 8);
  532. }
  533. else
  534. if (AFormat == STR_MM)
  535. {
  536. if (AStrDateTime.Length() < 6) return AStrDateTime;
  537. sDateTime = AStrDateTime.SubString( 1, 6);
  538. }
  539. }
  540. catch(...)
  541. {
  542. }
  543. ShowMessage("OUT: " + sDateTime);
  544. return sDateTime;
  545. }
  546. //---------------------------------------------------------------------------
  547. #else
  548. String ITSUtil_FormatStr(String AStrDateTime, String AFormat)
  549. {
  550. #define SYEAR "-"
  551. #define STIME ":"
  552. #define SPACE " "
  553. String sDateTime = "";
  554. String sInData = AStrDateTime;//AnsiString(AStrDateTime);
  555. String sFormat = AFormat;
  556. if (sInData.IsEmpty())
  557. return sInData;
  558. try
  559. {
  560. if (sFormat == STR_DATETIME)
  561. {
  562. if (sInData.Length() < 14) return AStrDateTime;
  563. sDateTime = sInData.SubString( 1, 4) + SYEAR +
  564. sInData.SubString( 5, 2) + SYEAR +
  565. sInData.SubString( 7, 2) + SPACE +
  566. sInData.SubString( 9, 2) + STIME +
  567. sInData.SubString(11, 2) + STIME +
  568. sInData.SubString(13, 2);
  569. }
  570. else
  571. if (sFormat == STR_HHNN)
  572. {
  573. if (sInData.Length() < 12) return AStrDateTime;
  574. sDateTime = sInData.SubString( 1, 4) + SYEAR +
  575. sInData.SubString( 5, 2) + SYEAR +
  576. sInData.SubString( 7, 2) + SPACE +
  577. sInData.SubString( 9, 2) + STIME +
  578. sInData.SubString(11, 2);
  579. }
  580. else
  581. if (sFormat == STR_DATEHOUR)
  582. {
  583. if (sInData.Length() < 10) return AStrDateTime;
  584. sDateTime = sInData.SubString( 1, 4) + SYEAR +
  585. sInData.SubString( 5, 2) + SYEAR +
  586. sInData.SubString( 7, 2) + SPACE +
  587. sInData.SubString( 9, 2);
  588. }
  589. else
  590. if (sFormat == STR_DATE)
  591. {
  592. if (sInData.Length() < 8) return AStrDateTime;
  593. sDateTime = sInData.SubString( 1, 4) + SYEAR +
  594. sInData.SubString( 5, 2) + SYEAR +
  595. sInData.SubString( 7, 2);
  596. }
  597. else
  598. if (sFormat == STR_MM)
  599. {
  600. if (sInData.Length() < 6) return AStrDateTime;
  601. sDateTime = sInData.SubString( 1, 4) + SYEAR +
  602. sInData.SubString( 5, 2);
  603. }
  604. else
  605. {
  606. sDateTime = sInData;
  607. }
  608. }
  609. catch(Exception &E)
  610. {
  611. throw Exception(String(E.ClassName()) + E.Message);
  612. }
  613. return sDateTime;
  614. }
  615. //---------------------------------------------------------------------------
  616. #endif
  617. #include <DateUtils.hpp>
  618. TDateTime APP_StrToDateTime(String AStrDateTime)
  619. {
  620. TDateTime dtReturnValue = NULL;
  621. if (AStrDateTime.IsEmpty()) return dtReturnValue;
  622. if (AStrDateTime.Length() != 14) return dtReturnValue;
  623. AnsiString sDateTime = AnsiString(AStrDateTime);
  624. try
  625. {
  626. #if 0
  627. sDateTime.printf(L"%s-%s-%s %s:%s:%s",
  628. AStrDateTime.SubString( 1, 4).c_str(),
  629. AStrDateTime.SubString( 5, 2).c_str(),
  630. AStrDateTime.SubString( 7, 2).c_str(),
  631. AStrDateTime.SubString( 9, 2).c_str(),
  632. AStrDateTime.SubString(11, 2).c_str(),
  633. AStrDateTime.SubString(13, 2).c_str());
  634. dtReturnValue = StrToDateTime(sDateTime);
  635. #endif
  636. // swscanf(sRgb.c_str(), L"%d,%d,%d", &r, &g, &b);
  637. int year, month, day, hour, minute, second;
  638. sscanf(sDateTime.c_str(), "%4d%2d%2d%2d%2d%2d", &year, &month, &day, &hour, &minute, &second);
  639. dtReturnValue = EncodeDateTime(year, month, day, hour, minute, second, 0);
  640. }
  641. catch(...)
  642. {
  643. }
  644. return dtReturnValue;
  645. }
  646. //---------------------------------------------------------------------------