CFG0000MF.cpp 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573
  1. /****************************************************************************
  2. * @source :
  3. * @description :
  4. ****************************************************************************
  5. * DATE AUTHOR DESCRIPTION
  6. * --------------------------------------------------------------------------
  7. * 2011/12/24 정승호 최초작성
  8. *
  9. ****************************************************************************/
  10. //---------------------------------------------------------------------------
  11. #include <vcl.h>
  12. #include "ITSSkinF.h"
  13. #//include "ITSUtilF.h"
  14. #include "ITSDbF.h"
  15. //#include "AppGlobalF.h"
  16. #pragma hdrstop
  17. #include "CFG0000MF.h"
  18. //---------------------------------------------------------------------------
  19. #pragma package(smart_init)
  20. #pragma link "cxButtonEdit"
  21. #pragma link "cxButtons"
  22. #pragma link "cxContainer"
  23. #pragma link "cxControls"
  24. #pragma link "cxEdit"
  25. #pragma link "cxGraphics"
  26. #pragma link "cxGroupBox"
  27. #pragma link "cxLookAndFeelPainters"
  28. #pragma link "cxLookAndFeels"
  29. #pragma link "cxMaskEdit"
  30. #pragma link "cxTextEdit"
  31. #pragma link "dxSkinBlack"
  32. #pragma link "dxSkinBlue"
  33. #pragma link "dxSkinCaramel"
  34. #pragma link "dxSkinCoffee"
  35. #pragma link "dxSkinDarkRoom"
  36. #pragma link "dxSkinDarkSide"
  37. #pragma link "dxSkinFoggy"
  38. #pragma link "dxSkinGlassOceans"
  39. #pragma link "dxSkiniMaginary"
  40. #pragma link "dxSkinLilian"
  41. #pragma link "dxSkinLiquidSky"
  42. #pragma link "dxSkinLondonLiquidSky"
  43. #pragma link "dxSkinMcSkin"
  44. #pragma link "dxSkinMoneyTwins"
  45. #pragma link "dxSkinOffice2007Black"
  46. #pragma link "dxSkinOffice2007Blue"
  47. #pragma link "dxSkinOffice2007Green"
  48. #pragma link "dxSkinOffice2007Pink"
  49. #pragma link "dxSkinOffice2007Silver"
  50. #pragma link "dxSkinOffice2010Black"
  51. #pragma link "dxSkinOffice2010Blue"
  52. #pragma link "dxSkinOffice2010Silver"
  53. #pragma link "dxSkinsCore"
  54. #pragma link "dxSkinSeven"
  55. #pragma link "dxSkinSharp"
  56. #pragma link "dxSkinSilver"
  57. #pragma link "dxSkinStardust"
  58. #pragma link "cxCheckBox"
  59. #pragma link "cxSpinEdit"
  60. #pragma link "cxClasses"
  61. #pragma link "cxCustomData"
  62. #pragma link "cxData"
  63. #pragma link "cxDataStorage"
  64. #pragma link "cxDBData"
  65. #pragma link "cxFilter"
  66. #pragma link "cxGrid"
  67. #pragma link "cxGridCustomTableView"
  68. #pragma link "cxGridCustomView"
  69. #pragma link "cxGridDBTableView"
  70. #pragma link "cxGridLevel"
  71. #pragma link "cxGridTableView"
  72. #pragma link "cxStyles"
  73. #pragma link "dxSkinscxPCPainter"
  74. #pragma link "dxSkinsForm"
  75. #pragma resource "*.dfm"
  76. TCFG0000M *CFG0000M = NULL;
  77. typedef struct tag_AppConfig
  78. {
  79. String sConfigFile;
  80. bool bAppClose;
  81. long lMainWinHandle; /* Main Window Handle */
  82. String sTitle;
  83. String sProcessId; /* 프로세스 ID */
  84. String sSkinName;
  85. bool bSaveForm;
  86. bool bLoginPrompt;
  87. String sDefUseId;
  88. int nLogLevel;
  89. AnsiString sLogDay;
  90. bool bDebug;
  91. struct
  92. {
  93. bool Window;
  94. bool Enabled;
  95. int TimeOut;
  96. } Alarm;
  97. struct
  98. {
  99. bool Window;
  100. bool Enabled;
  101. int TimeOut;
  102. } Incident;
  103. struct
  104. {
  105. int AlarmValue;
  106. } Temp;
  107. struct
  108. {
  109. bool Enabled;
  110. int IntervalMin;
  111. bool LogoutExit;
  112. } AutoLogout;
  113. struct
  114. {
  115. TThread *pThread;
  116. DWORD dwThreadId;
  117. unsigned int nHandle;
  118. bool bRunning;
  119. } thr;
  120. struct
  121. {
  122. String sProvider;
  123. String sServerName;
  124. String sUserName;
  125. String sPassword;
  126. bool bSqlLog;
  127. } itsdb;
  128. struct
  129. {
  130. String sMainMap;
  131. String sLinkMap;
  132. } flashmap;
  133. struct
  134. {
  135. String sComModel;
  136. String sDevModel;
  137. } vmscam;
  138. } APP_CONFIG;
  139. /*
  140. * 전자지도 정보를 저장할 구조체
  141. */
  142. typedef struct
  143. {
  144. bool bLoadL0;
  145. bool bLoadL1;
  146. bool bLoadL2;
  147. bool bLoadL3;
  148. double dCenterX;
  149. double dCenterY;
  150. double dLeftTopX;
  151. double dLeftTopY;
  152. double dRightBottomX;
  153. double dRightBottomY;
  154. String sCenterName;
  155. String sMapFileNameL0;
  156. String sMapFileNameL1;
  157. String sMapFileNameL2;
  158. String sMapFileNameL3;
  159. String sIdxMapFileName;
  160. } ST_GISINFO;
  161. APP_CONFIG g_AppCfg;
  162. ST_GISINFO g_GisInfo;
  163. String CenterCd = ""; // 지역센터 코드
  164. String CenterId = ""; // 지역센터 아이디
  165. String CenterName = ""; // 지역센터 명칭
  166. int g_nPid = -1; // Application Process ID
  167. String g_sAppDir = ""; // Application Directory
  168. String g_sAppName= ""; // Program name
  169. String g_sCfgDir = ""; // Config File Directory
  170. String g_sLogDir = ""; // Program Log Directory
  171. String g_sTempDir = ""; // Program Temp Directory
  172. String g_sFormsDir = ""; // Program Forms Directory
  173. //---------------------------------------------------------------------------
  174. bool LoadConfigInfo()
  175. {
  176. String sCfgFile;
  177. TIniFile *pIniFile = NULL;
  178. // g_nPid = GetAppInfo(Application->ExeName, g_sAppDir, g_sProgNm);
  179. g_sAppDir = ExtractFilePath(Application->ExeName);
  180. sCfgFile = g_sAppDir + "\\Cfg\\ITS_OP.ini";
  181. g_AppCfg.AutoLogout.Enabled = false;
  182. g_AppCfg.AutoLogout.IntervalMin = 0;
  183. g_AppCfg.AutoLogout.LogoutExit = false;
  184. g_AppCfg.thr.pThread = NULL;
  185. g_AppCfg.thr.dwThreadId = 0;
  186. g_AppCfg.thr.nHandle = 0;
  187. g_AppCfg.thr.bRunning = false;
  188. g_AppCfg.bAppClose = false;
  189. try
  190. {
  191. String sTmp;
  192. pIniFile = new TIniFile(sCfgFile);
  193. g_AppCfg.sTitle = pIniFile->ReadString("APPLICATION", "TITLE", "광역교통정보 교통관리시스템");
  194. g_AppCfg.sProcessId = pIniFile->ReadString("APPLICATION", "PROCESSID", "999999");
  195. g_AppCfg.sSkinName = pIniFile->ReadString("APPLICATION", "SKINNAME", "Blue");
  196. if (g_AppCfg.sSkinName.IsEmpty()) g_AppCfg.sSkinName = "Blue";
  197. sTmp = pIniFile->ReadString("APPLICATION", "SAVEFORM", "1");
  198. g_AppCfg.bSaveForm = (sTmp == "1") ? true : false;
  199. sTmp = "0";//pIniFile->ReadString("DEFAULT", "LOGINPROMPT", "1");
  200. g_AppCfg.bLoginPrompt = (sTmp == "1") ? true : false;
  201. g_AppCfg.sDefUseId = pIniFile->ReadString("APPLICATION", "LASTUSER", "");
  202. sTmp = pIniFile->ReadString("AUTOLOGOUT", "ENABLED", "0");
  203. g_AppCfg.AutoLogout.Enabled = (sTmp == "1") ? true : false;
  204. sTmp = pIniFile->ReadString("AUTOLOGOUT", "INTERVALMIN", "10");
  205. g_AppCfg.AutoLogout.IntervalMin = sTmp.ToIntDef(0);
  206. if (g_AppCfg.AutoLogout.IntervalMin == 0) g_AppCfg.AutoLogout.IntervalMin = 10;
  207. sTmp = pIniFile->ReadString("AUTOLOGOUT", "LOGOUTEXIT", "0");
  208. g_AppCfg.AutoLogout.LogoutExit = (sTmp == "1") ? true : false;
  209. g_AppCfg.itsdb.bSqlLog = false;
  210. g_AppCfg.itsdb.sProvider = pIniFile->ReadString("ITSDB", "PROVIDER", "OraOLEDB.Oracle.1");
  211. g_AppCfg.itsdb.sServerName = pIniFile->ReadString("ITSDB", "SERVERNAME", "HANTE");
  212. g_AppCfg.itsdb.sUserName = pIniFile->ReadString("ITSDB", "USERNAME", "hnits");
  213. g_AppCfg.itsdb.sPassword = pIniFile->ReadString("ITSDB", "PASSWORD", "hnits");
  214. String sSqlLog = pIniFile->ReadString("ITSDB", "SQLLOG", "0");
  215. if (sSqlLog == "1") g_AppCfg.itsdb.bSqlLog = true;
  216. CenterId = pIniFile->ReadString("CENTER", "CENTERID", "L01");
  217. CenterName = pIniFile->ReadString("CENTER", "CENTERNAME", "중앙센터");
  218. CenterCd = String(StrToInt(CenterId.SubString(2, 2)));
  219. // GIS 설정정보 로딩
  220. String sLeftTopX = pIniFile->ReadString("MAP", "LEFTTOPX", "126.891");
  221. String sLeftTopY = pIniFile->ReadString("MAP", "LEFTTOPY", "037.383");
  222. String sRightBottomX = pIniFile->ReadString("MAP", "RIGHTBOTTOMX", "126.981");
  223. String sRightBottomY = pIniFile->ReadString("MAP", "RIGHTBOTTOMY", "037.318");
  224. String sCenterX = pIniFile->ReadString("MAP", "CENTERX", "126.935");
  225. String sCenterY = pIniFile->ReadString("MAP", "CENTERY", "037.360");
  226. g_GisInfo.dLeftTopX = sLeftTopX.ToDouble();
  227. g_GisInfo.dLeftTopY = sLeftTopY.ToDouble();
  228. g_GisInfo.dRightBottomX = sRightBottomX.ToDouble();
  229. g_GisInfo.dRightBottomY = sRightBottomY.ToDouble();
  230. g_GisInfo.dCenterX = sCenterX.ToDouble();
  231. g_GisInfo.dCenterY = sCenterY.ToDouble();
  232. g_GisInfo.sCenterName = CenterName;
  233. g_GisInfo.sIdxMapFileName = "";
  234. g_GisInfo.sMapFileNameL0 = pIniFile->ReadString("MAP", "MAPFILEL0", "");
  235. g_GisInfo.sMapFileNameL1 = pIniFile->ReadString("MAP", "MAPFILEL1", "");
  236. g_GisInfo.sMapFileNameL2 = pIniFile->ReadString("MAP", "MAPFILEL2", "");
  237. g_GisInfo.sMapFileNameL3 = pIniFile->ReadString("MAP", "MAPFILEL3", "");
  238. g_GisInfo.bLoadL0 = true;
  239. g_GisInfo.bLoadL1 = true;
  240. g_GisInfo.bLoadL2 = true;
  241. g_GisInfo.bLoadL3 = true;
  242. if (g_GisInfo.sMapFileNameL0 == "") g_GisInfo.bLoadL0 = false;
  243. if (g_GisInfo.sMapFileNameL1 == "") g_GisInfo.bLoadL1 = false;
  244. if (g_GisInfo.sMapFileNameL2 == "") g_GisInfo.bLoadL2 = false;
  245. if (g_GisInfo.sMapFileNameL3 == "") g_GisInfo.bLoadL3 = false;
  246. }
  247. __finally
  248. {
  249. if (pIniFile) delete pIniFile;
  250. pIniFile = NULL;
  251. }
  252. return true;
  253. }
  254. //---------------------------------------------------------------------------
  255. __fastcall TCFG0000M::TCFG0000M(TComponent* Owner)
  256. : TForm(Owner)
  257. {
  258. ITSSkin_Initialize(Application);
  259. ITSSkin_Load(this);
  260. FTitle = "환경설정";
  261. Caption = "통합운영단말 " + FTitle;
  262. LblCaption->Caption = FTitle;
  263. }
  264. //---------------------------------------------------------------------------
  265. /*
  266. * 닫기버튼 이나 x버튼 클릭시 공통으로 처리하는 로직이들어간다..
  267. * Form과 DataModule class를 delete시킨다.
  268. * arguments
  269. *
  270. * return
  271. * void
  272. */
  273. void __fastcall TCFG0000M::CommClose()
  274. {
  275. }
  276. //---------------------------------------------------------------------------
  277. /*
  278. * Form이 메모리에서 생성될때 호출되는 생성자 이벤트 핸들러
  279. * arguments
  280. * Sender : event handler 객체
  281. * return
  282. * void
  283. */
  284. void __fastcall TCFG0000M::FormCreate(TObject *Sender)
  285. {
  286. LoadConfigInfo();
  287. }
  288. //---------------------------------------------------------------------------
  289. /*
  290. * Form을 보여줄때 호출되는 event 메서드이다.
  291. * arguments
  292. * Sender : event handler 객체
  293. * return
  294. * void
  295. */
  296. void __fastcall TCFG0000M::FormShow(TObject *Sender)
  297. {
  298. Refresh();
  299. TmrShow->Enabled = true;
  300. }
  301. //---------------------------------------------------------------------------
  302. /*
  303. * Form이 Show되고 난 후 최초 1회 수행되는 타이머 이벤트
  304. * arguments
  305. * Sender : event handler 객체
  306. * return
  307. * void
  308. */
  309. void __fastcall TCFG0000M::TmrShowTimer(TObject *Sender)
  310. {
  311. TmrShow->Enabled = false;
  312. RefreshData();
  313. }
  314. //---------------------------------------------------------------------------
  315. /*
  316. * Refresh Data Event Function
  317. * arguments
  318. *
  319. * return
  320. * void
  321. */
  322. void __fastcall TCFG0000M::RefreshData()
  323. {
  324. // 정보를 읽어와서 표출하자.
  325. EdCenterId->Text = CenterId;
  326. EdCenterName->Text = CenterName;
  327. EdGisFile->Text = g_GisInfo.sMapFileNameL0;
  328. EdDbProvider->Text = g_AppCfg.itsdb.sProvider;
  329. EdDbUser->Text = g_AppCfg.itsdb.sUserName;
  330. EdDbSource->Text = g_AppCfg.itsdb.sServerName;
  331. EdDbPasswd->Text = g_AppCfg.itsdb.sPassword;
  332. EdProcessId->Text = g_AppCfg.sProcessId;
  333. //EdTaskId->Text = "";
  334. //EdNodeId->Text = "";
  335. //EdSequence->Text = "";
  336. ChkSaveForm->Checked = g_AppCfg.bSaveForm;
  337. ChkAutoLogout->Checked = g_AppCfg.AutoLogout.Enabled;
  338. SeInterevalMin->Value = g_AppCfg.AutoLogout.IntervalMin;
  339. }
  340. //---------------------------------------------------------------------------
  341. /*
  342. * Close 버튼 클릭 이벤트 핸들러
  343. * arguments
  344. * Sender : event handler 객체
  345. * return
  346. * void
  347. */
  348. void __fastcall TCFG0000M::BtnCloseClick(TObject *Sender)
  349. {
  350. Close();
  351. }
  352. //---------------------------------------------------------------------------
  353. /*
  354. * Select Button Click Event Handler
  355. * arguments
  356. * Sender : event handler 객체
  357. * return
  358. * void
  359. */
  360. void __fastcall TCFG0000M::BtnSaveClick(TObject *Sender)
  361. {
  362. //bool bSaved = false;
  363. String sMsgString;
  364. String sID, sIPAddress;
  365. int sMsgType = MB_OK|MB_ICONWARNING|MB_APPLMODAL;
  366. sMsgString = "시스템 환경설정 정보를 저장하시겠습니까?";
  367. sMsgType = MB_YESNO|MB_ICONINFORMATION|MB_APPLMODAL;
  368. if (Application->MessageBox(sMsgString.c_str(), FTitle.c_str(), sMsgType)==IDNO)
  369. {
  370. return;
  371. }
  372. String sCenterId = EdCenterId->Text.Trim();
  373. String sCenterName = EdCenterName->Text.Trim();
  374. String sGisFile = EdGisFile->Text.Trim();
  375. String sDbProvider = EdDbProvider->Text.Trim();
  376. String sDbUser = EdDbUser->Text.Trim();
  377. String sDbSource = EdDbSource->Text.Trim();
  378. String sDbPasswd = EdDbPasswd->Text.Trim();
  379. String sProcessId = EdProcessId->Text.Trim();
  380. g_AppCfg.bSaveForm = ChkSaveForm->Checked;
  381. String sSaveForm = g_AppCfg.bSaveForm ? "1" : "0";
  382. //String sTaskId = EdTaskId->Text.Trim();
  383. //String sNodeId = EdNodeId->Text.Trim();
  384. //String sSequence = EdSequence->Text.Trim();
  385. g_AppCfg.AutoLogout.Enabled = ChkAutoLogout->Checked;
  386. g_AppCfg.AutoLogout.IntervalMin = SeInterevalMin->Value;
  387. String sAutoLogout = g_AppCfg.AutoLogout.Enabled ? "1" : "0";
  388. String sInterMin = String(g_AppCfg.AutoLogout.IntervalMin);
  389. try {
  390. SetConfigValue("CENTER", "CENTERID", sCenterId);
  391. SetConfigValue("CENTER", "CENTERNAME", sCenterName);
  392. SetConfigValue("MAP", "MAPFILEL0", sGisFile);
  393. SetConfigValue("ITSDB", "PROVIDER", sDbProvider);
  394. SetConfigValue("ITSDB", "SERVERNAME", sDbSource);
  395. SetConfigValue("ITSDB", "USERNAME", sDbUser);
  396. SetConfigValue("ITSDB", "PASSWORD", sDbPasswd);
  397. SetConfigValue("AUTOLOGOUT", "ENABLED", sAutoLogout);
  398. SetConfigValue("AUTOLOGOUT", "INTERVALMIN", sInterMin);
  399. SetConfigValue("APPLICATION", "PROCESSID", sProcessId);
  400. SetConfigValue("APPLICATION", "SAVEFORM", sSaveForm);
  401. CenterId = sCenterId;
  402. CenterName = sCenterName;
  403. CenterCd = String(StrToInt(CenterId.SubString(2, 2)));
  404. g_AppCfg.itsdb.sProvider = sDbProvider;
  405. g_AppCfg.itsdb.sUserName = sDbUser;
  406. g_AppCfg.itsdb.sServerName = sDbSource;
  407. g_AppCfg.itsdb.sPassword = sDbPasswd;
  408. g_AppCfg.sProcessId = sProcessId;
  409. Application->MessageBox(L"환경설정 정보를 정상적으로 저장하였습니다.\r\다음 프로그램 실행 부터 반영됩니다.",
  410. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  411. } catch(...) {
  412. }
  413. //Close();
  414. }
  415. //---------------------------------------------------------------------------
  416. void __fastcall TCFG0000M::FormClose(TObject *Sender, TCloseAction &Action)
  417. {
  418. CommClose();
  419. CFG0000M = NULL;
  420. Action = caFree;
  421. }
  422. //---------------------------------------------------------------------------
  423. String __fastcall TCFG0000M::GetConfigValue(String sSection, String sIdent, String sDefVal)
  424. {
  425. String sResult = sDefVal;
  426. TIniFile *pIniFile = NULL;
  427. String sCfgFile = ExtractFilePath(Application->ExeName) + "\\Cfg\\ITS_OP.ini";
  428. try
  429. {
  430. pIniFile = new TIniFile(sCfgFile);
  431. sResult = pIniFile->ReadString(sSection, sIdent, sDefVal);
  432. }
  433. __finally
  434. {
  435. if (pIniFile) delete pIniFile;
  436. pIniFile = NULL;
  437. }
  438. return sResult;
  439. }
  440. //---------------------------------------------------------------------------
  441. void __fastcall TCFG0000M::SetConfigValue(String sSection, String sIdent, String sSetVal)
  442. {
  443. TIniFile *pIniFile = NULL;
  444. String sCfgFile = ExtractFilePath(Application->ExeName) + "\\Cfg\\ITS_OP.ini";
  445. try
  446. {
  447. pIniFile = new TIniFile(sCfgFile);
  448. pIniFile->WriteString(sSection, sIdent, sSetVal);
  449. }
  450. __finally
  451. {
  452. if (pIniFile) delete pIniFile;
  453. pIniFile = NULL;
  454. }
  455. }
  456. //---------------------------------------------------------------------------
  457. void __fastcall TCFG0000M::EdGisFilePropertiesButtonClick(TObject *Sender, int AButtonIndex)
  458. {
  459. try {
  460. OpenDialog1->FileName = EdGisFile->Text.Trim();
  461. OpenDialog1->InitialDir = ExtractFilePath(Application->ExeName) + "\\cfg\\";
  462. OpenDialog1->HistoryList->Clear();
  463. OpenDialog1->Filter = "지도설정파일 (*.DVA)|*.DVA";
  464. //OpenDialog1->Options = dlgOpen->Options << ofFileMustExist;
  465. //OpenDialog1->Options = dlgOpen->Options >> ofAllowMultiSelect;
  466. if (!OpenDialog1->Execute()) return;
  467. EdGisFile->Text = OpenDialog1->FileName;
  468. } catch(...) {}
  469. }
  470. //---------------------------------------------------------------------------
  471. void __fastcall TCFG0000M::BtnDbTestClick(TObject *Sender)
  472. {
  473. String sDbProvider = EdDbProvider->Text.Trim();
  474. String sDbUser = EdDbUser->Text.Trim();
  475. String sDbSource = EdDbSource->Text.Trim();
  476. String sDbPasswd = EdDbPasswd->Text.Trim();
  477. if (!ITSDb_Initialize())
  478. {
  479. Application->MessageBox(L"Database 자원을 시스템으로부터 얻지 못했습니다.",
  480. FTitle.c_str(),
  481. MB_OK|MB_ICONERROR|MB_APPLMODAL);
  482. return;
  483. }
  484. ITSDb_SetInfo(sDbProvider, sDbSource, sDbUser, sDbPasswd);
  485. if (ITSDb_Open())
  486. {
  487. Application->MessageBox(L"Database와 연결 테스트에 성공하였습니다.", FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  488. }
  489. else
  490. {
  491. Application->MessageBox(L"Database와 연결 테스트에 실패하였습니다.", FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  492. }
  493. ITSDb_Close();
  494. ITSDb_Finalize();
  495. }
  496. //---------------------------------------------------------------------------