FrmVmsMsgScheMngrF.cpp 59 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #include <IOUtils.hpp>
  4. #include "ITSSkinF.h"
  5. #include "ITSUtilF.h"
  6. #include "AppGlobalF.h"
  7. #include "CDSVmsIfscF.h"
  8. #include "CDSFontF.h"
  9. #include "CDSVmsFormF.h"
  10. #include "CDSVmsIfscF.h"
  11. #include "CDSVmsDsplCndtF.h"
  12. #pragma hdrstop
  13. #include "FrmVmsMsgScheMngrF.h"
  14. #include "VMSM610MF.h"
  15. //---------------------------------------------------------------------------
  16. #pragma package(smart_init)
  17. #pragma link "cxButtons"
  18. #pragma link "cxCalendar"
  19. #pragma link "cxContainer"
  20. #pragma link "cxControls"
  21. #pragma link "cxDropDownEdit"
  22. #pragma link "cxEdit"
  23. #pragma link "cxGraphics"
  24. #pragma link "cxGroupBox"
  25. #pragma link "cxLabel"
  26. #pragma link "cxLookAndFeelPainters"
  27. #pragma link "cxLookAndFeels"
  28. #pragma link "cxMaskEdit"
  29. #pragma link "cxPC"
  30. #pragma link "cxPCdxBarPopupMenu"
  31. #pragma link "cxSpinEdit"
  32. #pragma link "cxSplitter"
  33. #pragma link "cxTextEdit"
  34. #pragma link "cxTimeEdit"
  35. #pragma link "dxSkinBlack"
  36. #pragma link "dxSkinBlue"
  37. #pragma link "dxSkinCaramel"
  38. #pragma link "dxSkinCoffee"
  39. #pragma link "dxSkinDarkRoom"
  40. #pragma link "dxSkinDarkSide"
  41. #pragma link "dxSkinFoggy"
  42. #pragma link "dxSkinGlassOceans"
  43. #pragma link "dxSkiniMaginary"
  44. #pragma link "dxSkinLilian"
  45. #pragma link "dxSkinLiquidSky"
  46. #pragma link "dxSkinLondonLiquidSky"
  47. #pragma link "dxSkinMcSkin"
  48. #pragma link "dxSkinMoneyTwins"
  49. #pragma link "dxSkinOffice2007Black"
  50. #pragma link "dxSkinOffice2007Blue"
  51. #pragma link "dxSkinOffice2007Green"
  52. #pragma link "dxSkinOffice2007Pink"
  53. #pragma link "dxSkinOffice2007Silver"
  54. #pragma link "dxSkinOffice2010Black"
  55. #pragma link "dxSkinOffice2010Blue"
  56. #pragma link "dxSkinOffice2010Silver"
  57. #pragma link "dxSkinsCore"
  58. #pragma link "dxSkinscxPCPainter"
  59. #pragma link "dxSkinSeven"
  60. #pragma link "dxSkinSharp"
  61. #pragma link "dxSkinSilver"
  62. #pragma link "dxSkinStardust"
  63. #pragma link "cxRadioGroup"
  64. #pragma link "cxClasses"
  65. #pragma link "cxCustomData"
  66. #pragma link "cxData"
  67. #pragma link "cxDataStorage"
  68. #pragma link "cxDBData"
  69. #pragma link "cxFilter"
  70. #pragma link "cxGrid"
  71. #pragma link "cxGridCustomTableView"
  72. #pragma link "cxGridCustomView"
  73. #pragma link "cxGridDBTableView"
  74. #pragma link "cxGridLevel"
  75. #pragma link "cxGridTableView"
  76. #pragma link "cxStyles"
  77. #pragma link "cxCheckBox"
  78. #pragma link "cxImage"
  79. #pragma link "cxButtonEdit"
  80. #pragma link "cxBlobEdit"
  81. #pragma link "cxColorComboBox"
  82. #pragma link "cxCalc"
  83. #pragma link "VmsDesignerF"
  84. #pragma link "cxHint"
  85. #pragma link "dxCustomHint"
  86. #pragma link "dxGDIPlusClasses"
  87. #pragma link "dxScreenTip"
  88. #pragma link "dxSkinsForm"
  89. #pragma resource "*.dfm"
  90. TFrmVmsMsgScheMngr *FrmVmsMsgScheMngr = NULL;
  91. //---------------------------------------------------------------------------
  92. __fastcall TFrmVmsMsgScheMngr::TFrmVmsMsgScheMngr(TComponent* Owner)
  93. : TForm(Owner)
  94. {
  95. //CMM_SetFormPosition(g_AppCfg.bSaveForm);
  96. ITSSkin_Initialize(Application, g_AppCfg.sLang);
  97. ITSSkin_Caption(false);
  98. ITSSkin_Load(this);
  99. //CMM_LoadForm(g_sFormsDir, this);
  100. SetColorScheme(g_AppCfg.sSkinName);
  101. FUpdate= false;
  102. FTitle = Caption;//"VMS 자동 스케줄 관리";
  103. FListSymb = new TList;
  104. EditMode = false;
  105. FSelVmsModlType = "";
  106. FSelVmsCtlrId = "";
  107. PgSchedule->ActivePage = TsEdit;
  108. //GrpPreview->Height = 368;
  109. TvSche->OptionsData->Editing = false;
  110. }
  111. //---------------------------------------------------------------------------
  112. void __fastcall TFrmVmsMsgScheMngr::SetColorScheme(String ASkinName)
  113. {
  114. dxSkinController1->SkinName = ASkinName;
  115. dxSkinController1->Refresh();
  116. }
  117. //---------------------------------------------------------------------------
  118. void __fastcall TFrmVmsMsgScheMngr::InitTcxList(TcxGridTableView *AView)
  119. {
  120. AView->OptionsView->DataRowHeight = 0;
  121. AView->OptionsView->CellAutoHeight = true;
  122. AView->OptionsView->Indicator = false;
  123. AView->OptionsCustomize->ColumnMoving = false;
  124. AView->OptionsCustomize->ColumnSorting = false;
  125. AView->Columns[0]->Width = 40;
  126. AView->Columns[0]->Options->HorzSizing = false;
  127. AView->Columns[1]->Width = 330;
  128. }
  129. //---------------------------------------------------------------------------
  130. void __fastcall TFrmVmsMsgScheMngr::CommClose()
  131. {
  132. try
  133. {
  134. if (m_pEdtDesigner)
  135. {
  136. delete m_pEdtDesigner;
  137. m_pEdtDesigner = NULL;
  138. }
  139. APP_DelVmsSizeCombo(CbSizeType);
  140. ClearSymbloList();
  141. SAFE_DELETE(FListSymb);
  142. FVmsFormDsplCndtList.RemoveAll();
  143. FFormLists.RemoveAll(); // 모듈크기별 폼 이미지를 저장
  144. FFormBackLists.RemoveAll(); // 모듈크기별 폼 이미지를 저장(필인객체를 제외한 이미지 저장)
  145. FFormRealLists.RemoveAll(); // 필인 객체를 포함한 폼 이미지 저장
  146. FVmsScnrLists.RemoveAll(); // 시나리오별 필인객체 정보 저장
  147. FVmsFormLists.RemoveAll(); // 폼별 객체정보를 저장
  148. CComm_Terminate();
  149. ITSSkin_Term();
  150. //CMM_SaveForm(g_sFormsDir, this);
  151. }
  152. catch(...)
  153. {
  154. }
  155. }
  156. //---------------------------------------------------------------------------
  157. void __fastcall TFrmVmsMsgScheMngr::FormCreate(TObject *Sender)
  158. {
  159. InitDbLoading();
  160. m_pEdtDesigner = new TVmsFormDesigner(PnlEditForm);
  161. FOR_STL(TCDSFontColor*, pObj, CDSFontManager->FFontColors)
  162. {
  163. m_pEdtDesigner->InitFontColor(pObj->VMS_FONT_COLR_CD, (TColor)pObj->VMS_FONT_COLR_VAL);
  164. }
  165. FOR_STL(TCDSBackColor*, pObj, CDSFontManager->FBackColors)
  166. {
  167. m_pEdtDesigner->InitBackColor(pObj->VMS_BACK_COLR_CD, (TColor)pObj->VMS_BACK_COLR_VAL);
  168. }
  169. FOR_STL(TCDSFontName*, pObj, CDSFontManager->FFontNames)
  170. {
  171. m_pEdtDesigner->InitFontName(pObj->VMS_FONT_NAME_CD, pObj->VMS_FONT_NAME_NM);
  172. }
  173. }
  174. //---------------------------------------------------------------------------
  175. void __fastcall TFrmVmsMsgScheMngr::InitDbLoading()
  176. {
  177. Application->ProcessMessages();
  178. if (!VmsCtlrManager) {
  179. VmsCtlrManager = new TVmsCtlrManager();
  180. }
  181. VmsCtlrManager->LoadVmsModlSize();
  182. VmsCtlrManager->LoadFromDb();
  183. if(!CDSFontManager) {
  184. CDSFontManager = new TCDSFontManager();
  185. }
  186. CDSFontManager->LoadFontInfo();
  187. if (!VmsIfscManager) {
  188. VmsIfscManager = new TVmsIfscManager();
  189. }
  190. VmsIfscManager->LoadFromDb();
  191. if (!VmsDsplCndtManager) {
  192. VmsDsplCndtManager = new TVmsDsplCndtManager();
  193. }
  194. VmsDsplCndtManager->LoadFromDb();
  195. if (!VmsTextItemManager) {
  196. VmsTextItemManager = new TVmsTextItemManager();
  197. }
  198. VmsTextItemManager->LoadFromDb();
  199. LoadVmsFormDsplCndt();
  200. APP_InitDisplayColor();
  201. if (!CenterCommManager) {
  202. CenterCommManager = new TCenterCommManager();
  203. }
  204. CenterCommManager->LoadFromDb(g_AppCfg.PRCS_ID);
  205. FCommCtrlTarget = CenterCommManager->FLists.Find("22"); // VMS표출문안 등록 알림
  206. }
  207. //---------------------------------------------------------------------------
  208. void __fastcall TFrmVmsMsgScheMngr::FormShow(TObject *Sender)
  209. {
  210. int nResult = CComm_Initialize((long)Handle, g_AppCfg.PRCS_ID, "P04010", 0);
  211. Refresh();
  212. FormInit();
  213. ChangeEditMode(1);
  214. TmrShow->Enabled = true;
  215. }
  216. //---------------------------------------------------------------------------
  217. void __fastcall TFrmVmsMsgScheMngr::FormInit()
  218. {
  219. TvVmsSche->OptionsView->NoDataToDisplayInfoText = "<등록되어 있는 VMS 시나리오 정보가 없습니다>";
  220. TvSche->OptionsView->NoDataToDisplayInfoText = "<등록되어 있는 VMS 시나리오 구성 정보가 없습니다>";
  221. TvForm->OptionsView->NoDataToDisplayInfoText = "<등록되어 있는 메시지 폼 정보가 없습니다>";
  222. //VMS사이즈
  223. APP_FillVmsSizeType(CbSizeType, false);
  224. FNewDb = false;
  225. }
  226. //---------------------------------------------------------------------------
  227. void __fastcall TFrmVmsMsgScheMngr::TmrShowTimer(TObject *Sender)
  228. {
  229. TmrShow->Enabled = false;
  230. RefreshData();
  231. CbSizeType->ItemIndex = -1;
  232. CbSizeType->ItemIndex = 0;
  233. }
  234. //---------------------------------------------------------------------------
  235. void __fastcall TFrmVmsMsgScheMngr::BtnCloseClick(TObject *Sender)
  236. {
  237. Close();
  238. }
  239. //---------------------------------------------------------------------------
  240. void __fastcall TFrmVmsMsgScheMngr::FormClose(TObject *Sender, TCloseAction &Action)
  241. {
  242. CommClose();
  243. FrmVmsMsgScheMngr = NULL;
  244. Action = caFree;
  245. }
  246. //---------------------------------------------------------------------------
  247. void __fastcall TFrmVmsMsgScheMngr::FormCloseQuery(TObject *Sender, bool &CanClose)
  248. {
  249. if (FUpdate)
  250. {
  251. //POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_14, 0);
  252. }
  253. }
  254. //---------------------------------------------------------------------------
  255. void __fastcall TFrmVmsMsgScheMngr::ChangeEditMode(int AEdit)
  256. {
  257. bool bEnabled = false;
  258. switch(AEdit)
  259. {
  260. case 0: //편집버튼클릭
  261. {
  262. BtnEdit->Enabled = true;
  263. BtnInsert->Enabled = false;
  264. BtnDelete->Enabled = false;
  265. //BtnCopyAdd->Enabled = false;
  266. //BtnCopyAdd212->Enabled = false;
  267. BtnSave->Enabled = true;
  268. BtnEdit->Caption = "취소";//"취소";
  269. BtnEdit->Hint = "데이터 편집 취소";//데이터 편집 취소";
  270. EditMode = true;
  271. }
  272. break;
  273. case 1: //편집[취소]버튼클릭
  274. {
  275. FormClear(); //화면을 모두 지운다.
  276. BtnEdit->Enabled = false;
  277. BtnInsert->Enabled = true;
  278. BtnDelete->Enabled = false;
  279. //BtnCopyAdd->Enabled = false;
  280. //BtnCopyAdd212->Enabled = false;
  281. BtnSave->Enabled = false;
  282. BtnEdit->Caption = "편집";//"편집";
  283. BtnEdit->Hint = "데이터 편집";//데이터 편집";
  284. //bEnabled = true;
  285. EditMode = false;
  286. }
  287. break;
  288. case 2: //추가
  289. {
  290. BtnEdit->Enabled = true;
  291. BtnInsert->Enabled = false;
  292. BtnDelete->Enabled = false;
  293. //BtnCopyAdd->Enabled = false;
  294. //BtnCopyAdd212->Enabled = false;
  295. BtnSave->Enabled = true;
  296. BtnEdit->Caption = "취소";//"취소";
  297. BtnEdit->Hint = "데이터 편집 취소";//데이터 편집 취소";
  298. EditMode = true;
  299. //CbVms->Enabled = true;
  300. }
  301. break;
  302. case 3: //수정모드
  303. {
  304. BtnEdit->Enabled = true;
  305. BtnInsert->Enabled = true;
  306. BtnDelete->Enabled = true;
  307. //BtnCopyAdd->Enabled = true;
  308. //BtnCopyAdd212->Enabled = true;
  309. BtnSave->Enabled = false;
  310. BtnEdit->Caption = "편집";//"편집";
  311. BtnEdit->Hint = "데이터 편집";//데이터 편집";
  312. bEnabled = true;
  313. EditMode = false;
  314. }
  315. break;
  316. }
  317. if (AEdit == 0 || AEdit == 2) {
  318. }
  319. else {
  320. }
  321. BtnSaveScnr->Enabled = BtnDelete->Enabled;
  322. GrpList->Enabled = !EditMode;
  323. PnlScnrEdit->Enabled = EditMode;
  324. TvSche->OptionsData->Editing = EditMode;
  325. //PnlFormInfo->Enabled = EditMode;
  326. //PnlObjProperty->Enabled = EditMode;
  327. //PnlFormObjCmd->Enabled = EditMode;
  328. //BtnReApply->Enabled = EditMode;
  329. }
  330. //---------------------------------------------------------------------------
  331. void __fastcall TFrmVmsMsgScheMngr::ClearSymbloList()
  332. {
  333. FFormLists.RemoveAll();
  334. FFormBackLists.RemoveAll();
  335. for(int ii = 0; ii < FListSymb->Count; ii++)
  336. {
  337. Graphics::TBitmap *bitmap = (Graphics::TBitmap *)FListSymb->Items[ii];
  338. delete bitmap;
  339. }
  340. FListSymb->Clear();
  341. }
  342. //---------------------------------------------------------------------------
  343. void __fastcall TFrmVmsMsgScheMngr::BtnSearchClick(TObject *Sender)
  344. {
  345. RefreshData();
  346. EdFocus->SetFocus();
  347. ChangeEditMode(1);
  348. }
  349. //---------------------------------------------------------------------------
  350. void __fastcall TFrmVmsMsgScheMngr::ChangeEditFormPanel()
  351. {
  352. TVmsSizeType *pVmsSizeType = APP_GetVmsSizeTypeObject(CbSizeType);
  353. if (pVmsSizeType == NULL) return;
  354. FVmsTypeCd = pVmsSizeType->TypeCd;
  355. FVmsWidth = pVmsSizeType->Width;
  356. FVmsHeight = pVmsSizeType->Height;
  357. //LockWindowUpdate(PnlPreview->Handle);
  358. PnlPreview->Width = FVmsWidth+4;
  359. PnlPreview->Height= FVmsHeight+4;
  360. ImgPreview->Align = alNone;
  361. ImgPreview->Picture->Bitmap->Width = FVmsWidth;
  362. ImgPreview->Picture->Bitmap->Height= FVmsHeight;
  363. APP_ImageClear(ImgPreview->Canvas, 0, 0, ImgPreview->Width, ImgPreview->Height, clBlack);
  364. ImgPreview->Align = alClient;
  365. //LockWindowUpdate(0);
  366. PnlEdtBack->Width = FVmsWidth+4;
  367. PnlEdtBack->Height= FVmsHeight+4;
  368. m_pEdtDesigner->Clear();
  369. m_pEdtDesigner->SizeType = FVmsTypeCd;
  370. m_pEdtDesigner->SetSize(FVmsWidth, FVmsHeight);
  371. m_pEdtDesigner->SetPos(0, 0);
  372. m_pEdtDesigner->BkColorCode = "00";
  373. m_pEdtDesigner->EditMode = true;
  374. m_pEdtDesigner->Show();
  375. }
  376. //---------------------------------------------------------------------------
  377. void __fastcall TFrmVmsMsgScheMngr::RefreshData()
  378. {
  379. FormClear();
  380. FillVmsCombo();
  381. ChangeEditFormPanel();
  382. //LoadVmsFormList(FVmsTypeCd);
  383. //ChkAutoWidthPropertiesChange((TObject*)ChkAutoWidth);
  384. }
  385. //---------------------------------------------------------------------------
  386. void __fastcall TFrmVmsMsgScheMngr::FillVmsCombo()
  387. {
  388. TNotifyEvent evt = CbVms->Properties->OnChange;
  389. CbVms->Properties->OnChange = NULL;
  390. CbVms->Properties->Items->Clear();
  391. FOR_STL(TVmsCtlr*, pObj, VmsCtlrManager->FLists) {
  392. CbVms->Properties->Items->Add(" [" + pObj->VMS_CTLR_ID + "] " + pObj->VMS_NM);
  393. }
  394. CbVms->ItemIndex = -1;
  395. CbVms->Properties->OnChange = evt;
  396. CbVms->ItemIndex = 0;
  397. }
  398. //---------------------------------------------------------------------------
  399. void __fastcall TFrmVmsMsgScheMngr::FormClear()
  400. {
  401. FSelIdx = -1;
  402. EdScnrId->Clear();
  403. EdScnrNm->Clear();
  404. CMM_ClearGridTableView(TvSche);
  405. CMM_ClearGridTableView(TvPreview);
  406. //LockWindowUpdate(GrpPreview->Handle);
  407. APP_ImageClear(ImgPreview->Canvas, 0, 0, ImgPreview->Width, ImgPreview->Height, clBlack);
  408. //LockWindowUpdate(0);
  409. GrpSchedule->Caption = "▶ VMS 시나리오 설정";
  410. FNewDb = false;
  411. }
  412. //---------------------------------------------------------------------------
  413. void __fastcall TFrmVmsMsgScheMngr::DisplayInfo()
  414. {
  415. FormClear();
  416. FSelIdx = CMM_GetRecordIndex(TvVmsSche);
  417. if (FSelIdx < 0) return;
  418. TcxDataController *pGDC = TvVmsSche->DataController;
  419. String sScnrId = VarToStr(pGDC->Values[FSelIdx][ColScnrId->Index]);
  420. String sScnrNm = VarToStr(pGDC->Values[FSelIdx][ColScnrNm->Index]);
  421. EdScnrId->Text = sScnrId;
  422. EdScnrNm->Text = sScnrNm;
  423. GrpSchedule->Caption = "▶ VMS 시나리오 설정 (" + sScnrId + ": " + sScnrNm + ")";
  424. LoadVmsScenarionForm(FSelVmsCtlrId, sScnrId);
  425. ChangeEditMode(3);
  426. }
  427. //---------------------------------------------------------------------------
  428. void __fastcall TFrmVmsMsgScheMngr::BtnListAddClick(TObject *Sender)
  429. {
  430. String sScnrId = EdScnrId->Text;
  431. if (sScnrId.IsEmpty()) return;
  432. int nFormIdx = CMM_GetRecordIndex(TvForm);
  433. if (nFormIdx < 0) return;
  434. TcxGridDataController *pDcFrm = TvForm->DataController;
  435. TcxGridDataController *pDcSch = TvSche->DataController;
  436. int nRowS = pDcSch->AppendRecord();
  437. String VMS_SCNR_ID = sScnrId;
  438. int FORM_SN = nRowS+1;
  439. String VMS_FORM_ID = VarToStr(pDcFrm->Values[nFormIdx][ColFrm00->Index]);
  440. String TXT_FORM_APLY_VMS_SECT_ID = "";
  441. String VMS_FORM_DSPL_CNDT_ID = FORM_DSPL_CNDT_DEFAULT;
  442. int DSPL_HR = VarToStr(pDcFrm->Values[nFormIdx][ColFrm03->Index]).ToIntDef(5);
  443. String VMS_MODL_KIND = VarToStr(pDcFrm->Values[nFormIdx][ColFrm08->Index]);
  444. String VMS_FORM_TYPE = VarToStr(pDcFrm->Values[nFormIdx][ColFrm07->Index]);
  445. String VMS_FORM_NM = VarToStr(pDcFrm->Values[nFormIdx][ColFrm02->Index]);
  446. String VMS_FORM_DSPL_CNDT_NM = "";
  447. FMaxFormSn++;
  448. pDcSch->Values[nRowS][Col00->Index] = VMS_FORM_ID;
  449. pDcSch->Values[nRowS][Col01->Index] = pDcFrm->Values[nFormIdx][ColFrm01->Index];
  450. pDcSch->Values[nRowS][Col02->Index] = VMS_FORM_NM;
  451. pDcSch->Values[nRowS][Col03->Index] = DSPL_HR;
  452. pDcSch->Values[nRowS][Col04->Index] = TXT_FORM_APLY_VMS_SECT_ID;
  453. pDcSch->Values[nRowS][Col05->Index] = VMS_FORM_DSPL_CNDT_ID;
  454. pDcSch->Values[nRowS][Col06->Index] = VMS_MODL_KIND;
  455. pDcSch->Values[nRowS][Col07->Index] = VMS_FORM_TYPE;
  456. pDcSch->Values[nRowS][ColDsplCndtId->Index] = VMS_FORM_DSPL_CNDT_ID;
  457. pDcSch->Values[nRowS][ColDsplCndtNm->Index] = VMS_FORM_DSPL_CNDT_NM;
  458. pDcSch->Values[nRowS][ColFormSn->Index] = FMaxFormSn;
  459. DrawVmsScenarionForm(pDcSch, nRowS);
  460. TVmsFormScnr *pVmsScnr = new TVmsFormScnr(FMaxFormSn);
  461. FVmsScnrLists.Push(pVmsScnr->FORM_SN, pVmsScnr);
  462. InitVmsScnrFormObject(FSelVmsCtlrId, EdScnrId->Text, VMS_FORM_ID, pVmsScnr);
  463. CMM_SetGridRow(CxSche, TvSche, FMaxFormSn, ColFormSn->Index);
  464. EditScenarioInfo();
  465. }
  466. //---------------------------------------------------------------------------
  467. void __fastcall TFrmVmsMsgScheMngr::BtnListDeleteClick(TObject *Sender)
  468. {
  469. #if 0
  470. int nSelIdx = CMM_GetRecordIndex(TvSche);
  471. if (nSelIdx < 0) return;
  472. TvSche->DataController->DeleteRecord(nSelIdx);
  473. #endif
  474. TcxGridTableView *pSrcList = TvSche;
  475. int nFocused = pSrcList->Controller->FocusedRecordIndex;
  476. int nSelRows = pSrcList->Controller->SelectedRowCount;
  477. if (nSelRows <= 0) {
  478. return;
  479. }
  480. try {
  481. TcxGridDataController *pGDC = pSrcList->DataController;
  482. pSrcList->BeginUpdate();
  483. try {
  484. pSrcList->Controller->DeleteSelection();
  485. int nDataCnt = pSrcList->DataController->RecordCount;
  486. if (nDataCnt <= nFocused)
  487. nFocused = nDataCnt - 1;
  488. pSrcList->Controller->ClearSelection();
  489. }
  490. catch(...) {
  491. }
  492. }
  493. __finally {
  494. pSrcList->EndUpdate();
  495. }
  496. }
  497. //---------------------------------------------------------------------------
  498. void __fastcall TFrmVmsMsgScheMngr::EditScenarioInfo()
  499. {
  500. int nSelIdx = CMM_GetRecordIndex(TvSche);
  501. if (nSelIdx < 0) return;
  502. TcxDataController *pGDC = TvSche->DataController;
  503. String sVmsScnrId = EdScnrId->Text;
  504. String sVmsFormId = VarToStr(pGDC->Values[nSelIdx][Col00->Index]);
  505. String sVmsFormNm = VarToStr(pGDC->Values[nSelIdx][Col02->Index]);
  506. int nDsplHh = VarToStr(pGDC->Values[nSelIdx][Col03->Index]).ToIntDef(0);
  507. int nFormSn = VarToStr(pGDC->Values[nSelIdx][ColFormSn->Index]).ToIntDef(0);
  508. String sDsplCndtId = VarToStr(pGDC->Values[nSelIdx][ColDsplCndtId->Index]);
  509. String sDsplCndtNm = VarToStr(pGDC->Values[nSelIdx][ColDsplCndtNm->Index]);
  510. TVMSM610M *pSetForm = new TVMSM610M(this);
  511. pSetForm->FEditMode = EditMode;
  512. pSetForm->FVmsCtlrId = FSelVmsCtlrId;
  513. pSetForm->FScnrId = sVmsScnrId;
  514. pSetForm->FFormId = sVmsFormId;
  515. pSetForm->FFormSn = nFormSn;
  516. pSetForm->FDsplHh = nDsplHh;
  517. pSetForm->FDsplCndtId = sDsplCndtId;
  518. pSetForm->FDsplCndtNm = sDsplCndtNm;
  519. pSetForm->FVmsTypeCd = FVmsTypeCd;
  520. pSetForm->FVmsWidth = FVmsWidth;
  521. pSetForm->FVmsHeight = FVmsHeight;
  522. pSetForm->ShowModal();
  523. if (pSetForm->FSelected) {
  524. pGDC->Values[nSelIdx][Col03->Index] = pSetForm->FDsplHh;
  525. pGDC->Values[nSelIdx][ColDsplCndtId->Index] = pSetForm->FDsplCndtId;
  526. pGDC->Values[nSelIdx][ColDsplCndtNm->Index] = pSetForm->FDsplCndtNm;
  527. TStream *pImgStream = new TMemoryStream();
  528. try {
  529. void *p;
  530. Variant v;
  531. pSetForm->ImgForm->Picture->Bitmap->SaveToStream(pImgStream);
  532. int aBound[]={0, pImgStream->Size - 1};
  533. v = VarArrayCreate(aBound, 1, varByte);
  534. p = VarArrayLock(v);
  535. pImgStream->Position = 0;
  536. pImgStream->Read(p, pImgStream->Size);
  537. VarArrayUnlock(v);
  538. pGDC->Values[nSelIdx][Col01->Index] = v;
  539. TFormImage *pImage = FFormRealLists.Find(nFormSn);
  540. if (pImage != NULL) {
  541. try {
  542. pImage->bitmap->Assign(pSetForm->ImgForm->Picture->Bitmap);
  543. }
  544. catch(Exception &e) {
  545. }
  546. }
  547. }
  548. __finally {
  549. SAFE_DELETE(pImgStream);
  550. }
  551. LoadPreviewFormReal(sVmsFormId, nFormSn);
  552. }
  553. delete pSetForm;
  554. pSetForm = NULL;
  555. }
  556. //---------------------------------------------------------------------------
  557. void __fastcall TFrmVmsMsgScheMngr::TvScheCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo,
  558. TMouseButton AButton, TShiftState AShift,
  559. bool &AHandled)
  560. {
  561. if (!ACellViewInfo) return;
  562. EditScenarioInfo();
  563. }
  564. //---------------------------------------------------------------------------
  565. void __fastcall TFrmVmsMsgScheMngr::BtnSaveClick(TObject *Sender)
  566. {
  567. if (FSelVmsCtlrId.IsEmpty()) {
  568. Application->MessageBox(L"VMS 스케줄 저장\r\nVMS 정보를 선택하세요.",
  569. FTitle.c_str(),
  570. MB_OK|MB_ICONERROR|MB_APPLMODAL);
  571. return;
  572. }
  573. String sMsg;
  574. String sScnrId = EdScnrId->Text.Trim();
  575. if (sScnrId.IsEmpty()) {
  576. Application->MessageBox(L"VMS 스케줄 저장\r\nVMS 시나리오 ID를 입력하세요.",
  577. FTitle.c_str(),
  578. MB_OK|MB_ICONERROR|MB_APPLMODAL);
  579. ActiveControl = EdScnrId;
  580. return;
  581. }
  582. String sScnrNm = EdScnrNm->Text.Trim();
  583. if (sScnrNm.IsEmpty()) {
  584. Application->MessageBox(L"VMS 스케줄 저장\r\nVMS 시나리오 이름을 입력하세요.",
  585. FTitle.c_str(),
  586. MB_OK|MB_ICONERROR|MB_APPLMODAL);
  587. ActiveControl = EdScnrNm;
  588. return;
  589. }
  590. if (AnsiString(sScnrNm).Length() > 32) {
  591. Application->MessageBox(L"VMS 스케줄 저장\r\n시나리오 명칭은 32Byte를 초과할 수 없습니다.",
  592. FTitle.c_str(),
  593. MB_OK|MB_ICONERROR|MB_APPLMODAL);
  594. ActiveControl = EdScnrNm;
  595. return;
  596. }
  597. TcxGridDataController *pGDC = TvSche->DataController;
  598. if (pGDC->DataRowCount <= 0) {
  599. sMsg = "*************************************************************\r\n"
  600. "VMS 시나리오 구성 정보가 없습니다.\r\n"
  601. "VMS 시나리오 정보를 저장 하시겠습니까?\r\n"
  602. "*************************************************************";
  603. if (Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_YESNO|MB_ICONERROR|MB_APPLMODAL) != IDYES) return;
  604. }
  605. bool bResult;
  606. /////////////////////////////////// 시나리오 정보 저장
  607. ITSDb_GetConnection()->BeginTrans();
  608. bResult = SaveVmsScnr(FSelVmsCtlrId, sScnrId, sScnrNm);
  609. if (!bResult) {
  610. ITSDb_GetConnection()->RollbackTrans();
  611. return;
  612. }
  613. bResult = DeleteVmsScenario(FSelVmsCtlrId, sScnrId, false);
  614. if (!bResult) {
  615. ITSDb_GetConnection()->RollbackTrans();
  616. return;
  617. }
  618. bResult = SaveVmsScenarioForm(FSelVmsCtlrId, sScnrId);
  619. if (!bResult) {
  620. ITSDb_GetConnection()->RollbackTrans();
  621. return;
  622. }
  623. bResult = SaveVmsScenarioFormObj(FSelVmsCtlrId, sScnrId);
  624. if (!bResult) {
  625. ITSDb_GetConnection()->RollbackTrans();
  626. return;
  627. }
  628. if (bResult) {
  629. ITSDb_GetConnection()->CommitTrans();
  630. if (FCommCtrlTarget != NULL) {
  631. FOR_STL(TCommInfo*, pCommInfo, FCommCtrlTarget->FLists) {
  632. int sendResult = CComm_VmsNotiRegDsplMsg(pCommInfo->SRVR_IP, pCommInfo->CMNC_PORT);
  633. if (VERR_NONE == sendResult) {
  634. }
  635. Sleep(200);
  636. }
  637. }
  638. Application->MessageBox(L"VMS 스케줄 저장\r\nVMS 시나리오 정보를 저장 하였습니다.",
  639. FTitle.c_str(),
  640. MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  641. FUpdate = true;
  642. LoadVmsScenario(FSelVmsCtlrId);
  643. CMM_SetGridRow(CxVmsSche, TvVmsSche, sScnrId, ColScnrId->Index);
  644. //DisplayInfo();
  645. }
  646. else {
  647. ITSDb_GetConnection()->RollbackTrans();
  648. }
  649. }
  650. //---------------------------------------------------------------------------
  651. bool __fastcall TFrmVmsMsgScheMngr::SaveVmsScnr(String AVmsCtlrId, String AScnrId, String AScnrNm)
  652. {
  653. bool bResult = false;
  654. String sQry;
  655. TADOQuery *pADO = NULL;
  656. sQry = "MERGE INTO TB_VMS_SCNR L \r\n"
  657. "USING (SELECT \r\n"
  658. " :p01 AS VMS_CTLR_ID, \r\n"
  659. " :p02 AS VMS_SCNR_ID, \r\n"
  660. " :p03 AS VMS_SCNR_NM, \r\n"
  661. " :p04 AS OPER_ID \r\n"
  662. " FROM DUAL) M \r\n"
  663. " ON (L.VMS_CTLR_ID = M.VMS_CTLR_ID \r\n"
  664. " AND L.VMS_SCNR_ID = M.VMS_SCNR_ID) \r\n"
  665. "WHEN MATCHED THEN \r\n"
  666. " UPDATE SET \r\n"
  667. " L.VMS_SCNR_NM = M.VMS_SCNR_NM, \r\n"
  668. " L.CHNGR_ID = M.OPER_ID, \r\n"
  669. " L.CHG_DT = SYSDATE \r\n"
  670. "WHEN NOT MATCHED THEN \r\n"
  671. " INSERT ( \r\n"
  672. " VMS_CTLR_ID, \r\n"
  673. " VMS_SCNR_ID, \r\n"
  674. " VMS_SCNR_NM, \r\n"
  675. " RGSTR_ID, \r\n"
  676. " REG_DT ) \r\n"
  677. " VALUES ( \r\n"
  678. " M.VMS_CTLR_ID, \r\n"
  679. " M.VMS_SCNR_ID, \r\n"
  680. " M.VMS_SCNR_NM, \r\n"
  681. " M.OPER_ID, \r\n"
  682. " SYSDATE ) \r\n";
  683. try {
  684. try {
  685. pADO = new TADOQuery(NULL);
  686. pADO->Close();
  687. pADO->Connection = ITSDb_GetConnection();
  688. ITSDb_SQLText(pADO, sQry);
  689. pADO->Parameters->ParamByName("p01")->Value = AVmsCtlrId;
  690. pADO->Parameters->ParamByName("p02")->Value = AScnrId;
  691. pADO->Parameters->ParamByName("p03")->Value = AScnrNm;
  692. pADO->Parameters->ParamByName("p04")->Value = g_AppCfg.OPER_ID;
  693. pADO->ExecSQL();
  694. }
  695. catch(EDatabaseError &E) {
  696. DBERRORMSG("TFrmVmsMsgScheMngr::SaveVmsScnr", String(E.ClassName()), E.Message, sQry);
  697. return false;
  698. }
  699. catch(Exception &e) {
  700. DBERRORMSG("TFrmVmsMsgScheMngr::SaveVmsScnr", String(e.ClassName()), e.Message, sQry);
  701. return false;
  702. }
  703. }
  704. __finally {
  705. if (pADO) {
  706. pADO->Close();
  707. delete pADO;
  708. }
  709. }
  710. return true;
  711. }
  712. //---------------------------------------------------------------------------
  713. bool __fastcall TFrmVmsMsgScheMngr::SaveVmsScenario(String AVmsNmbr, TcxGridTableView *AListSch)
  714. {
  715. bool bResult = false;
  716. return bResult;
  717. }
  718. //---------------------------------------------------------------------------
  719. void __fastcall TFrmVmsMsgScheMngr::BtnUpClick(TObject *Sender)
  720. {
  721. try
  722. {
  723. TvSche->BeginUpdate();
  724. int nCurIdx = TvSche->DataController->FocusedRowIndex;//FocusedRecordIndex;
  725. if (nCurIdx <= 0)
  726. {
  727. return;
  728. }
  729. int nUpIdx = nCurIdx-1;
  730. try
  731. {
  732. int nCols = TvSche->ColumnCount;
  733. for (int ii = 0; ii < nCols; ii++)
  734. {
  735. Variant va = TvSche->DataController->Values[nCurIdx][ii];
  736. TvSche->DataController->Values[nCurIdx][ii] = TvSche->DataController->Values[nUpIdx][ii];
  737. TvSche->DataController->Values[nUpIdx][ii] = va;
  738. }
  739. TvSche->Controller->ClearSelection();
  740. TvSche->Controller->FocusedRowIndex = nUpIdx;
  741. TvSche->ViewData->Records[nUpIdx]->Focused = true;
  742. TvSche->ViewData->Records[nUpIdx]->Selected = true;
  743. CxSche->SetFocus();
  744. }
  745. catch(...)
  746. {
  747. }
  748. }
  749. __finally
  750. {
  751. TvSche->EndUpdate();
  752. }
  753. }
  754. //---------------------------------------------------------------------------
  755. void __fastcall TFrmVmsMsgScheMngr::BtnDownClick(TObject *Sender)
  756. {
  757. try
  758. {
  759. TvSche->BeginUpdate();
  760. int nCurIdx = TvSche->DataController->FocusedRowIndex;//FocusedRecordIndex;
  761. if (nCurIdx < 0)
  762. {
  763. return;
  764. }
  765. if (nCurIdx == TvSche->DataController->RecordCount-1)
  766. {
  767. return;
  768. }
  769. int nDnIdx = nCurIdx+1;
  770. try
  771. {
  772. int nCols = TvSche->ColumnCount;
  773. for (int ii = 0; ii < nCols; ii++)
  774. {
  775. Variant va = TvSche->DataController->Values[nCurIdx][ii];
  776. TvSche->DataController->Values[nCurIdx][ii] = TvSche->DataController->Values[nDnIdx][ii];
  777. TvSche->DataController->Values[nDnIdx][ii] = va;
  778. }
  779. TvSche->Controller->ClearSelection();
  780. TvSche->Controller->FocusedRowIndex = nDnIdx;
  781. TvSche->ViewData->Records[nDnIdx]->Focused = true;
  782. TvSche->ViewData->Records[nDnIdx]->Selected = true;
  783. CxSche->SetFocus();
  784. }
  785. catch(...)
  786. {
  787. }
  788. }
  789. __finally
  790. {
  791. TvSche->EndUpdate();
  792. }
  793. }
  794. //---------------------------------------------------------------------------
  795. void __fastcall TFrmVmsMsgScheMngr::BtnBestFitClick(TObject *Sender)
  796. {
  797. try
  798. {
  799. LockWindowUpdate(Handle);
  800. TvSche->BeginUpdate();
  801. TvSche->ApplyBestFit(NULL, false, false);
  802. }
  803. __finally
  804. {
  805. TvSche->EndUpdate();
  806. LockWindowUpdate(0);
  807. }
  808. }
  809. //---------------------------------------------------------------------------
  810. void __fastcall TFrmVmsMsgScheMngr::Col05CustomDrawCell(TcxCustomGridTableView *Sender, TcxCanvas *ACanvas, TcxGridTableDataCellViewInfo *AViewInfo,
  811. bool &ADone)
  812. {
  813. int nRecordIdx = AViewInfo->GridRecord->RecordIndex;
  814. if (nRecordIdx < 0)
  815. {
  816. return;
  817. }
  818. try
  819. {
  820. int nItemIdx = AViewInfo->Item->Index;
  821. if (VarIsNull(AViewInfo->GridRecord->DisplayTexts[nItemIdx])) return;
  822. String sEndDt = AViewInfo->GridRecord->DisplayTexts[nItemIdx];
  823. if (sEndDt < Now().FormatString(STR_HHNN))
  824. {
  825. ACanvas->Canvas->Brush->Color = clSilver;
  826. }
  827. }
  828. catch(Exception &e)
  829. {
  830. }
  831. }
  832. //---------------------------------------------------------------------------
  833. void __fastcall TFrmVmsMsgScheMngr::Col00CustomDrawCell(TcxCustomGridTableView *Sender, TcxCanvas *ACanvas, TcxGridTableDataCellViewInfo *AViewInfo,
  834. bool &ADone)
  835. {
  836. #if 0
  837. int nRecordIdx = AViewInfo->GridRecord->RecordIndex;
  838. if (nRecordIdx < 0)
  839. {
  840. return;
  841. }
  842. try
  843. {
  844. if (VarToStr(AViewInfo->GridRecord->DisplayTexts[15]).ToIntDef(0) != eFormTp_congest)
  845. {
  846. return;
  847. }
  848. if (VarIsNull(AViewInfo->GridRecord->DisplayTexts[9]))
  849. {
  850. ACanvas->Canvas->Brush->Color = clRed;
  851. }
  852. else
  853. {
  854. String IFSC_ID = AViewInfo->GridRecord->DisplayTexts[9].Trim();
  855. if (IFSC_ID == "" || IFSC_ID == "0")
  856. {
  857. ACanvas->Canvas->Brush->Color = clRed;
  858. }
  859. }
  860. }
  861. catch(Exception &e)
  862. {
  863. }
  864. #endif
  865. }
  866. //---------------------------------------------------------------------------
  867. void __fastcall TFrmVmsMsgScheMngr::Col06CustomDrawCell(TcxCustomGridTableView *Sender, TcxCanvas *ACanvas, TcxGridTableDataCellViewInfo *AViewInfo,
  868. bool &ADone)
  869. {
  870. int nRecordIdx = AViewInfo->GridRecord->RecordIndex;
  871. if (nRecordIdx < 0)
  872. {
  873. return;
  874. }
  875. try
  876. {
  877. int nItemIdx = AViewInfo->Item->Index;
  878. if (VarIsNull(AViewInfo->GridRecord->DisplayTexts[nItemIdx])) return;
  879. String sUseYn = AViewInfo->GridRecord->DisplayTexts[nItemIdx];
  880. if (sUseYn == "N")
  881. {
  882. ACanvas->Canvas->Brush->Color = clRed;
  883. }
  884. }
  885. catch(Exception &e)
  886. {
  887. }
  888. }
  889. //---------------------------------------------------------------------------
  890. void __fastcall TFrmVmsMsgScheMngr::CbVmsPropertiesChange(TObject *Sender)
  891. {
  892. if (CbVms->ItemIndex < 0) return;
  893. FSelVmsCtlrId = APP_GetCode(CbVms);
  894. FormClear();
  895. TVmsCtlr *pVmsCtlr = VmsCtlrManager->FLists.Find(FSelVmsCtlrId);
  896. if (pVmsCtlr == NULL) {
  897. Application->MessageBox(L"VMS 스케줄 저장\r\n알수 없는 VMS 정보 입니다.",
  898. FTitle.c_str(),
  899. MB_OK|MB_ICONERROR|MB_APPLMODAL);
  900. ActiveControl = CbVms;
  901. return;
  902. }
  903. String sVmsModlType = pVmsCtlr->VMS_MODL_KIND;
  904. if (FSelVmsModlType != sVmsModlType) {
  905. FSelVmsModlType = sVmsModlType;
  906. APP_SetCode(CbSizeType, FSelVmsModlType);
  907. ChangeEditFormPanel();
  908. LoadVmsFormList(sVmsModlType);
  909. TvPreview->OptionsView->DataRowHeight = FVmsHeight;
  910. if (TvPreview->OptionsView->DataRowHeight < 48) {
  911. TvPreview->OptionsView->DataRowHeight = 48;
  912. }
  913. if (TvPreview->OptionsView->DataRowHeight > 144) {
  914. TvPreview->OptionsView->DataRowHeight = 144;
  915. }
  916. }
  917. LoadVmsScenario(FSelVmsCtlrId);
  918. ChangeEditMode(1);
  919. CxVmsSche->SetFocus();
  920. }
  921. //---------------------------------------------------------------------------
  922. bool __fastcall TFrmVmsMsgScheMngr::LoadVmsScenario(String AVMS_CTLR_ID)
  923. {
  924. FVmsScnrLists.RemoveAll();
  925. FFormRealLists.RemoveAll();
  926. CMM_ClearGridTableView(TvVmsSche);
  927. CMM_ClearGridTableView(TvPreview);
  928. String sQry;
  929. TADOQuery *pADO = NULL;
  930. sQry = "SELECT A.VMS_CTLR_ID, A.VMS_SCNR_ID, A.VMS_SCNR_NM \r\n"
  931. " FROM TB_VMS_SCNR A \r\n"
  932. " WHERE 1=1 \r\n"
  933. " AND VMS_CTLR_ID = :p01 \r\n"
  934. " ORDER BY A.VMS_CTLR_ID, A.VMS_SCNR_ID \r\n";
  935. try {
  936. TvVmsSche->BeginUpdate();
  937. TcxDataController *pGDC = TvVmsSche->DataController;
  938. int nRow;
  939. try {
  940. pADO = new TADOQuery(NULL);
  941. pADO->Close();
  942. pADO->Connection = ITSDb_GetConnection();
  943. ITSDb_SQLText(pADO, sQry);
  944. ITSDb_SQLBind(pADO, "p01", AVMS_CTLR_ID);
  945. ITSDb_SQLOpen(pADO);
  946. for( ; !pADO->Eof; pADO->Next()) {
  947. nRow = pGDC->AppendRecord();
  948. pGDC->Values[nRow][ColScnrId->Index] = pADO->FieldByName("VMS_SCNR_ID")->AsString;
  949. pGDC->Values[nRow][ColScnrNm->Index] = pADO->FieldByName("VMS_SCNR_NM")->AsString;
  950. }
  951. }
  952. catch(EDatabaseError &E)
  953. {
  954. DBERRORMSG("TFrmVmsMsgScheMngr::LoadVmsScenario", String(E.ClassName()), E.Message, sQry);
  955. return false;
  956. }
  957. catch(Exception &e)
  958. {
  959. DBERRORMSG("TFrmVmsMsgScheMngr::LoadVmsScenario", String(e.ClassName()), e.Message, sQry);
  960. return false;
  961. }
  962. }
  963. __finally {
  964. if (pADO) {
  965. pADO->Close();
  966. delete pADO;
  967. }
  968. TvVmsSche->EndUpdate();
  969. }
  970. return true;
  971. }
  972. //---------------------------------------------------------------------------
  973. void __fastcall TFrmVmsMsgScheMngr::BtnEditClick(TObject *Sender)
  974. {
  975. if (BtnEdit->Caption == "편집") {
  976. ChangeEditMode(0);
  977. FNewDb = false;
  978. }
  979. else {
  980. String sScnrId = EdScnrId->Text;
  981. ChangeEditMode(1);
  982. if (CMM_FindGridData(TvVmsSche->DataController, sScnrId, ColScnrId->Index) >= 0) {
  983. CMM_SetGridRow(CxVmsSche, TvVmsSche, sScnrId, ColScnrId->Index);
  984. DisplayScenarioInfo();
  985. }
  986. }
  987. }
  988. //---------------------------------------------------------------------------
  989. void __fastcall TFrmVmsMsgScheMngr::BtnInsertClick(TObject *Sender)
  990. {
  991. String newFormId = GetNextVmsScnrId(FSelVmsCtlrId);
  992. FormClear();
  993. EdScnrId->Text = newFormId;
  994. ChangeEditMode(2);
  995. FNewDb = true;
  996. FVmsScnrLists.RemoveAll();
  997. FFormRealLists.RemoveAll();
  998. //폼유형을 설정
  999. //APP_SetCode(CbFormType, sFormType);
  1000. //CbFormDsplEff->ItemIndex = CbFormDsplEff->Properties->Items->Count-1;
  1001. EdScnrNm->SetFocus();
  1002. }
  1003. //---------------------------------------------------------------------------
  1004. void __fastcall TFrmVmsMsgScheMngr::BtnDeleteClick(TObject *Sender)
  1005. {
  1006. int nIdx = TvVmsSche->DataController->FocusedRecordIndex;
  1007. if (nIdx < 0) return;
  1008. String sScnrId = EdScnrId->Text;
  1009. if (sScnrId.IsEmpty()) {
  1010. Application->MessageBox(L"VMS 스케줄 삭제\r\n삭제할 VMS 스케줄을 목록에서 선택하세요.",
  1011. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  1012. if (CxVmsSche->Enabled) CxVmsSche->SetFocus();
  1013. return;
  1014. }
  1015. if (CheckScenarioUse(sScnrId)) {
  1016. return;
  1017. }
  1018. String sMsg;
  1019. sMsg = "VMS 시나리오 ID: " + sScnrId;
  1020. sMsg+= "\r\n선택하신 VMS 시나리오 정보를 삭제하시겠습니까?";
  1021. if (Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES) return;
  1022. ITSDb_GetConnection()->BeginTrans();
  1023. if (DeleteVmsScenario(FSelVmsCtlrId, sScnrId, true))
  1024. {
  1025. ITSDb_GetConnection()->CommitTrans();
  1026. FUpdate = true;
  1027. Application->MessageBox(L"VMS 시나리오 삭제\r\nVMS 시나리오 정보를 삭제 하였습니다.",
  1028. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  1029. FormClear();
  1030. ChangeEditMode(1);
  1031. LoadVmsScenario(FSelVmsCtlrId);
  1032. }
  1033. else {
  1034. ITSDb_GetConnection()->RollbackTrans();
  1035. }
  1036. }
  1037. //---------------------------------------------------------------------------
  1038. void __fastcall TFrmVmsMsgScheMngr::TvVmsScheFocusedRecordChanged(TcxCustomGridTableView *Sender, TcxCustomGridRecord *APrevFocusedRecord,
  1039. TcxCustomGridRecord *AFocusedRecord, bool ANewItemRecordFocusingChanged)
  1040. {
  1041. if (!AFocusedRecord) return;
  1042. DisplayScenarioInfo();
  1043. }
  1044. //---------------------------------------------------------------------------
  1045. void __fastcall TFrmVmsMsgScheMngr::DisplayScenarioInfo()
  1046. {
  1047. LockWindowUpdate(Handle);
  1048. FormClear();
  1049. FVmsScnrLists.RemoveAll();
  1050. FFormRealLists.RemoveAll();
  1051. FSelIdx = CMM_GetRecordIndex(TvVmsSche);
  1052. if (FSelIdx < 0) return;
  1053. TcxDataController *pGDC = TvVmsSche->DataController;
  1054. String sScnrId = VarToStr(pGDC->Values[FSelIdx][ColScnrId->Index]);
  1055. String sScnrNm = VarToStr(pGDC->Values[FSelIdx][ColScnrNm->Index]);
  1056. EdScnrId->Text = sScnrId;
  1057. EdScnrNm->Text = sScnrNm;
  1058. GrpSchedule->Caption = "▶ VMS 시나리오 설정 (" + sScnrId + ": " + sScnrNm + ")";
  1059. LoadVmsScenarionForm(FSelVmsCtlrId, sScnrId);
  1060. DrawVmsScenarionForm();
  1061. ChangeEditMode(3);
  1062. LockWindowUpdate(0);
  1063. }
  1064. //---------------------------------------------------------------------------
  1065. void __fastcall TFrmVmsMsgScheMngr::DrawVmsScenarionForm()
  1066. {
  1067. TcxGridTableView *pGrid = TvSche;
  1068. if (!pGrid) return;
  1069. String imageFilePath;
  1070. String saveDirPath = TPath::GetTempPath() + "VMS-FORM\\";
  1071. ForceDirectories(saveDirPath.c_str());
  1072. TcxDataController *pGDC = pGrid->DataController;
  1073. try
  1074. {
  1075. pGrid->BeginUpdate();
  1076. pGDC->BeginUpdate();
  1077. int nRows = pGDC->RecordCount;
  1078. try {
  1079. for (int ii = 0; ii < nRows; ii++)
  1080. {
  1081. DrawVmsScenarionForm(pGDC, ii);
  1082. }
  1083. }
  1084. catch(Exception &e)
  1085. {
  1086. }
  1087. }
  1088. __finally
  1089. {
  1090. pGDC->EndUpdate();
  1091. pGrid->EndUpdate();
  1092. }
  1093. }
  1094. //---------------------------------------------------------------------------
  1095. void __fastcall TFrmVmsMsgScheMngr::DrawFormObject(TVmsFormDesigner *AEdtDesigner, TFormObj *AFormObj, TVmsFormScnr *AVmsScnr, int AObjSeq)
  1096. {
  1097. bool isDisplay = false;
  1098. if (AFormObj->VMS_TXT_ITEM_ID == "C1001" || // 도로명
  1099. AFormObj->VMS_TXT_ITEM_ID == "C1002" || // 시점명
  1100. AFormObj->VMS_TXT_ITEM_ID == "C1003" || // 종점명
  1101. AFormObj->VMS_TXT_ITEM_ID == "C2001" || // 소통상황
  1102. AFormObj->VMS_TXT_ITEM_ID == "C2002" || // 시간
  1103. AFormObj->VMS_TXT_ITEM_ID == "C2003" || // 속도
  1104. AFormObj->VMS_TXT_ITEM_ID == "C3001" || // 우회-도로명
  1105. AFormObj->VMS_TXT_ITEM_ID == "C3002" || // 우회-시점명
  1106. AFormObj->VMS_TXT_ITEM_ID == "C3003" || // 우회-종점명
  1107. AFormObj->VMS_TXT_ITEM_ID == "C4001" || // 우회-소통상황
  1108. AFormObj->VMS_TXT_ITEM_ID == "C4002" || // 우회-시간
  1109. AFormObj->VMS_TXT_ITEM_ID == "C4003" ) // 우회-속도
  1110. {
  1111. isDisplay = true;
  1112. }
  1113. else
  1114. if (AFormObj->VMS_TXT_ITEM_ID == "C0001" && // 단순문자열
  1115. AFormObj->FONT_CLR == "99" ) // 자동색상
  1116. {
  1117. isDisplay = true;
  1118. }
  1119. if (!isDisplay) {
  1120. return;
  1121. }
  1122. String sDsplText = AFormObj->DSPL_TXT;
  1123. if (AFormObj->VMS_TXT_ITEM_ID == "C1001" || // 도로명
  1124. AFormObj->VMS_TXT_ITEM_ID == "C1002" || // 시점명
  1125. AFormObj->VMS_TXT_ITEM_ID == "C1003" ) // 종점명
  1126. {
  1127. if (AVmsScnr != NULL) {
  1128. TVmsFormScnrObj *pScnrObj = AVmsScnr->FLists.Find(AFormObj->VMS_FORM_OBJ_ID);
  1129. if (pScnrObj != NULL) {
  1130. TVmsIfsc *pIfsc = VmsIfscManager->FLists.Find(pScnrObj->FIGR_FORM_APLY_VMS_SECT_ID);
  1131. if (pIfsc != NULL) {
  1132. if (AFormObj->VMS_TXT_ITEM_ID == "C1001") sDsplText = pIfsc->VMS_DSPL_SECT_NM;
  1133. else if (AFormObj->VMS_TXT_ITEM_ID == "C1002") sDsplText = pIfsc->VMS_DSPL_STRT_NM;
  1134. else if (AFormObj->VMS_TXT_ITEM_ID == "C1003") sDsplText = pIfsc->VMS_DSPL_END_NM;
  1135. }
  1136. }
  1137. }
  1138. }
  1139. else
  1140. if (AFormObj->VMS_TXT_ITEM_ID == "C3001" || // 우회-도로명
  1141. AFormObj->VMS_TXT_ITEM_ID == "C3002" || // 우회-시점명
  1142. AFormObj->VMS_TXT_ITEM_ID == "C3003" ) // 우회-종점명
  1143. {
  1144. }
  1145. TVmsFormObject *pObj = AEdtDesigner->AddObject((VmsObjectDrawType)0);
  1146. if (!pObj) {
  1147. return;
  1148. }
  1149. pObj->ObjId = AFormObj->VMS_FORM_OBJ_ID;
  1150. pObj->ObjSeq = AObjSeq;
  1151. pObj->Text = sDsplText;
  1152. pObj->RunText = pObj->Text;
  1153. int nPosX = AFormObj->FORM_OBJ_PSTN_X;
  1154. int nPosY = AFormObj->FORM_OBJ_PSTN_Y;
  1155. int nDsplWdth = AFormObj->FORM_OBJ_DSPL_WDTH;
  1156. int nTextAlign = 0;
  1157. if (AFormObj->TXT_ALGN_MTHD == "R") nTextAlign = 1;
  1158. if (AFormObj->TXT_ALGN_MTHD == "C") nTextAlign = 2;
  1159. pObj->FillIn = AFormObj->VMS_TXT_ITEM_ID;
  1160. pObj->FontNameCode = AFormObj->FONT_TYPE;
  1161. TCDSFontName *pFontName = CDSFontManager->FFontNames.Find(pObj->FontNameCode);
  1162. if (pFontName != NULL) {
  1163. pObj->FontName = pFontName->VMS_FONT_NAME_NM;
  1164. }
  1165. else {
  1166. pObj->FontName = "명조체";
  1167. pObj->FontNameCode = "00";
  1168. }
  1169. pObj->FontColorCode = AFormObj->FONT_CLR;
  1170. pObj->FontSize = AFormObj->FONT_SZ;
  1171. pObj->FontBold = AFormObj->FONT_THCK;
  1172. pObj->TextAlign = nTextAlign;
  1173. LblTemp->AutoSize = false;
  1174. LblTemp->Font->Name = pObj->FontName;
  1175. LblTemp->Font->Size = pObj->FontSize;
  1176. if (pObj->FontBold)
  1177. LblTemp->Font->Style = TFontStyles() << fsBold;
  1178. else
  1179. LblTemp->Font->Style = TFontStyles();
  1180. LblTemp->Caption = sDsplText;
  1181. LblTemp->AutoSize = true;
  1182. if (pObj->TextAlign == 1) {
  1183. // 우측정렬: 좌측에서 글자길이를 뺀다음 만약 음수이면 0으로 설정
  1184. nPosX = (nPosX+AFormObj->FORM_OBJ_DSPL_WDTH) - LblTemp->Width;
  1185. }
  1186. else if (pObj->TextAlign == 2) {
  1187. // 가운데정렬: 원래 글자의 중앙값을 얻은 다음에 조정된 글자의 1/2 크기를 뺀다음 음수이면 0으로 설정
  1188. nPosX = (nPosX+(AFormObj->FORM_OBJ_DSPL_WDTH/2)) - (LblTemp->Width/2);
  1189. }
  1190. pObj->SetPos(nPosX, nPosY);
  1191. pObj->Show();
  1192. pObj->BringToFront();
  1193. }
  1194. //---------------------------------------------------------------------------
  1195. void __fastcall TFrmVmsMsgScheMngr::DrawVmsScenarionForm(TcxDataController *AGDC, int AIdx)
  1196. {
  1197. TcxDataController *pGDC = AGDC;
  1198. int ii = AIdx;
  1199. String imageFilePath;
  1200. String saveDirPath = TPath::GetTempPath() + "VMS-FORM\\";
  1201. ForceDirectories(saveDirPath.c_str());
  1202. try {
  1203. String sVmsFormId = VarToStr(pGDC->Values[ii][Col00->Index]);
  1204. int nFormSn = VarToStr(pGDC->Values[ii][ColFormSn->Index]).ToIntDef(0);
  1205. TVmsFormScnr*pVmsScnr = FVmsScnrLists.Find(nFormSn);
  1206. TVmsFormObj *pVmsForm = FVmsFormLists.Find(sVmsFormId);
  1207. if (pVmsForm == NULL) {
  1208. return;
  1209. }
  1210. m_pEdtDesigner->Clear();
  1211. m_pEdtDesigner->BkColorCode = pVmsForm->BACK_CLR;
  1212. TFormImage *pBackImage = FFormBackLists.Find(sVmsFormId);
  1213. if (pBackImage == NULL) {
  1214. return;
  1215. }
  1216. TVmsFormObject *pObj = m_pEdtDesigner->AddObject((VmsObjectDrawType)1);
  1217. if (!pObj) {
  1218. return;
  1219. }
  1220. pObj->ObjId = "BASE";
  1221. pObj->ObjSeq = 0;
  1222. pObj->SetBitmap(pBackImage->bitmap);
  1223. pObj->SetPos(0, 0);
  1224. pObj->Show();
  1225. pObj->BringToFront();
  1226. int nObjSeq = 1;
  1227. FOR_STL(TFormObj*, pFormObj, pVmsForm->FLists) {
  1228. if (pFormObj->VMS_FORM_OBJ_KIND == FORM_OBJ_KIND_FIGURE) {
  1229. continue;
  1230. }
  1231. DrawFormObject(m_pEdtDesigner, pFormObj, pVmsScnr, nObjSeq++);
  1232. #if 0
  1233. bool isDisplay = false;
  1234. if (pFormObj->VMS_TXT_ITEM_ID == "C1001" || // 도로명
  1235. pFormObj->VMS_TXT_ITEM_ID == "C1002" || // 시점명
  1236. pFormObj->VMS_TXT_ITEM_ID == "C1003" || // 종점명
  1237. pFormObj->VMS_TXT_ITEM_ID == "C2001" || // 소통상황
  1238. pFormObj->VMS_TXT_ITEM_ID == "C2002" || // 시간
  1239. pFormObj->VMS_TXT_ITEM_ID == "C2003" || // 속도
  1240. pFormObj->VMS_TXT_ITEM_ID == "C3001" || // 우회-도로명
  1241. pFormObj->VMS_TXT_ITEM_ID == "C3002" || // 우회-시점명
  1242. pFormObj->VMS_TXT_ITEM_ID == "C3003" || // 우회-종점명
  1243. pFormObj->VMS_TXT_ITEM_ID == "C4001" || // 우회-소통상황
  1244. pFormObj->VMS_TXT_ITEM_ID == "C4002" || // 우회-시간
  1245. pFormObj->VMS_TXT_ITEM_ID == "C4003" ) // 우회-속도
  1246. {
  1247. isDisplay = true;
  1248. }
  1249. else
  1250. if (pFormObj->VMS_TXT_ITEM_ID == "C0001" && // 단순문자열
  1251. pFormObj->FONT_CLR == "99" ) // 자동색상
  1252. {
  1253. isDisplay = true;
  1254. }
  1255. if (!isDisplay) {
  1256. continue;
  1257. }
  1258. String sDsplText = pFormObj->DSPL_TXT;
  1259. if (pFormObj->VMS_TXT_ITEM_ID == "C1001" || // 도로명
  1260. pFormObj->VMS_TXT_ITEM_ID == "C1002" || // 시점명
  1261. pFormObj->VMS_TXT_ITEM_ID == "C1003" ) // 종점명
  1262. {
  1263. if (pVmsScnr != NULL) {
  1264. TVmsFormScnrObj *pScnrObj = pVmsScnr->FLists.Find(pFormObj->VMS_FORM_OBJ_ID);
  1265. if (pScnrObj != NULL) {
  1266. TVmsIfsc *pIfsc = VmsIfscManager->FLists.Find(pScnrObj->FIGR_FORM_APLY_VMS_SECT_ID);
  1267. if (pIfsc != NULL) {
  1268. if (pFormObj->VMS_TXT_ITEM_ID == "C1001") sDsplText = pIfsc->VMS_DSPL_SECT_NM;
  1269. else if (pFormObj->VMS_TXT_ITEM_ID == "C1002") sDsplText = pIfsc->VMS_DSPL_STRT_NM;
  1270. else if (pFormObj->VMS_TXT_ITEM_ID == "C1003") sDsplText = pIfsc->VMS_DSPL_END_NM;
  1271. }
  1272. }
  1273. }
  1274. }
  1275. else
  1276. if (pFormObj->VMS_TXT_ITEM_ID == "C3001" || // 우회-도로명
  1277. pFormObj->VMS_TXT_ITEM_ID == "C3002" || // 우회-시점명
  1278. pFormObj->VMS_TXT_ITEM_ID == "C3003" ) // 우회-종점명
  1279. {
  1280. }
  1281. TVmsFormObject *pObj = m_pEdtDesigner->AddObject((VmsObjectDrawType)0);
  1282. if (!pObj) {
  1283. continue;
  1284. }
  1285. pObj->ObjId = pFormObj->VMS_FORM_OBJ_ID;
  1286. pObj->Text = sDsplText;
  1287. pObj->RunText = pObj->Text;
  1288. int nPosX = pFormObj->FORM_OBJ_PSTN_X;
  1289. int nPosY = pFormObj->FORM_OBJ_PSTN_Y;
  1290. int nDsplWdth = pFormObj->FORM_OBJ_DSPL_WDTH;
  1291. int nTextAlign = 0;
  1292. if (pFormObj->TXT_ALGN_MTHD == "R") nTextAlign = 1;
  1293. if (pFormObj->TXT_ALGN_MTHD == "C") nTextAlign = 2;
  1294. pObj->FillIn = pFormObj->VMS_TXT_ITEM_ID;
  1295. pObj->FontNameCode = pFormObj->FONT_TYPE;
  1296. TCDSFontName *pFontName = CDSFontManager->FFontNames.Find(pObj->FontNameCode);
  1297. if (pFontName != NULL) {
  1298. pObj->FontName = pFontName->VMS_FONT_NAME_NM;
  1299. }
  1300. else {
  1301. pObj->FontName = "명조체";
  1302. pObj->FontNameCode = "00";
  1303. }
  1304. pObj->FontColorCode = pFormObj->FONT_CLR;
  1305. pObj->FontSize = pFormObj->FONT_SZ;
  1306. pObj->FontBold = pFormObj->FONT_THCK;
  1307. pObj->TextAlign = nTextAlign;
  1308. LblTemp->AutoSize = false;
  1309. LblTemp->Font->Name = pObj->FontName;
  1310. LblTemp->Font->Size = pObj->FontSize;
  1311. if (pObj->FontBold)
  1312. LblTemp->Font->Style = TFontStyles() << fsBold;
  1313. else
  1314. LblTemp->Font->Style = TFontStyles();
  1315. LblTemp->Caption = sDsplText;
  1316. LblTemp->AutoSize = true;
  1317. if (pObj->TextAlign == 1) {
  1318. // 우측정렬: 좌측에서 글자길이를 뺀다음 만약 음수이면 0으로 설정
  1319. nPosX = (nPosX+pFormObj->FORM_OBJ_DSPL_WDTH) - LblTemp->Width;
  1320. }
  1321. else if (pObj->TextAlign == 2) {
  1322. // 가운데정렬: 원래 글자의 중앙값을 얻은 다음에 조정된 글자의 1/2 크기를 뺀다음 음수이면 0으로 설정
  1323. nPosX = (nPosX+(pFormObj->FORM_OBJ_DSPL_WDTH/2)) - (LblTemp->Width/2);
  1324. }
  1325. pObj->SetPos(nPosX, nPosY);
  1326. pObj->Show();
  1327. pObj->BringToFront();
  1328. #endif
  1329. }
  1330. APP_ImageClear(ImgForm->Canvas, 0, 0, ImgForm->Width, ImgForm->Height, clBlack);
  1331. m_pEdtDesigner->GetVmsFormImage(ImgForm);
  1332. imageFilePath = saveDirPath + sVmsFormId + String(nFormSn) + ".bmp";
  1333. ImgForm->Picture->SaveToFile(imageFilePath);
  1334. TStream *pImgStream = new TMemoryStream();
  1335. try {
  1336. void *p;
  1337. Variant v;
  1338. m_pEdtDesigner->GetVmsFormImage(ImgForm);
  1339. ImgForm->Picture->Bitmap->SaveToStream(pImgStream);
  1340. TFormImage *pImage = new TFormImage();
  1341. pImage->formId = sVmsFormId;
  1342. pImage->bitmap = new Graphics::TBitmap;
  1343. try {
  1344. pImage->bitmap->Assign(ImgForm->Picture->Bitmap);
  1345. }
  1346. catch(Exception &e) {
  1347. }
  1348. FFormRealLists.Push(nFormSn, pImage);
  1349. int aBound[]={0, pImgStream->Size - 1};
  1350. v = VarArrayCreate(aBound, 1, varByte);
  1351. p = VarArrayLock(v);
  1352. pImgStream->Position = 0;
  1353. pImgStream->Read(p, pImgStream->Size);
  1354. VarArrayUnlock(v);
  1355. pGDC->Values[ii][Col01->Index] = v;
  1356. }
  1357. __finally {
  1358. SAFE_DELETE(pImgStream);
  1359. }
  1360. }
  1361. catch(Exception &e)
  1362. {
  1363. }
  1364. }
  1365. //---------------------------------------------------------------------------
  1366. void __fastcall TFrmVmsMsgScheMngr::LoadPreviewForm(String AVmsFormId)
  1367. {
  1368. TFormImage *pImage = FFormLists.Find(AVmsFormId);
  1369. //LockWindowUpdate(GrpPreview->Handle);
  1370. if (pImage != NULL && pImage->bitmap != NULL) {
  1371. ImgPreview->Picture->Bitmap->Assign(pImage->bitmap);
  1372. }
  1373. else {
  1374. APP_ImageClear(ImgPreview->Canvas, 0, 0, ImgPreview->Width, ImgPreview->Height, clBlack);
  1375. }
  1376. //LockWindowUpdate(0);
  1377. }
  1378. //---------------------------------------------------------------------------
  1379. void __fastcall TFrmVmsMsgScheMngr::LoadPreviewFormReal(String AVmsFormId, int AFormSn)
  1380. {
  1381. TFormImage *pImage = FFormRealLists.Find(AFormSn);
  1382. //LockWindowUpdate(GrpPreview->Handle);
  1383. if (pImage != NULL && pImage->bitmap != NULL) {
  1384. ImgPreview->Picture->Bitmap->Assign(pImage->bitmap);
  1385. }
  1386. else {
  1387. APP_ImageClear(ImgPreview->Canvas, 0, 0, ImgPreview->Width, ImgPreview->Height, clBlack);
  1388. }
  1389. //LockWindowUpdate(0);
  1390. }
  1391. //---------------------------------------------------------------------------
  1392. void __fastcall TFrmVmsMsgScheMngr::TvScheFocusedRecordChanged(TcxCustomGridTableView *Sender, TcxCustomGridRecord *APrevFocusedRecord,
  1393. TcxCustomGridRecord *AFocusedRecord, bool ANewItemRecordFocusingChanged)
  1394. {
  1395. if (!AFocusedRecord) return;
  1396. int nSelIdx = CMM_GetRecordIndex(TvSche);
  1397. if (nSelIdx < 0) return;
  1398. String sVmsFormId = VarToStr(TvSche->DataController->Values[nSelIdx][Col00->Index]);
  1399. int nFormSn = VarToStr(TvSche->DataController->Values[nSelIdx][ColFormSn->Index]).ToIntDef(0);
  1400. LoadPreviewFormReal(sVmsFormId, nFormSn);
  1401. }
  1402. //---------------------------------------------------------------------------
  1403. void __fastcall TFrmVmsMsgScheMngr::TvScheCellClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo,
  1404. TMouseButton AButton, TShiftState AShift, bool &AHandled)
  1405. {
  1406. if (!ACellViewInfo) return;
  1407. int nSelIdx = CMM_GetRecordIndex(TvSche);
  1408. if (nSelIdx < 0) return;
  1409. String sVmsFormId = VarToStr(TvSche->DataController->Values[nSelIdx][Col00->Index]);
  1410. int nFormSn = VarToStr(TvSche->DataController->Values[nSelIdx][ColFormSn->Index]).ToIntDef(0);
  1411. LoadPreviewFormReal(sVmsFormId, nFormSn);
  1412. }
  1413. //---------------------------------------------------------------------------
  1414. void __fastcall TFrmVmsMsgScheMngr::TvFormFocusedRecordChanged(TcxCustomGridTableView *Sender, TcxCustomGridRecord *APrevFocusedRecord,
  1415. TcxCustomGridRecord *AFocusedRecord, bool ANewItemRecordFocusingChanged)
  1416. {
  1417. if (!AFocusedRecord) return;
  1418. int nSelIdx = CMM_GetRecordIndex(TvForm);
  1419. if (nSelIdx < 0) return;
  1420. String sVmsFormId = VarToStr(TvForm->DataController->Values[nSelIdx][ColFrm00->Index]);
  1421. LoadPreviewForm(sVmsFormId);
  1422. }
  1423. //---------------------------------------------------------------------------
  1424. void __fastcall TFrmVmsMsgScheMngr::TvFormCellClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo,
  1425. TMouseButton AButton, TShiftState AShift, bool &AHandled)
  1426. {
  1427. if (!ACellViewInfo) return;
  1428. int nSelIdx = CMM_GetRecordIndex(TvForm);
  1429. if (nSelIdx < 0) return;
  1430. String sVmsFormId = VarToStr(TvForm->DataController->Values[nSelIdx][ColFrm00->Index]);
  1431. LoadPreviewForm(sVmsFormId);
  1432. }
  1433. //---------------------------------------------------------------------------
  1434. void __fastcall TFrmVmsMsgScheMngr::PreviewVmsScenarionForm()
  1435. {
  1436. CMM_ClearGridTableView(TvPreview);
  1437. TcxDataController *pDcScnr = TvSche->DataController;
  1438. TcxDataController *pDcView = TvPreview->DataController;
  1439. try {
  1440. TvSche->BeginUpdate();
  1441. TvPreview->BeginUpdate();
  1442. try {
  1443. for(int nRowS = 0; nRowS < pDcScnr->RecordCount; nRowS++) {
  1444. String VMS_FORM_ID = pDcScnr->Values[nRowS][Col00->Index];
  1445. int DSPL_HR = pDcScnr->Values[nRowS][Col03->Index];
  1446. String VMS_FORM_DSPL_CNDT_NM = pDcScnr->Values[nRowS][ColDsplCndtNm->Index];
  1447. int nRowV = pDcView->AppendRecord();
  1448. pDcView->Values[nRowV][ColView00->Index] = VMS_FORM_ID;
  1449. pDcView->Values[nRowV][ColView01->Index] = pDcScnr->Values[nRowS][Col01->Index];
  1450. pDcView->Values[nRowV][ColView03->Index] = DSPL_HR;
  1451. pDcView->Values[nRowV][ColViewDslplCndtNm->Index] = VMS_FORM_DSPL_CNDT_NM;
  1452. }
  1453. }
  1454. catch(Exception &e) {
  1455. }
  1456. }
  1457. __finally {
  1458. TvSche->EndUpdate();
  1459. TvPreview->EndUpdate();
  1460. TvPreview->ApplyBestFit(NULL, false, false);
  1461. }
  1462. }
  1463. //---------------------------------------------------------------------------
  1464. void __fastcall TFrmVmsMsgScheMngr::PgSchedulePageChanging(TObject *Sender, TcxTabSheet *NewPage, bool &AllowChange)
  1465. {
  1466. if (TsPreview == NewPage) {
  1467. PreviewVmsScenarionForm();
  1468. }
  1469. }
  1470. //---------------------------------------------------------------------------
  1471. void __fastcall TFrmVmsMsgScheMngr::Col03PropertiesEditValueChanged(TObject *Sender)
  1472. {
  1473. if (((TcxSpinEdit*)Sender)->Value < ((TcxSpinEdit*)Sender)->Properties->MinValue)
  1474. ((TcxSpinEdit*)Sender)->Value = ((TcxSpinEdit*)Sender)->Properties->MinValue;
  1475. else if(((TcxSpinEdit*)Sender)->Value > ((TcxSpinEdit*)Sender)->Properties->MaxValue &&
  1476. ((TcxSpinEdit*)Sender)->Properties->MaxValue)
  1477. ((TcxSpinEdit*)Sender)->Value = ((TcxSpinEdit*)Sender)->Properties->MaxValue;
  1478. }
  1479. //---------------------------------------------------------------------------
  1480. void __fastcall TFrmVmsMsgScheMngr::ChkAutoWidthPropertiesChange(TObject *Sender)
  1481. {
  1482. try
  1483. {
  1484. LockWindowUpdate(Handle);
  1485. TvSche->BeginUpdate();
  1486. if (ChkAutoWidth->Checked)
  1487. {
  1488. TvSche->OptionsView->DataRowHeight = 58;
  1489. TvSche->OptionsView->CellAutoHeight = false;
  1490. }
  1491. else
  1492. {
  1493. TvSche->OptionsView->DataRowHeight = 0;
  1494. TvSche->OptionsView->CellAutoHeight = true;
  1495. }
  1496. TvSche->OptionsView->ColumnAutoWidth = ChkAutoWidth->Checked;
  1497. }
  1498. __finally
  1499. {
  1500. TvSche->EndUpdate();
  1501. LockWindowUpdate(0);
  1502. //BtnBestFit->Visible = !ChkAutoWidth->Checked;
  1503. }
  1504. }
  1505. //---------------------------------------------------------------------------
  1506. void __fastcall TFrmVmsMsgScheMngr::BtnBestFitViewClick(TObject *Sender)
  1507. {
  1508. try
  1509. {
  1510. LockWindowUpdate(Handle);
  1511. TvPreview->BeginUpdate();
  1512. TvPreview->ApplyBestFit(NULL, false, false);
  1513. }
  1514. __finally
  1515. {
  1516. TvPreview->EndUpdate();
  1517. LockWindowUpdate(0);
  1518. }
  1519. }
  1520. //---------------------------------------------------------------------------
  1521. void __fastcall TFrmVmsMsgScheMngr::BtnSaveScnrClick(TObject *Sender)
  1522. {
  1523. // VMS 기본 시나리오 설정
  1524. String sScnrId = EdScnrId->Text;
  1525. if (sScnrId.IsEmpty()) {
  1526. Application->MessageBox(L"VMS 기본 시나리오 설정\r\n설정할 VMS 스케줄을 목록에서 선택하세요.",
  1527. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  1528. if (CxVmsSche->Enabled) CxVmsSche->SetFocus();
  1529. return;
  1530. }
  1531. if (FSelVmsCtlrId.IsEmpty()) {
  1532. Application->MessageBox(L"VMS 기본 시나리오 설정\r\nVMS 정보를 선택하세요.",
  1533. FTitle.c_str(),
  1534. MB_OK|MB_ICONERROR|MB_APPLMODAL);
  1535. return;
  1536. }
  1537. String sMsg;
  1538. sMsg = "VMS 기본 시나리오 설정\r\n\r\n";
  1539. sMsg+= "VMS ID: " + FSelVmsCtlrId;
  1540. sMsg+= "\r\nVMS 시나리오 ID: " + sScnrId;
  1541. sMsg+= "\r\n\r\n선택하신 VMS에 대하여 기본 시나리오로 저장 하시겠습니까?";
  1542. if (Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES) return;
  1543. if (UpdateVmsDefScenario(FSelVmsCtlrId, sScnrId))
  1544. {
  1545. FUpdate = true;
  1546. Application->MessageBox(L"VMS 기본 시나리오 설정\r\nVMS 기본 시나리오 정보를 저장 하였습니다.",
  1547. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  1548. }
  1549. }
  1550. //---------------------------------------------------------------------------