IDB0050MF.cpp 52 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #include "ITSSkinF.h"
  4. #include "ITSUtilF.h"
  5. #include "ITSDbF.h"
  6. #include "AppGlobalF.h"
  7. #include "CDSIfscF.h"
  8. #include "CDSRoadF.h"
  9. #include "WindowMsgF.h"
  10. #include "ITSLangTransF.h"
  11. #pragma hdrstop
  12. #include "IDB0050MF.h"
  13. #include "IDB0051MF.h" // 가공파라미터관리
  14. //---------------------------------------------------------------------------
  15. #pragma package(smart_init)
  16. #pragma link "FRAME_LinkListF"
  17. #pragma link "FRAME_ServiceLinkListF"
  18. #pragma link "FRAME_RoadListF"
  19. #pragma link "cxButtons"
  20. #pragma link "cxCalc"
  21. #pragma link "cxCheckBox"
  22. #pragma link "cxClasses"
  23. #pragma link "cxContainer"
  24. #pragma link "cxControls"
  25. #pragma link "cxCustomData"
  26. #pragma link "cxData"
  27. #pragma link "cxDataStorage"
  28. #pragma link "cxDropDownEdit"
  29. #pragma link "cxEdit"
  30. #pragma link "cxFilter"
  31. #pragma link "cxGraphics"
  32. #pragma link "cxGrid"
  33. #pragma link "cxGridCustomTableView"
  34. #pragma link "cxGridCustomView"
  35. #pragma link "cxGridLevel"
  36. #pragma link "cxGridTableView"
  37. #pragma link "cxGroupBox"
  38. #pragma link "cxLabel"
  39. #pragma link "cxLookAndFeelPainters"
  40. #pragma link "cxLookAndFeels"
  41. #pragma link "cxMaskEdit"
  42. #pragma link "cxPC"
  43. #pragma link "cxPCdxBarPopupMenu"
  44. #pragma link "cxSpinEdit"
  45. #pragma link "cxSplitter"
  46. #pragma link "cxStyles"
  47. #pragma link "cxTextEdit"
  48. #pragma link "dxSkinBlack"
  49. #pragma link "dxSkinBlue"
  50. #pragma link "dxSkinsCore"
  51. #pragma link "dxSkinscxPCPainter"
  52. #pragma resource "*.dfm"
  53. TIDB0050M *IDB0050M = NULL;
  54. //---------------------------------------------------------------------------
  55. __fastcall TIDB0050M::TIDB0050M(TComponent* Owner)
  56. : TForm(Owner)
  57. {
  58. LangTrans->Translate(this, ITSDb_GetConnection());
  59. int nWidth = PnlRight->Width;
  60. int nClientW = ClientWidth;
  61. ITSSkin_Load(this);
  62. CMM_LoadForm(g_sFormsDir, this);
  63. if (ClientWidth < nClientW)
  64. ClientWidth = nClientW;
  65. PnlRight->Width = nWidth;
  66. FTitle = Caption;//"가공파라미터 관리";
  67. cxTabSheet2->TabVisible = false;
  68. cxTabSheet4->TabVisible = false;
  69. PgLink->ActivePage = cxTabSheet1;
  70. TvList0->OptionsView->NoDataToDisplayInfoText = "";
  71. TvList3->OptionsView->NoDataToDisplayInfoText = "";
  72. FRAMELinkList1->Column20->Visible = true; //2레벨ID
  73. FRAMELinkList1->Column21->Visible = true; //2레벨도로명
  74. FRAMELinkList1->Column22->Visible = true; //파라미터
  75. FRAMELinkList1->PnlBottom->Visible = false;
  76. FRAMEServiceLinkList1->PnlBottom->Visible = false;
  77. FRAMERoadList1->PnlBottom->Visible = false;
  78. FRAMELinkList1->TvList->OptionsData->Editing = true;
  79. FRAMEServiceLinkList1->TvList->OptionsData->Editing = true;
  80. FRAMERoadList1->TvList->OptionsData->Editing = true;
  81. FRAMELinkList1->ColumnSel->Visible = true;
  82. FRAMEServiceLinkList1->ColumnSel->Visible = true;
  83. FRAMERoadList1->ColumnSel->Visible = true;
  84. #if 0
  85. if (!MyItsColSysManager)
  86. {
  87. MyItsColSysManager = new TItsColSysManager();
  88. }
  89. #endif
  90. FSelParamId = "";
  91. MyParamManager = new TPrcsParamManager();
  92. MyParamManager->LoadFromDb();
  93. ImgDesc90->Visible = true;
  94. cxGroupBoxFMT->Enabled = false;
  95. cxGroupBoxFST->Enabled = false;
  96. cxGroupBoxMCA->Enabled = false;
  97. cxGroupBoxSMT->Enabled = false;
  98. FInit = false;
  99. }
  100. //---------------------------------------------------------------------------
  101. /*
  102. * 닫기버튼 이나 x버튼 클릭시 공통으로 처리하는 로직이들어간다..
  103. * Form과 DataModule class를 delete시킨다.
  104. * arguments
  105. *
  106. * return
  107. * void
  108. */
  109. void __fastcall TIDB0050M::CommClose()
  110. {
  111. try
  112. {
  113. #if 0
  114. if (MyItsColSysManager)
  115. {
  116. delete MyItsColSysManager;
  117. MyItsColSysManager = NULL;
  118. }
  119. #endif
  120. if (MyParamManager)
  121. {
  122. MyParamManager->FLists.RemoveAll();
  123. delete MyParamManager;
  124. MyParamManager = NULL;
  125. }
  126. CMM_SaveForm(g_sFormsDir, this);
  127. }
  128. catch(...)
  129. {
  130. }
  131. }
  132. //---------------------------------------------------------------------------
  133. /*
  134. * form 초기화
  135. *
  136. * arguments
  137. *
  138. * return
  139. * void
  140. */
  141. void __fastcall TIDB0050M::FormInit()
  142. {
  143. PgLink->Properties->ActivePage = cxTabSheet1;
  144. ADOQry->Connection = ITSDb_GetConnection();
  145. //MyItsColSysManager->LoadFromDb();
  146. LoadCollectSysInfo();
  147. FillProcessingParam();
  148. }
  149. //---------------------------------------------------------------------------
  150. void __fastcall TIDB0050M::FillProcessingParam()
  151. {
  152. CbProcessingParam->Properties->Items->Clear();
  153. FOR_STL(TPrcsParam*, pObj, MyParamManager->FLists)
  154. {
  155. if (pObj->DEL_YN != "N") continue;
  156. CbProcessingParam->Properties->Items->AddObject(" [" + pObj->PARA_ID + "] " + pObj->PARA_NM, (TObject*)pObj);
  157. }
  158. CbProcessingParam->ItemIndex = 0;
  159. }
  160. //---------------------------------------------------------------------------
  161. void __fastcall TIDB0050M::LoadCollectSysInfo()
  162. {
  163. CMM_ClearGridTableView(TvList0);
  164. CMM_ClearGridTableView(TvList3);
  165. TcxDataController *pGDC0 = TvList0->DataController;
  166. TcxDataController *pGDC3 = TvList3->DataController;
  167. int nRow0 = 0;
  168. int nRow2 = 0;
  169. int nRow3 = 0;
  170. FColSysCnt = 0;
  171. try
  172. {
  173. TvList0->BeginUpdate();
  174. TvList3->BeginUpdate();
  175. //FOR_STL(TItsColSys*, pObj, MyItsColSysManager->FLists)
  176. FOR_STL(TItsColSys*, pObj, ItsColSysManager->FLists)
  177. {
  178. if (pObj->USE_YN == "N") continue;
  179. nRow3 = pGDC3->AppendRecord();
  180. pGDC3->Values[nRow3][ColumnC01->Index] = pObj->CLCT_SYST_NM;
  181. pGDC3->Values[nRow3][ColumnC02->Index] = pObj->CLCT_SYST_CD;
  182. pGDC3->Values[nRow3][ColumnC03->Index] = 10;
  183. nRow0 = pGDC0->AppendRecord();
  184. pGDC0->Values[nRow0][ColumnD01->Index] = pObj->CLCT_SYST_NM;
  185. pGDC0->Values[nRow0][ColumnD02->Index] = pObj->CLCT_SYST_CD;
  186. String sPri;
  187. sPri.printf(L"%d", (nRow0+1));
  188. pGDC0->Values[nRow0][ColumnD03->Index] = sPri;
  189. //pGDC0->Values[nRow0][ColumnD03->Index] = (nRow0+1);
  190. pGDC0->Values[nRow0][ColumnD04->Index] = nRow3;
  191. FColSysCnt++;
  192. }
  193. }
  194. __finally
  195. {
  196. TvList0->EndUpdate();
  197. TvList3->EndUpdate();
  198. }
  199. TcxComboBoxProperties *pcxCboProperties10 = (TcxComboBoxProperties*)ColumnD03->Properties;
  200. pcxCboProperties10->Items->Clear();
  201. for (int ii = 0; ii < FColSysCnt; ii++)
  202. {
  203. String sPri;
  204. sPri.printf(L"%d", (ii+1));
  205. pcxCboProperties10->Items->Add(sPri);
  206. //pcxCboProperties10->Items->Add(String(ii+1));
  207. }
  208. pcxCboProperties10->Items->Add(lblNotUse->Caption);//"사용안함");
  209. }
  210. //---------------------------------------------------------------------------
  211. /*
  212. * Form을 보여줄때 호출되는 event 메서드이다.
  213. * arguments
  214. * Sender : event handler 객체
  215. * return
  216. * void
  217. */
  218. void __fastcall TIDB0050M::FormShow(TObject *Sender)
  219. {
  220. Refresh();
  221. FormInit();
  222. TmrShow->Enabled = true;
  223. }
  224. //---------------------------------------------------------------------------
  225. /*
  226. * Form이 Show되고 난 후 최초 1회 수행되는 타이머 이벤트
  227. * arguments
  228. * Sender : event handler 객체
  229. * return
  230. * void
  231. */
  232. void __fastcall TIDB0050M::TmrShowTimer(TObject *Sender)
  233. {
  234. TmrShow->Enabled = false;
  235. BtnSearchClick((TObject*)BtnSearch);
  236. }
  237. //---------------------------------------------------------------------------
  238. /*
  239. * Search 버튼 클릭 이벤트 핸들러
  240. * arguments
  241. * Sender : event handler 객체
  242. * return
  243. * void
  244. */
  245. void __fastcall TIDB0050M::BtnSearchClick(TObject *Sender)
  246. {
  247. Application->ProcessMessages();
  248. TSqlCursor sqlCrs((TControl*)BtnSearch);
  249. RefreshData();
  250. }
  251. //---------------------------------------------------------------------------
  252. /*
  253. * Refresh Data Event Function
  254. * arguments
  255. *
  256. * return
  257. * void
  258. */
  259. void __fastcall TIDB0050M::RefreshData()
  260. {
  261. FRAMELinkList1->UpdateList();
  262. FRAMEServiceLinkList1->UpdateList();
  263. FRAMERoadList1->UpdateList();
  264. FInit = true;
  265. DisplayLink();
  266. }
  267. //---------------------------------------------------------------------------
  268. /*
  269. * Close 버튼 클릭 이벤트 핸들러
  270. * arguments
  271. * Sender : event handler 객체
  272. * return
  273. * void
  274. */
  275. void __fastcall TIDB0050M::BtnCloseClick(TObject *Sender)
  276. {
  277. Close();
  278. }
  279. //---------------------------------------------------------------------------
  280. void __fastcall TIDB0050M::FormClose(TObject *Sender, TCloseAction &Action)
  281. {
  282. CommClose();
  283. IDB0050M = NULL;
  284. Action = caFree;
  285. }
  286. //---------------------------------------------------------------------------
  287. void __fastcall TIDB0050M::ChkFMT0Click(TObject *Sender)
  288. {
  289. ChkFMT1->Checked = !ChkFMT0->Checked;
  290. ChangeFMT(ChkFMT1->Checked);
  291. }
  292. //---------------------------------------------------------------------------
  293. void __fastcall TIDB0050M::ChkFMT1Click(TObject *Sender)
  294. {
  295. ChkFMT0->Checked = !ChkFMT1->Checked;
  296. ChangeFMT(ChkFMT1->Checked);
  297. }
  298. //---------------------------------------------------------------------------
  299. void __fastcall TIDB0050M::ChangeFMT(bool AUse)
  300. {
  301. if (AUse)
  302. {
  303. GrpFMT1->Color = clSkyBlue;
  304. GrpFMT1->Enabled = true;
  305. }
  306. else
  307. {
  308. GrpFMT1->Color = clSilver;
  309. GrpFMT1->Enabled = false;
  310. }
  311. }
  312. //---------------------------------------------------------------------------
  313. void __fastcall TIDB0050M::ChkFST1Click(TObject *Sender)
  314. {
  315. TNotifyEvent OnClickEvent1 = ChkFST1->OnClick;
  316. TNotifyEvent OnClickEvent2 = ChkFST2->OnClick;
  317. TNotifyEvent OnClickEvent3 = ChkFST3->OnClick;
  318. try
  319. {
  320. ChkFST1->OnClick = NULL;
  321. ChkFST2->OnClick = NULL;
  322. ChkFST3->OnClick = NULL;
  323. if (ChkFST1->Checked == true)
  324. {
  325. ChkFST2->Checked = false;
  326. ChkFST3->Checked = false;
  327. }
  328. else
  329. if (ChkFST1->Checked == false)
  330. {
  331. ChkFST2->Checked = true;
  332. ChkFST3->Checked = false;
  333. }
  334. ChangeFST(false);
  335. }
  336. __finally
  337. {
  338. ChkFST1->OnClick = OnClickEvent1;
  339. ChkFST2->OnClick = OnClickEvent2;
  340. ChkFST3->OnClick = OnClickEvent3;
  341. }
  342. }
  343. //---------------------------------------------------------------------------
  344. void __fastcall TIDB0050M::ChkFST2Click(TObject *Sender)
  345. {
  346. TNotifyEvent OnClickEvent1 = ChkFST1->OnClick;
  347. TNotifyEvent OnClickEvent2 = ChkFST2->OnClick;
  348. TNotifyEvent OnClickEvent3 = ChkFST3->OnClick;
  349. try
  350. {
  351. ChkFST1->OnClick = NULL;
  352. ChkFST2->OnClick = NULL;
  353. ChkFST3->OnClick = NULL;
  354. if (ChkFST2->Checked == true)
  355. {
  356. ChkFST1->Checked = false;
  357. ChkFST3->Checked = false;
  358. }
  359. else
  360. if (ChkFST2->Checked == false)
  361. {
  362. ChkFST1->Checked = true;
  363. ChkFST3->Checked = false;
  364. }
  365. ChangeFST(false);
  366. }
  367. __finally
  368. {
  369. ChkFST1->OnClick = OnClickEvent1;
  370. ChkFST2->OnClick = OnClickEvent2;
  371. ChkFST3->OnClick = OnClickEvent3;
  372. }
  373. }
  374. //---------------------------------------------------------------------------
  375. void __fastcall TIDB0050M::ChkFST3Click(TObject *Sender)
  376. {
  377. TNotifyEvent OnClickEvent1 = ChkFST1->OnClick;
  378. TNotifyEvent OnClickEvent2 = ChkFST2->OnClick;
  379. TNotifyEvent OnClickEvent3 = ChkFST3->OnClick;
  380. try
  381. {
  382. ChkFST1->OnClick = NULL;
  383. ChkFST2->OnClick = NULL;
  384. ChkFST3->OnClick = NULL;
  385. if (ChkFST3->Checked == true)
  386. {
  387. ChkFST1->Checked = false;
  388. ChkFST2->Checked = false;
  389. }
  390. else
  391. if (ChkFST3->Checked == false)
  392. {
  393. ChkFST1->Checked = true;
  394. ChkFST2->Checked = false;
  395. }
  396. ChangeFST(false);
  397. }
  398. __finally
  399. {
  400. ChkFST1->OnClick = OnClickEvent1;
  401. ChkFST2->OnClick = OnClickEvent2;
  402. ChkFST3->OnClick = OnClickEvent3;
  403. }
  404. }
  405. //---------------------------------------------------------------------------
  406. void __fastcall TIDB0050M::ChangeFST(bool AUse)
  407. {
  408. if (ChkFST1->Checked)
  409. {
  410. GrpFST1->Color = clSkyBlue;
  411. GrpFST1->Enabled = true;
  412. GrpFST2->Color = clSilver;
  413. GrpFST2->Enabled = false;
  414. }
  415. else
  416. if (ChkFST2->Checked)
  417. {
  418. GrpFST1->Color = clSilver;
  419. GrpFST1->Enabled = false;
  420. GrpFST2->Color = clSkyBlue;
  421. GrpFST2->Enabled = true;
  422. }
  423. else
  424. if (ChkFST3->Checked)
  425. {
  426. GrpFST1->Color = clSilver;
  427. GrpFST1->Enabled = false;
  428. GrpFST2->Color = clSilver;
  429. GrpFST2->Enabled = false;
  430. }
  431. }
  432. //---------------------------------------------------------------------------
  433. void __fastcall TIDB0050M::ChkMCA0Click(TObject *Sender)
  434. {
  435. //사용안함
  436. if (ChkMCA0->Checked == false)
  437. ChkMCA0->Checked = true;
  438. else
  439. ChangeMCA(0);
  440. }
  441. //---------------------------------------------------------------------------
  442. void __fastcall TIDB0050M::ChkMCA2Click(TObject *Sender)
  443. {
  444. //패턴적용
  445. if (ChkMCA2->Checked == false)
  446. ChkMCA2->Checked = true;
  447. else
  448. ChangeMCA(2);
  449. }
  450. //---------------------------------------------------------------------------
  451. void __fastcall TIDB0050M::ChkMCA1Click(TObject *Sender)
  452. {
  453. //단기(15분이동평균)/장기(패턴)
  454. if (ChkMCA1->Checked == false)
  455. ChkMCA1->Checked = true;
  456. else
  457. ChangeMCA(1);
  458. }
  459. //---------------------------------------------------------------------------
  460. void __fastcall TIDB0050M::ChangeMCA(int AType)
  461. {
  462. TNotifyEvent OnChkMCA0 = ChkMCA0->OnClick;
  463. TNotifyEvent OnChkMCA1 = ChkMCA1->OnClick;
  464. TNotifyEvent OnChkMCA2 = ChkMCA2->OnClick;
  465. ChkMCA0->OnClick = NULL;
  466. ChkMCA1->OnClick = NULL;
  467. ChkMCA2->OnClick = NULL;
  468. if (AType == 1)
  469. {
  470. GrpMCA1->Color = clSkyBlue;
  471. GrpMCA1->Enabled = true;
  472. ChkMCA0->Checked = false;
  473. ChkMCA2->Checked = false;
  474. }
  475. else
  476. {
  477. GrpMCA1->Color = clSilver;
  478. GrpMCA1->Enabled = false;
  479. if (AType == 0)
  480. {
  481. ChkMCA1->Checked = false;
  482. ChkMCA2->Checked = false;
  483. }
  484. else
  485. {
  486. ChkMCA0->Checked = false;
  487. ChkMCA1->Checked = false;
  488. }
  489. }
  490. ChkMCA0->OnClick = OnChkMCA0;
  491. ChkMCA1->OnClick = OnChkMCA1;
  492. ChkMCA2->OnClick = OnChkMCA2;
  493. }
  494. //---------------------------------------------------------------------------
  495. void __fastcall TIDB0050M::ChkSMT0Click(TObject *Sender)
  496. {
  497. //사용안함
  498. if (ChkSMT0->Checked == false)
  499. ChkSMT0->Checked = true;
  500. else
  501. ChangeSMT(0);
  502. }
  503. //---------------------------------------------------------------------------
  504. void __fastcall TIDB0050M::ChkSMT1Click(TObject *Sender)
  505. {
  506. //범위값 사용
  507. if (ChkSMT1->Checked == false)
  508. ChkSMT1->Checked = true;
  509. else
  510. ChangeSMT(1);
  511. }
  512. //---------------------------------------------------------------------------
  513. void __fastcall TIDB0050M::ChkSMT2Click(TObject *Sender)
  514. {
  515. //15분 이동평균
  516. if (ChkSMT2->Checked == false)
  517. ChkSMT2->Checked = true;
  518. else
  519. ChangeSMT(2);
  520. }
  521. //---------------------------------------------------------------------------
  522. void __fastcall TIDB0050M::ChangeSMT(int AType)
  523. {
  524. TNotifyEvent OnChkSMT0 = ChkSMT0->OnClick;
  525. TNotifyEvent OnChkSMT1 = ChkSMT1->OnClick;
  526. TNotifyEvent OnChkSMT2 = ChkSMT2->OnClick;
  527. ChkSMT0->OnClick = NULL;
  528. ChkSMT1->OnClick = NULL;
  529. ChkSMT2->OnClick = NULL;
  530. if (AType == 0)
  531. {
  532. GrpSMT1->Color = clSilver;
  533. GrpSMT1->Enabled = false;
  534. GrpSMT2->Color = clSilver;
  535. GrpSMT2->Enabled = false;
  536. ChkSMT1->Checked = false;
  537. ChkSMT2->Checked = false;
  538. }
  539. else
  540. if (AType == 1)
  541. {
  542. GrpSMT1->Color = clSkyBlue;
  543. GrpSMT1->Enabled = true;
  544. GrpSMT2->Color = clSilver;
  545. GrpSMT2->Enabled = false;
  546. ChkSMT0->Checked = false;
  547. ChkSMT2->Checked = false;
  548. }
  549. else
  550. {
  551. GrpSMT1->Color = clSilver;
  552. GrpSMT1->Enabled = false;
  553. GrpSMT2->Color = clSkyBlue;
  554. GrpSMT2->Enabled = true;
  555. ChkSMT0->Checked = false;
  556. ChkSMT1->Checked = false;
  557. }
  558. ChkSMT0->OnClick = OnChkSMT0;
  559. ChkSMT1->OnClick = OnChkSMT1;
  560. ChkSMT2->OnClick = OnChkSMT2;
  561. }
  562. //---------------------------------------------------------------------------
  563. bool __fastcall TIDB0050M::CheckParameterValue()
  564. {
  565. //필터링 파라미터
  566. FFMTVolMin = FFMTVolMax = FFMTSpdMin = FFMTSpdMax = 0;
  567. if (ChkFMT0->Checked)
  568. {
  569. FFMT = "FMT0"; //사용안함
  570. }
  571. else
  572. if (ChkFMT1->Checked)
  573. {
  574. FFMT = "FMT1"; //범위값사용
  575. FFMTVolMin = SeVolMin->Value;
  576. FFMTVolMax = SeVolMax->Value;
  577. FFMTSpdMin = SeSpdMin->Value;
  578. FFMTSpdMax = SeSpdMax->Value;
  579. if (FFMTVolMin >= FFMTVolMax)
  580. {
  581. Application->MessageBox(L"필터링 파라미터 - 범위값 사용.\r\n교통량 최저값은 교통량 최대값 미만이어야 합니다.",
  582. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  583. return false;
  584. }
  585. if (FFMTSpdMin >= FFMTSpdMax)
  586. {
  587. Application->MessageBox(L"필터링 파라미터 - 범위값 사용.\r\속도 최저값은 속도 최대값 미만이어야 합니다.",
  588. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  589. return false;
  590. }
  591. } else return false;
  592. //퓨전 파라미터
  593. if (ChkFST1->Checked)
  594. {
  595. FFST = "FST1"; //우선순위
  596. #if 0
  597. if (TvList2->DataController->RecordCount == 0)
  598. {
  599. Application->MessageBox(L"퓨전 파라미터 - 우선순위.\r\우선순위 항목을 선택하셔야 합니다.",
  600. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  601. return false;
  602. }
  603. #else
  604. int ii;
  605. int nSeq = 0;
  606. int nTot = 0;
  607. int nItem= 0;
  608. bool bSet[100];
  609. for (ii = 0; ii < 100; ii++)
  610. bSet[ii] = false;
  611. bool bDupFail = false;
  612. try
  613. {
  614. TcxGridDataController *pGDC = TvList0->DataController;
  615. TvList0->BeginUpdate();
  616. for(ii = 0; ii < pGDC->RecordCount; ii++)
  617. {
  618. String sPri = VarToStr(pGDC->Values[ii][ColumnD03->Index]);
  619. if (sPri == "사용안함") continue;
  620. int nTmp = StrToIntDef(sPri, 1);
  621. #if 1
  622. if (bSet[nTmp])
  623. {
  624. bDupFail = true;
  625. break;
  626. }
  627. else
  628. {
  629. bSet[nTmp] = true;
  630. }
  631. #else
  632. nSeq += nTmp;
  633. nTot += (nItem+1);
  634. nItem++;
  635. #endif
  636. }
  637. }
  638. __finally
  639. {
  640. TvList0->EndUpdate();
  641. }
  642. #if 1
  643. if (bDupFail)
  644. #else
  645. if (nSeq != nTot)
  646. #endif
  647. {
  648. Application->MessageBox(L"퓨전 파라미터 - 우선순위.\r\우선순위는 순서에 맞게 각자 다른값을 가져야 합니다.",
  649. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  650. return false;
  651. }
  652. #endif
  653. }
  654. else
  655. if (ChkFST2->Checked)
  656. {
  657. FFST = "FST2"; //가중치
  658. int dFST = 0;
  659. try
  660. {
  661. TcxGridDataController *pGDC = TvList3->DataController;
  662. TvList3->BeginUpdate();
  663. for(int ii = 0; ii < pGDC->RecordCount; ii++)
  664. {
  665. int fTmp = pGDC->Values[ii][ColumnC03->Index];
  666. dFST += fTmp;
  667. }
  668. }
  669. __finally
  670. {
  671. TvList3->EndUpdate();
  672. }
  673. if (dFST != 100)
  674. {
  675. Application->MessageBox(L"퓨전 파라미터 - 가중치.\r\가중치의 전체합은 100 이어야 합니다.",
  676. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  677. return false;
  678. }
  679. }
  680. else
  681. if (ChkFST3->Checked)
  682. {
  683. FFST = "FST3"; //최대값적용
  684. } else return false;
  685. //보정 파라미터
  686. FMCAVal3 = FMCAVal2 = FMCAVal1 = 0;
  687. if (ChkMCA0->Checked)
  688. {
  689. FMCA = "MCA0"; //사용안함
  690. }
  691. else
  692. if (ChkMCA1->Checked)
  693. {
  694. FMCA = "MCA1"; //단기(15분이동평균)/장기(패턴)
  695. FMCAVal3 = SeMCAVal3->Value;
  696. FMCAVal2 = SeMCAVal2->Value;
  697. FMCAVal1 = SeMCAVal1->Value;
  698. int nTotVal = (FMCAVal3+FMCAVal2+FMCAVal1);
  699. if (nTotVal != 100)
  700. {
  701. Application->MessageBox(L"보정 파라미터 - 단기(15분이동평균)/장기(패턴).\r\평균 가중치의 전체합은 100 이어야 합니다.",
  702. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  703. return false;
  704. }
  705. }
  706. else
  707. if (ChkMCA2->Checked)
  708. {
  709. FMCA = "MCA2"; //패턴적용
  710. } else return false;
  711. //평활화 파라미터
  712. FSMTSpdMin = FSMTSpdMax = FSMTVal2 = FSMTVal1 = FSMTValC = 0;
  713. if (ChkSMT0->Checked)
  714. {
  715. FSMT = "SMT0"; //사용안함
  716. }
  717. else
  718. if (ChkSMT1->Checked)
  719. {
  720. FSMT = "SMT1"; //패턴적용
  721. FSMTSpdMin = SeSMTValMin->Value;
  722. FSMTSpdMax = SeSMTValMax->Value;
  723. if (FSMTSpdMin >= FSMTSpdMax)
  724. {
  725. Application->MessageBox(L"평활화 파라미터 - 편차제한.\r\최저속도계수값은 최대속도계수값 미만이어야 합니다.",
  726. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  727. return false;
  728. }
  729. }
  730. else
  731. if (ChkSMT2->Checked)
  732. {
  733. FSMT = "SMT2"; //15분 이동평균
  734. FSMTVal2 = SeSMTVal2->Value;
  735. FSMTVal1 = SeSMTVal1->Value;
  736. FSMTValC = SeSMTValC->Value;
  737. int nTotVal = (FSMTVal2+FSMTVal1+FSMTValC);
  738. if (nTotVal != 100)
  739. {
  740. Application->MessageBox(L"평활화 파라미터 - 15분 이동평균.\r\15분 이동평균값 가중치의 전체합은 100 이어야 합니다.",
  741. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  742. return false;
  743. }
  744. } else return false;
  745. return true;
  746. }
  747. //---------------------------------------------------------------------------
  748. void __fastcall TIDB0050M::BtnApplyAllClick(TObject *Sender)
  749. {
  750. String sMsg;
  751. #if 0
  752. sMsg = "전체구간에 대하여 파라미터 정보를 설정합니다. \r\n"
  753. "선택한 구간에 대하여 작업을 원하시는 경우 [선택구간 적용]을 하십시요.\r\n"
  754. "전체구간에 대하여 파라미터 정보를 적용하시겠습니까?";
  755. #else
  756. sMsg = lblAll->Caption;
  757. #endif
  758. if (Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES) return;
  759. if (PgLink->ActivePageIndex == 0)
  760. {
  761. ModifyLinkParam(1, NULL);
  762. }
  763. else
  764. if (PgLink->ActivePageIndex == 1)
  765. {
  766. ModifyLinkParam(2, NULL);
  767. }
  768. else
  769. {
  770. ModifyLinkParam(3, NULL);
  771. }
  772. FRAMELinkList1->UpdateParam();
  773. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_07, 0);
  774. }
  775. //---------------------------------------------------------------------------
  776. void __fastcall TIDB0050M::BtnApplySelClick(TObject *Sender)
  777. {
  778. String sMsg;
  779. #if 0
  780. sMsg = "선택한 구간에 대하여 파라미터 정보를 설정합니다. \r\n"
  781. "전체 구간에 대하여 작업을 원하시는 경우 [전체구간 적용]을 하십시요.\r\n"
  782. "선택한 구간에 대하여 파라미터 정보를 적용하시겠습니까?";
  783. #else
  784. sMsg = lblSel->Caption;
  785. #endif
  786. if (Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES) return;
  787. int nSelCnt = 0;
  788. TStringList *pStringList = NULL;
  789. try
  790. {
  791. pStringList = new TStringList();
  792. if (PgLink->ActivePageIndex == 0)
  793. {
  794. //레벨1 링크
  795. nSelCnt = FRAMELinkList1->GetSelLinkIds(pStringList);
  796. if (nSelCnt <= 0)
  797. {
  798. Application->MessageBox(lblSelErr->Caption.c_str(),//L"목록에서 구간을 선택하셔야 합니다.",
  799. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  800. return ;
  801. }
  802. #if 0
  803. if (nSelCnt > 500)
  804. {
  805. Application->MessageBox(L"선택한 구간이 너무 많아 작업을 수행할 수 없습니다[최대 500개].", FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  806. return ;
  807. }
  808. #endif
  809. ModifyLinkParam(1, pStringList);
  810. }
  811. else
  812. if (PgLink->ActivePageIndex == 1)
  813. {
  814. //서비스 링크(레벨2)
  815. nSelCnt = FRAMEServiceLinkList1->GetSelLinkIds(pStringList);
  816. if (nSelCnt <= 0)
  817. {
  818. Application->MessageBox(lblSelErr->Caption.c_str(),//L"목록에서 구간을 선택하셔야 합니다.",
  819. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  820. return ;
  821. }
  822. #if 0
  823. if (nSelCnt > 500)
  824. {
  825. Application->MessageBox(L"선택한 구간이 너무 많아 작업을 수행할 수 없습니다[최대 500개].", FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  826. return ;
  827. }
  828. #endif
  829. ModifyLinkParam(2, pStringList);
  830. }
  831. else
  832. {
  833. //도로(레벨3)
  834. nSelCnt = FRAMERoadList1->GetSelLinkIds(pStringList);
  835. if (nSelCnt <= 0)
  836. {
  837. Application->MessageBox(lblSelErr->Caption.c_str(),//L"목록에서 구간을 선택하셔야 합니다.",
  838. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  839. return ;
  840. }
  841. #if 0
  842. if (nSelCnt > 500)
  843. {
  844. Application->MessageBox(L"선택한 구간이 너무 많아 작업을 수행할 수 없습니다[최대 500개].", FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  845. return ;
  846. }
  847. #endif
  848. ModifyLinkParam(3, pStringList);
  849. }
  850. }
  851. __finally
  852. {
  853. if (pStringList) delete pStringList;
  854. FRAMELinkList1->UpdateParam();
  855. }
  856. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_07, 0);
  857. }
  858. //---------------------------------------------------------------------------
  859. bool __fastcall TIDB0050M::ModifyLinkParam(int ALevel, TStringList *AStringList)
  860. {
  861. String PARA_ID = FSelParamId;
  862. if (PARA_ID == "") return false;
  863. String sQry;
  864. String sWhere = "";
  865. TADOQuery *pADO = NULL;
  866. try
  867. {
  868. try
  869. {
  870. pADO = new TADOQuery(NULL);
  871. pADO->Close();
  872. pADO->Connection = ITSDb_GetConnection();
  873. ITSDb_GetConnection()->BeginTrans();
  874. if (AStringList)
  875. {
  876. sQry = "UPDATE TB_LINK \r\n"
  877. " SET PARA_ID = :p01 \r\n";
  878. switch(ALevel)
  879. {
  880. case 1:
  881. sWhere = "WHERE LINK_ID = :p02 \r\n";
  882. break;
  883. case 2:
  884. sWhere = "WHERE LINK_ID IN (SELECT LINK_ID \r\n"
  885. " FROM TB_IFSC_LINK_RLTN \r\n"
  886. " WHERE IFSC_ID = :p02 ) \r\n";
  887. break;
  888. case 3:
  889. sWhere = "WHERE LINK_ID IN (SELECT LINK_ID \r\n"
  890. " FROM TB_IFSC_LINK_RLTN \r\n"
  891. " WHERE IFSC_ID IN (SELECT IFSC_ID \r\n"
  892. " FROM TB_ROAD_IFSC_RLTN \r\n"
  893. " WHERE ROAD_ID = :p01 ) ) \r\n";
  894. break;
  895. default: return false;
  896. }
  897. sQry = sQry + sWhere;
  898. pADO->SQL->Text = sQry;
  899. for (int ii = 0; ii < AStringList->Count; ii++)
  900. {
  901. String LINK_ID = AStringList->Strings[ii];
  902. pADO->Parameters->ParamByName("p01")->Value = PARA_ID;
  903. pADO->Parameters->ParamByName("p02")->Value = LINK_ID;
  904. pADO->ExecSQL();
  905. }
  906. }
  907. else
  908. {
  909. sQry = "UPDATE TB_LINK \r\n"
  910. " SET PARA_ID = :p01 \r\n";
  911. switch(ALevel)
  912. {
  913. case 1:
  914. sWhere = "";
  915. break;
  916. case 2:
  917. sWhere = "WHERE LINK_ID IN (SELECT LINK_ID \r\n"
  918. " FROM TB_IFSC_LINK_RLTN ) \r\n";
  919. break;
  920. case 3:
  921. sWhere = "WHERE LINK_ID IN (SELECT LINK_ID \r\n"
  922. " FROM TB_IFSC_LINK_RLTN \r\n"
  923. " WHERE IFSC_ID IN (SELECT IFSC_ID \r\n"
  924. " FROM TB_ROAD_IFSC_RLTN )) \r\n";
  925. break;
  926. default: return false;
  927. }
  928. sQry = sQry + sWhere;
  929. pADO->SQL->Text = sQry;
  930. pADO->Parameters->ParamByName("p01")->Value = PARA_ID;
  931. pADO->ExecSQL();
  932. }
  933. ITSDb_GetConnection()->CommitTrans();
  934. if (AStringList)
  935. {
  936. switch(ALevel)
  937. {
  938. case 1:
  939. for (int ii = 0; ii < AStringList->Count; ii++)
  940. {
  941. String LINK_ID = AStringList->Strings[ii];
  942. TItsLink* pLink = ItsLinkManager->FLists.Find(LINK_ID);
  943. if (pLink) pLink->PARA_ID = PARA_ID;
  944. }
  945. break;
  946. case 2:
  947. for (int ii = 0; ii < AStringList->Count; ii++)
  948. {
  949. String IFSC_ID = AStringList->Strings[ii];
  950. TItsIfsc* pIfsc = ItsIfscManager->FLists.Find(IFSC_ID);
  951. if (pIfsc)
  952. {
  953. std::map<int, String>::iterator itPos;
  954. for(itPos = pIfsc->FSubLists.begin(); itPos != pIfsc->FSubLists.end(); ++itPos)
  955. {
  956. String LINK_ID = itPos->second;
  957. TItsLink* pLink = ItsLinkManager->FLists.Find(LINK_ID);
  958. if (pLink) pLink->PARA_ID = PARA_ID;
  959. }
  960. }
  961. }
  962. break;
  963. case 3:
  964. for (int ii = 0; ii < AStringList->Count; ii++)
  965. {
  966. String ROAD_ID = AStringList->Strings[ii];
  967. TItsRoad* pRoad = ItsRoadManager->FLists.Find(ROAD_ID);
  968. if (pRoad)
  969. {
  970. std::map<int, String>::iterator itPos, itIfscPos;
  971. for(itPos = pRoad->FSubLists.begin(); itPos != pRoad->FSubLists.end(); ++itPos)
  972. {
  973. String IFSC_ID = itPos->second;
  974. TItsIfsc* pIfsc = ItsIfscManager->FLists.Find(IFSC_ID);
  975. if (pIfsc)
  976. {
  977. for(itIfscPos = pIfsc->FSubLists.begin(); itIfscPos != pIfsc->FSubLists.end(); ++itIfscPos)
  978. {
  979. String LINK_ID = itIfscPos->second;
  980. TItsLink* pLink = ItsLinkManager->FLists.Find(LINK_ID);
  981. if (pLink) pLink->PARA_ID = PARA_ID;
  982. }
  983. }
  984. }
  985. }
  986. }
  987. break;
  988. }
  989. }
  990. else
  991. {
  992. switch(ALevel)
  993. {
  994. case 1:
  995. FOR_STL(TItsLink*, pLink, ItsLinkManager->FLists)
  996. {
  997. pLink->PARA_ID = PARA_ID;
  998. }
  999. break;
  1000. case 2:
  1001. FOR_STL(TItsLink*, pLink, ItsLinkManager->FLists)
  1002. {
  1003. if (pLink->IFSC_ID != "") pLink->PARA_ID = PARA_ID;
  1004. }
  1005. break;
  1006. case 3:
  1007. FOR_STL(TItsLink*, pLink, ItsLinkManager->FLists)
  1008. {
  1009. if (pLink->ROAD_ID != "") pLink->PARA_ID = PARA_ID;
  1010. }
  1011. break;
  1012. }
  1013. }
  1014. Application->MessageBox(lblSaveOk->Caption.c_str(),//L"파라미터 정보를 설정 하였습니다.",
  1015. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  1016. }
  1017. catch(EDatabaseError &E)
  1018. {
  1019. ITSDb_GetConnection()->RollbackTrans();
  1020. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  1021. ShowMessage(String(E.ClassName()) + E.Message);
  1022. }
  1023. catch(Exception &exception)
  1024. {
  1025. ITSDb_GetConnection()->RollbackTrans();
  1026. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  1027. ShowMessage(String(exception.ClassName()) + exception.Message);
  1028. }
  1029. }
  1030. __finally
  1031. {
  1032. if (pADO)
  1033. {
  1034. pADO->Close();
  1035. delete pADO;
  1036. }
  1037. }
  1038. return true;
  1039. }
  1040. //---------------------------------------------------------------------------
  1041. void __fastcall TIDB0050M::FRAMELinkList1TvListFocusedRecordChanged(TcxCustomGridTableView *Sender, TcxCustomGridRecord *APrevFocusedRecord,
  1042. TcxCustomGridRecord *AFocusedRecord, bool ANewItemRecordFocusingChanged)
  1043. {
  1044. if (!FInit) return;
  1045. if (!AFocusedRecord) return;
  1046. if (FRAMELinkList1->TvList->ViewData->RecordCount <= 0) return;
  1047. int nIndex = FRAMELinkList1->TvList->DataController->FocusedRecordIndex;
  1048. if (nIndex < 0) return;
  1049. String sLinkId = VarToStr(FRAMELinkList1->TvList->DataController->Values[nIndex][FRAMELinkList1->Column01->Index]);
  1050. DisplayLinkParam(1, sLinkId);
  1051. }
  1052. //---------------------------------------------------------------------------
  1053. void __fastcall TIDB0050M::FRAMEServiceLinkList1TvListFocusedRecordChanged(TcxCustomGridTableView *Sender, TcxCustomGridRecord *APrevFocusedRecord,
  1054. TcxCustomGridRecord *AFocusedRecord, bool ANewItemRecordFocusingChanged)
  1055. {
  1056. if (!FInit) return;
  1057. if (!AFocusedRecord) return;
  1058. if (FRAMEServiceLinkList1->TvList->ViewData->RecordCount <= 0) return;
  1059. int nIndex = FRAMEServiceLinkList1->TvList->DataController->FocusedRecordIndex;
  1060. if (nIndex < 0) return;
  1061. String sLinkId = VarToStr(FRAMEServiceLinkList1->TvList->DataController->Values[nIndex][FRAMEServiceLinkList1->Column01->Index]);
  1062. DisplayLinkParam(2, sLinkId);
  1063. }
  1064. //---------------------------------------------------------------------------
  1065. void __fastcall TIDB0050M::FRAMERoadList1TvListFocusedRecordChanged(TcxCustomGridTableView *Sender, TcxCustomGridRecord *APrevFocusedRecord,
  1066. TcxCustomGridRecord *AFocusedRecord, bool ANewItemRecordFocusingChanged)
  1067. {
  1068. if (!FInit) return;
  1069. if (!AFocusedRecord) return;
  1070. if (FRAMERoadList1->TvList->ViewData->RecordCount <= 0) return;
  1071. int nIndex = FRAMERoadList1->TvList->DataController->FocusedRecordIndex;
  1072. if (nIndex < 0) return;
  1073. String sLinkId = VarToStr(FRAMERoadList1->TvList->DataController->Values[nIndex][FRAMERoadList1->Column01->Index]);
  1074. DisplayLinkParam(3, sLinkId);
  1075. }
  1076. //---------------------------------------------------------------------------
  1077. void __fastcall TIDB0050M::DisplayLink()
  1078. {
  1079. if (PgLink->Properties->ActivePage != cxTabSheet1) return;
  1080. if (FRAMELinkList1->TvList->ViewData->RecordCount <= 0) return;
  1081. int nIndex = FRAMELinkList1->TvList->DataController->FocusedRecordIndex;
  1082. if (nIndex < 0) return;
  1083. String sLinkId = VarToStr(FRAMELinkList1->TvList->DataController->Values[nIndex][FRAMELinkList1->Column01->Index]);
  1084. DisplayLinkParam(1, sLinkId);
  1085. }
  1086. //---------------------------------------------------------------------------
  1087. void __fastcall TIDB0050M::DisplayProcessingParam(String AParamId)
  1088. {
  1089. TPrcsParam *pObj = MyParamManager->FLists.Find(AParamId);
  1090. if (!pObj) return;
  1091. String sFMT;
  1092. String sFST;
  1093. String sMCA;
  1094. String sSMT;
  1095. //cxGroupBoxFMT->Enabled = true;
  1096. //cxGroupBoxFST->Enabled = true;
  1097. //cxGroupBoxMCA->Enabled = true;
  1098. //cxGroupBoxSMT->Enabled = true;
  1099. ChkFMT1->Checked = true;
  1100. ChkMCA1->Checked = true;
  1101. ChkSMT1->Checked = true;
  1102. ChkFST1->Checked = true;
  1103. {
  1104. SeSMTValMin->Value = 0.50;
  1105. SeSMTValMax->Value = 2.00;
  1106. }
  1107. {
  1108. SeSMTVal2->Value = 20;
  1109. SeSMTVal1->Value = 30;
  1110. SeSMTValC->Value = 50;
  1111. }
  1112. try
  1113. {
  1114. sFMT = pObj->FLTR_MTHD_CD;
  1115. sFST = pObj->FUSN_MTHD_CD;
  1116. sMCA = pObj->ADJS_MTHD_CD;
  1117. sSMT = pObj->SMTH_MTHD_CD;
  1118. // filtering
  1119. if (sFMT == "FMT0") {
  1120. if (!ChkFMT0->Checked) ChkFMT0->Checked = true;
  1121. } else
  1122. if (sFMT == "FMT1") {
  1123. if (!ChkFMT1->Checked) ChkFMT1->Checked = true;
  1124. }
  1125. // fusion
  1126. if (sFST == "FST1") {
  1127. if (!ChkFST1->Checked) ChkFST1->Checked = true;
  1128. } else
  1129. if (sFST == "FST2") {
  1130. if (!ChkFST2->Checked) ChkFST2->Checked = true;
  1131. } else
  1132. if (sFST == "FST3") {
  1133. if (!ChkFST3->Checked) ChkFST3->Checked = true;
  1134. }
  1135. // correct
  1136. if (sMCA == "MCA0") {
  1137. if (!ChkMCA0->Checked) ChkMCA0->Checked = true;
  1138. } else
  1139. if (sMCA == "MCA1") {
  1140. if (!ChkMCA1->Checked) ChkMCA1->Checked = true;
  1141. } else
  1142. if (sMCA == "MCA2") {
  1143. if (!ChkMCA2->Checked) ChkMCA2->Checked = true;
  1144. }
  1145. // smoothing
  1146. if (sSMT == "SMT0") {
  1147. if (!ChkSMT0->Checked) ChkSMT0->Checked = true;
  1148. } else
  1149. if (sSMT == "SMT1") {
  1150. if (!ChkSMT1->Checked) ChkSMT1->Checked = true;
  1151. } else
  1152. if (sSMT == "SMT2") {
  1153. if (!ChkSMT2->Checked) ChkSMT2->Checked = true;
  1154. }
  1155. SeVolMin->Value = pObj->FLTR_MIN_TFVL;
  1156. SeVolMax->Value = pObj->FLTR_MAX_TFVL;
  1157. SeSpdMin->Value = pObj->FLTR_LWST_SPED;
  1158. SeSpdMax->Value = pObj->FLTR_HGHS_SPED;
  1159. SeMCAVal1->Value = pObj->ADJS_WGHT_AVRG_PRE_1CYCL * 100;
  1160. SeMCAVal2->Value = pObj->ADJS_WGHT_AVRG_PRE_2CYCL * 100;
  1161. SeMCAVal3->Value = pObj->ADJS_WGHT_AVRG_PRE_3CYCL * 100;
  1162. Chk15MinPtrn->Checked = pObj->ADJS_15M_PTRN_APLY_YN == "N" ? false : true;
  1163. SeMissCycle->Value = pObj->ADJS_SHTR_MISS_DECS_CYCL;
  1164. SeSMTValMin->Value = pObj->SMTH_LWST_SPED_FCTR;
  1165. SeSMTValMax->Value = pObj->SMTH_HGHS_SPED_FCTR;
  1166. SeSMTValC->Value = (int)(pObj->SMTH_WGHT_AVRG_PRST * 100);
  1167. SeSMTVal1->Value = (int)(pObj->SMTH_WGHT_AVRG_PRE_1CYCL * 100);
  1168. SeSMTVal2->Value = (int)(pObj->SMTH_WGHT_AVRG_PRE_2CYCL * 100);
  1169. LoadCollectSysInfo();
  1170. try
  1171. {
  1172. int ii, nIndx;
  1173. TcxGridDataController *pGDC0 = TvList0->DataController;
  1174. TcxGridDataController *pGDC3 = TvList3->DataController;
  1175. TvList0->BeginUpdate();
  1176. TvList3->BeginUpdate();
  1177. if (sFST == "FST1") // 우선순위
  1178. {
  1179. for(ii = 0; ii < pGDC0->RecordCount; ii++)
  1180. {
  1181. pGDC0->Values[ii][ColumnD03->Index] = lblNotUse->Caption;//"사용안함";
  1182. }
  1183. FOR_STL(TPrcsParamClct*, pClct, pObj->CLCTS)
  1184. {
  1185. for(ii = 0; ii < pGDC0->RecordCount; ii++)
  1186. {
  1187. if (pClct->CLCT_SYST_CD == VarToStr(pGDC0->Values[ii][ColumnD02->Index]))
  1188. {
  1189. pGDC0->Values[ii][ColumnD03->Index] = String(pClct->FUSN_PRRT);
  1190. break;
  1191. }
  1192. }
  1193. }
  1194. }
  1195. else
  1196. if (sFST == "FST2") // 가중치
  1197. {
  1198. for(ii = 0; ii < pGDC3->RecordCount; ii++)
  1199. {
  1200. pGDC3->Values[ii][ColumnC03->Index] = 0;
  1201. }
  1202. FOR_STL(TPrcsParamClct*, pClct, pObj->CLCTS)
  1203. {
  1204. for(ii = 0; ii < pGDC3->RecordCount; ii++)
  1205. {
  1206. if (pClct->CLCT_SYST_CD == VarToStr(pGDC3->Values[ii][ColumnC02->Index]))
  1207. {
  1208. pGDC3->Values[ii][ColumnC03->Index] = (pClct->FUSN_WGHT * 100.);
  1209. break;
  1210. }
  1211. }
  1212. }
  1213. }
  1214. }
  1215. __finally
  1216. {
  1217. TvList0->EndUpdate();
  1218. TvList3->EndUpdate();
  1219. ColumnD03->SortIndex = ColumnD03->Index;
  1220. ColumnD03->SortOrder = soAscending;
  1221. }
  1222. }
  1223. catch(Exception &exception)
  1224. {
  1225. ShowMessage(String(exception.ClassName()) + exception.Message);
  1226. }
  1227. //cxGroupBoxFMT->Enabled = false;
  1228. //cxGroupBoxFST->Enabled = false;
  1229. //cxGroupBoxMCA->Enabled = false;
  1230. //cxGroupBoxSMT->Enabled = false;
  1231. }
  1232. //---------------------------------------------------------------------------
  1233. void __fastcall TIDB0050M::SelectParam(String AParamId)
  1234. {
  1235. for (int ii = 0; ii < CbProcessingParam->Properties->Items->Count; ii++)
  1236. {
  1237. TPrcsParam *pObj = (TPrcsParam*)CbProcessingParam->Properties->Items->Objects[ii];
  1238. if (AParamId == pObj->PARA_ID)
  1239. {
  1240. CbProcessingParam->ItemIndex = ii;
  1241. break;
  1242. }
  1243. }
  1244. }
  1245. //---------------------------------------------------------------------------
  1246. void __fastcall TIDB0050M::DisplayLinkParam(int ALevel, String ALinkId)
  1247. {
  1248. if (ALevel != 1) return;
  1249. TSqlCursor sqlCursor;
  1250. TItsLink *pLink = ItsLinkManager->FLists.Find(ALinkId);
  1251. if (!pLink) return;
  1252. SelectParam(pLink->PARA_ID);
  1253. return;
  1254. String sQry;
  1255. TADOQuery *pADO = ADOQry;
  1256. String sFMT;
  1257. String sFST;
  1258. String sMCA;
  1259. String sSMT;
  1260. try
  1261. {
  1262. try
  1263. {
  1264. sQry = "SELECT FLTR_MTHD_CD, \r\n"
  1265. " FUSN_MTHD_CD, \r\n"
  1266. " ADJS_MTHD_CD, \r\n"
  1267. " SMTH_MTHD_CD \r\n"
  1268. " FROM TB_LINK_PARA_STUP \r\n"
  1269. " WHERE LINK_ID = :p01 \r\n";
  1270. ITSDb_SQLText(pADO, sQry);
  1271. ITSDb_SQLBind(pADO, "p01", ALinkId);
  1272. ITSDb_SQLOpen(pADO);
  1273. for( ; !pADO->Eof; pADO->Next())
  1274. {
  1275. sFMT = pADO->FieldByName("FLTR_MTHD_CD")->AsString;
  1276. sFST = pADO->FieldByName("FUSN_MTHD_CD")->AsString;
  1277. sMCA = pADO->FieldByName("ADJS_MTHD_CD")->AsString;
  1278. sSMT = pADO->FieldByName("SMTH_MTHD_CD")->AsString;
  1279. if (sFMT == "FMT0")
  1280. {
  1281. if (!ChkFMT0->Checked) ChkFMT0->Checked = true;
  1282. }
  1283. else
  1284. {
  1285. if (!ChkFMT1->Checked) ChkFMT1->Checked = true;
  1286. }
  1287. if (sFST == "FST1")
  1288. {
  1289. if (!ChkFST1->Checked) ChkFST1->Checked = true;
  1290. }
  1291. else
  1292. if (sFST == "FST2")
  1293. {
  1294. if (!ChkFST2->Checked) ChkFST2->Checked = true;
  1295. }
  1296. else
  1297. {
  1298. //"FST3"
  1299. if (!ChkFST3->Checked) ChkFST3->Checked = true;
  1300. }
  1301. if (sMCA == "MCA0")
  1302. {
  1303. if (!ChkMCA0->Checked) ChkMCA0->Checked = true;
  1304. }
  1305. else
  1306. if (sMCA == "MCA1")
  1307. {
  1308. if (!ChkMCA1->Checked) ChkMCA1->Checked = true;
  1309. }
  1310. else
  1311. {
  1312. if (!ChkMCA2->Checked) ChkMCA2->Checked = true;
  1313. }
  1314. if (sSMT == "SMT0")
  1315. {
  1316. if (!ChkSMT0->Checked) ChkSMT0->Checked = true;
  1317. }
  1318. else
  1319. if (sSMT == "SMT1")
  1320. {
  1321. if (!ChkSMT1->Checked) ChkSMT1->Checked = true;
  1322. }
  1323. else
  1324. {
  1325. if (!ChkSMT2->Checked) ChkSMT2->Checked = true;
  1326. }
  1327. }
  1328. sQry = "SELECT FLTR_MIN_TFVL, \r\n"
  1329. " FLTR_MAX_TFVL, \r\n"
  1330. " FLTR_LWST_SPED, \r\n"
  1331. " FLTR_HGHS_SPED, \r\n"
  1332. " ADJS_WGHT_AVRG_PRE_1CYCL, \r\n"
  1333. " ADJS_WGHT_AVRG_PRE_2CYCL, \r\n"
  1334. " ADJS_WGHT_AVRG_PRE_3CYCL, \r\n"
  1335. " ADJS_15M_PTRN_APLY_YN, \r\n"
  1336. " ADJS_SHTR_MISS_DECS_CYCL, \r\n"
  1337. " SMTH_LWST_SPED_FCTR, \r\n"
  1338. " SMTH_HGHS_SPED_FCTR, \r\n"
  1339. " SMTH_WGHT_AVRG_PRST, \r\n"
  1340. " SMTH_WGHT_AVRG_PRE_1CYCL, \r\n"
  1341. " SMTH_WGHT_AVRG_PRE_2CYCL \r\n"
  1342. " FROM TB_LINK_PARA_DETL \r\n"
  1343. " WHERE LINK_ID = :p01 \r\n";
  1344. ITSDb_SQLText(pADO, sQry);
  1345. ITSDb_SQLBind(pADO, "p01", ALinkId);
  1346. ITSDb_SQLOpen(pADO);
  1347. for( ; !pADO->Eof; pADO->Next())
  1348. {
  1349. #if 0
  1350. SeVolMin->Value = pADO->FieldByName("FLTR_MIN_TFVL")->AsInteger;
  1351. SeVolMax->Value = pADO->FieldByName("FLTR_MAX_TFVL")->AsInteger;
  1352. SeSpdMin->Value = pADO->FieldByName("FLTR_LWST_SPED")->AsInteger;
  1353. SeSpdMax->Value = pADO->FieldByName("FLTR_HGHS_SPED")->AsInteger;
  1354. #endif
  1355. if (sFMT == "FMT0")
  1356. {
  1357. SeVolMin->Value = 1;
  1358. SeVolMax->Value = 200;
  1359. SeSpdMin->Value = 1;
  1360. SeSpdMax->Value = 200;
  1361. }
  1362. else
  1363. {
  1364. SeVolMin->Value = pADO->FieldByName("FLTR_MIN_TFVL")->AsInteger;
  1365. SeVolMax->Value = pADO->FieldByName("FLTR_MAX_TFVL")->AsInteger;
  1366. SeSpdMin->Value = pADO->FieldByName("FLTR_LWST_SPED")->AsInteger;
  1367. SeSpdMax->Value = pADO->FieldByName("FLTR_HGHS_SPED")->AsInteger;
  1368. }
  1369. #if 0
  1370. SeMCAVal1->Value = pADO->FieldByName("ADJS_WGHT_AVRG_PRE_1CYCL")->AsFloat * 100;
  1371. SeMCAVal2->Value = pADO->FieldByName("ADJS_WGHT_AVRG_PRE_2CYCL")->AsFloat * 100;
  1372. SeMCAVal3->Value = pADO->FieldByName("ADJS_WGHT_AVRG_PRE_3CYCL")->AsFloat * 100;
  1373. String sPtrnYn = pADO->FieldByName("ADJS_15M_PTRN_APLY_YN")->AsString;
  1374. Chk15MinPtrn->Checked = sPtrnYn == "N" ? false : true;
  1375. SeMissCycle->Value = pADO->FieldByName("ADJS_SHTR_MISS_DECS_CYCL")->AsInteger;
  1376. #endif
  1377. if (sMCA == "MCA1")
  1378. {
  1379. SeMCAVal1->Value = pADO->FieldByName("ADJS_WGHT_AVRG_PRE_1CYCL")->AsFloat * 100;
  1380. SeMCAVal2->Value = pADO->FieldByName("ADJS_WGHT_AVRG_PRE_2CYCL")->AsFloat * 100;
  1381. SeMCAVal3->Value = pADO->FieldByName("ADJS_WGHT_AVRG_PRE_3CYCL")->AsFloat * 100;
  1382. String sPtrnYn = pADO->FieldByName("ADJS_15M_PTRN_APLY_YN")->AsString;
  1383. Chk15MinPtrn->Checked = sPtrnYn == "N" ? false : true;
  1384. SeMissCycle->Value = pADO->FieldByName("ADJS_SHTR_MISS_DECS_CYCL")->AsInteger;
  1385. }
  1386. else
  1387. {
  1388. SeMCAVal3->Value = 20;
  1389. SeMCAVal2->Value = 30;
  1390. SeMCAVal1->Value = 50;
  1391. Chk15MinPtrn->Checked = false;
  1392. SeMissCycle->Value = 3;
  1393. }
  1394. #if 0
  1395. SeSMTValMin->Value = pADO->FieldByName("SMTH_LWST_SPED_FCTR")->AsFloat;// * 100;
  1396. SeSMTValMax->Value = pADO->FieldByName("SMTH_HGHS_SPED_FCTR")->AsFloat;// * 100;
  1397. SeSMTValC->Value = pADO->FieldByName("SMTH_WGHT_AVRG_PRST")->AsFloat * 100;
  1398. SeSMTVal1->Value = pADO->FieldByName("SMTH_WGHT_AVRG_PRE_1CYCL")->AsFloat * 100;
  1399. SeSMTVal2->Value = pADO->FieldByName("SMTH_WGHT_AVRG_PRE_2CYCL")->AsFloat * 100;
  1400. #endif
  1401. if (sSMT == "SMT0")
  1402. {
  1403. SeSMTValMin->Value = 0.50;
  1404. SeSMTValMax->Value = 2.00;
  1405. SeSMTVal2->Value = 20;
  1406. SeSMTVal1->Value = 30;
  1407. SeSMTValC->Value = 50;
  1408. }
  1409. else
  1410. if (sSMT == "SMT1")
  1411. {
  1412. SeSMTValMin->Value = pADO->FieldByName("SMTH_LWST_SPED_FCTR")->AsFloat;// * 100;
  1413. SeSMTValMax->Value = pADO->FieldByName("SMTH_HGHS_SPED_FCTR")->AsFloat;// * 100;
  1414. }
  1415. else
  1416. {
  1417. SeSMTValC->Value = pADO->FieldByName("SMTH_WGHT_AVRG_PRST")->AsFloat * 100;
  1418. SeSMTVal1->Value = pADO->FieldByName("SMTH_WGHT_AVRG_PRE_1CYCL")->AsFloat * 100;
  1419. SeSMTVal2->Value = pADO->FieldByName("SMTH_WGHT_AVRG_PRE_2CYCL")->AsFloat * 100;
  1420. }
  1421. }
  1422. sQry = "SELECT FUSN_PRRT, \r\n"
  1423. " FUSN_WGHT, \r\n"
  1424. " CLCT_SYST_CD \r\n"
  1425. " FROM TB_LINK_PARA_CLCT_SYST \r\n"
  1426. " WHERE LINK_ID = :p01 \r\n"
  1427. " ORDER BY FUSN_PRRT \r\n";
  1428. ITSDb_SQLText(pADO, sQry);
  1429. ITSDb_SQLBind(pADO, "p01", ALinkId);
  1430. ITSDb_SQLOpen(pADO);
  1431. try
  1432. {
  1433. int ii, nIndx;
  1434. TcxGridDataController *pGDC = TvList0->DataController;
  1435. TvList0->BeginUpdate();
  1436. TvList3->BeginUpdate();
  1437. for(ii = 0; ii < pGDC->RecordCount; ii++)
  1438. {
  1439. pGDC->Values[ii][ColumnD03->Index] = "사용안함";
  1440. //TvList3->DataController->Values[ii][ColumnC03->Index] = 0;
  1441. }
  1442. for( ; !pADO->Eof; pADO->Next())
  1443. {
  1444. String sCLCT_SYST_CD = pADO->FieldByName("CLCT_SYST_CD")->AsString;
  1445. int nFUSN_PRRT = pADO->FieldByName("FUSN_PRRT")->AsInteger;
  1446. double dFUSN_WGHT = pADO->FieldByName("FUSN_WGHT")->AsFloat * 100;
  1447. for(ii = 0; ii < pGDC->RecordCount; ii++)
  1448. {
  1449. String sCode = pGDC->Values[ii][ColumnD02->Index];
  1450. if (sCode == sCLCT_SYST_CD)
  1451. {
  1452. String sPri;
  1453. sPri.printf(L"%02d", nFUSN_PRRT);
  1454. pGDC->Values[ii][ColumnD03->Index] = sPri;
  1455. //pGDC->Values[ii][ColumnD03->Index] = String(nFUSN_PRRT);
  1456. nIndx = pGDC->Values[ii][ColumnD04->Index];
  1457. TvList3->DataController->Values[nIndx][ColumnC03->Index] = dFUSN_WGHT;
  1458. break;
  1459. }
  1460. }
  1461. }
  1462. }
  1463. __finally
  1464. {
  1465. TvList0->EndUpdate();
  1466. TvList3->EndUpdate();
  1467. ColumnD03->SortIndex = ColumnD03->Index;
  1468. ColumnD03->SortOrder = soAscending;
  1469. }
  1470. }
  1471. catch(EDatabaseError &E)
  1472. {
  1473. ITSDb_GetConnection()->RollbackTrans();
  1474. ShowMessage(String(E.ClassName()) + E.Message);
  1475. }
  1476. catch(Exception &exception)
  1477. {
  1478. ITSDb_GetConnection()->RollbackTrans();
  1479. ShowMessage(String(exception.ClassName()) + exception.Message);
  1480. }
  1481. catch(...)
  1482. {
  1483. ITSDb_GetConnection()->RollbackTrans();
  1484. ShowMessage(FrmLang->lblDbErr->Caption);//"데이터 작업 중에 알수없는 DB 오류가 발생하였습니다.");
  1485. }
  1486. }
  1487. __finally
  1488. {
  1489. pADO->Close();
  1490. }
  1491. }
  1492. //---------------------------------------------------------------------------
  1493. void __fastcall TIDB0050M::CbProcessingParamPropertiesChange(TObject *Sender)
  1494. {
  1495. int nIndex = CbProcessingParam->ItemIndex;
  1496. if (nIndex < 0) return;
  1497. TPrcsParam *pObj = (TPrcsParam*)CbProcessingParam->Properties->Items->Objects[nIndex];
  1498. if (!pObj) return;
  1499. FSelParamId = pObj->PARA_ID;
  1500. DisplayProcessingParam(FSelParamId);
  1501. }
  1502. //---------------------------------------------------------------------------
  1503. void __fastcall TIDB0050M::BtnProcessParamClick(TObject *Sender)
  1504. {
  1505. IDB0051M = new TIDB0051M(this);
  1506. IDB0051M->ShowModal();
  1507. MyParamManager->LoadFromDb();
  1508. FillProcessingParam();
  1509. SelectParam(FSelParamId);
  1510. DisplayProcessingParam(FSelParamId);
  1511. }
  1512. //---------------------------------------------------------------------------