VMSM500MF.cpp 85 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438
  1. /****************************************************************************
  2. * @source :
  3. * @description :
  4. ****************************************************************************
  5. * DATE AUTHOR DESCRIPTION
  6. * --------------------------------------------------------------------------
  7. * 2016/07/10 shjung 최초작성
  8. *
  9. ****************************************************************************/
  10. //---------------------------------------------------------------------------
  11. #include <vcl.h>
  12. #include "ITSSkinF.h"
  13. #include "ITSUtilF.h"
  14. #include "AppGlobalF.h"
  15. #include "ITSLangTransF.h"
  16. #pragma hdrstop
  17. #include "VMSM500MF.h"
  18. #include "VMSM510MF.h"
  19. #include "VMSM520MF.h"
  20. #include "VMSM530MF.h"
  21. //---------------------------------------------------------------------------
  22. #pragma package(smart_init)
  23. #pragma link "cxButtons"
  24. #pragma link "cxCalendar"
  25. #pragma link "cxContainer"
  26. #pragma link "cxControls"
  27. #pragma link "cxDropDownEdit"
  28. #pragma link "cxEdit"
  29. #pragma link "cxGraphics"
  30. #pragma link "cxGroupBox"
  31. #pragma link "cxLabel"
  32. #pragma link "cxLookAndFeelPainters"
  33. #pragma link "cxLookAndFeels"
  34. #pragma link "cxMaskEdit"
  35. #pragma link "cxPC"
  36. #pragma link "cxPCdxBarPopupMenu"
  37. #pragma link "cxSpinEdit"
  38. #pragma link "cxSplitter"
  39. #pragma link "cxTextEdit"
  40. #pragma link "cxTimeEdit"
  41. #pragma link "dxSkinBlack"
  42. #pragma link "dxSkinBlue"
  43. #pragma link "dxSkinCaramel"
  44. #pragma link "dxSkinCoffee"
  45. #pragma link "dxSkinDarkRoom"
  46. #pragma link "dxSkinDarkSide"
  47. #pragma link "dxSkinFoggy"
  48. #pragma link "dxSkinGlassOceans"
  49. #pragma link "dxSkiniMaginary"
  50. #pragma link "dxSkinLilian"
  51. #pragma link "dxSkinLiquidSky"
  52. #pragma link "dxSkinLondonLiquidSky"
  53. #pragma link "dxSkinMcSkin"
  54. #pragma link "dxSkinMoneyTwins"
  55. #pragma link "dxSkinOffice2007Black"
  56. #pragma link "dxSkinOffice2007Blue"
  57. #pragma link "dxSkinOffice2007Green"
  58. #pragma link "dxSkinOffice2007Pink"
  59. #pragma link "dxSkinOffice2007Silver"
  60. #pragma link "dxSkinOffice2010Black"
  61. #pragma link "dxSkinOffice2010Blue"
  62. #pragma link "dxSkinOffice2010Silver"
  63. #pragma link "dxSkinsCore"
  64. #pragma link "dxSkinscxPCPainter"
  65. #pragma link "dxSkinSeven"
  66. #pragma link "dxSkinSharp"
  67. #pragma link "dxSkinSilver"
  68. #pragma link "dxSkinStardust"
  69. #pragma link "cxRadioGroup"
  70. #pragma link "cxClasses"
  71. #pragma link "cxCustomData"
  72. #pragma link "cxData"
  73. #pragma link "cxDataStorage"
  74. #pragma link "cxDBData"
  75. #pragma link "cxFilter"
  76. #pragma link "cxGrid"
  77. #pragma link "cxGridCustomTableView"
  78. #pragma link "cxGridCustomView"
  79. #pragma link "cxGridDBTableView"
  80. #pragma link "cxGridLevel"
  81. #pragma link "cxGridTableView"
  82. #pragma link "cxStyles"
  83. #pragma link "cxCheckBox"
  84. #pragma link "cxImage"
  85. #pragma link "cxButtonEdit"
  86. #pragma link "cxBlobEdit"
  87. #pragma link "VmsDesignerF"
  88. #pragma link "cxColorComboBox"
  89. #pragma link "cxCalc"
  90. #pragma resource "*.dfm"
  91. TVMSM500M *VMSM500M = NULL;
  92. //---------------------------------------------------------------------------
  93. __fastcall TVMSM500M::TVMSM500M(TComponent* Owner)
  94. : TForm(Owner)
  95. {
  96. LangTrans->Translate(this, ITSDb_GetConnection());
  97. ITSSkin_Load(this);
  98. CMM_LoadForm(g_sFormsDir, this);
  99. FUpdate= false;
  100. FTitle = Caption;//"VMS 문자식 폼관리";
  101. FListSymb = new TList;
  102. EditMode = false;
  103. PgEdit->ActivePage = TsEdit;
  104. APP_InitDisplayColor();
  105. //BtnSaveImgFile->Caption = "Save form image";
  106. //BtnSaveImgFile->Hint = "Save the form as an image file.";
  107. MyUseManager = new TVmsObjUseManager();
  108. }
  109. //---------------------------------------------------------------------------
  110. /*
  111. * 닫기버튼 이나 x버튼 클릭시 공통으로 처리하는 로직이들어간다..
  112. * Form과 DataModule class를 delete시킨다.
  113. * arguments
  114. *
  115. * return
  116. * void
  117. */
  118. void __fastcall TVMSM500M::CommClose()
  119. {
  120. try
  121. {
  122. if (MyUseManager)
  123. {
  124. delete MyUseManager;
  125. MyUseManager = NULL;
  126. }
  127. if (m_pEdtDesigner)
  128. {
  129. delete m_pEdtDesigner;
  130. m_pEdtDesigner = NULL;
  131. }
  132. //if (m_pDesigner)
  133. //{
  134. // delete m_pDesigner;
  135. // m_pDesigner = NULL;
  136. //}
  137. APP_DelVmsSizeCombo(CbSizeType);
  138. SAFE_DELETE(MyVmsObjTypeManager);
  139. ClearSymbloList();
  140. SAFE_DELETE(FListSymb);
  141. CMM_SaveForm(g_sFormsDir, this);
  142. }
  143. catch(...)
  144. {
  145. }
  146. }
  147. //---------------------------------------------------------------------------
  148. void __fastcall TVMSM500M::FormCreate(TObject *Sender)
  149. {
  150. MyVmsObjTypeManager = new TVmsObjTypeManager();
  151. m_pEdtDesigner = new TVmsFormDesigner(PnlEditForm);
  152. //m_pDesigner = new TVmsFormDesigner(PnlForm);
  153. }
  154. //---------------------------------------------------------------------------
  155. /*
  156. * Form을 보여줄때 호출되는 event 메서드이다.
  157. * arguments
  158. * Sender : event handler 객체
  159. * return
  160. * void
  161. */
  162. void __fastcall TVMSM500M::FormShow(TObject *Sender)
  163. {
  164. Refresh();
  165. FormInit();
  166. ChangeEditMode(1);
  167. TmrShow->Enabled = true;
  168. }
  169. //---------------------------------------------------------------------------
  170. /*
  171. * form 초기화
  172. *
  173. * arguments
  174. *
  175. * return
  176. * void
  177. */
  178. void __fastcall TVMSM500M::FormInit()
  179. {
  180. //TvList->OptionsView->NoDataToDisplayInfoText = "<등록되어 있는 폼 정보가 없습니다>";
  181. MyVmsObjTypeManager->LoadFromDb();
  182. m_pEdtDesigner->ApplicationHandle = (long)Handle;
  183. //VMS사이즈
  184. APP_FillVmsSizeType(CbSizeType, "VUTN", false);
  185. //폼색상
  186. CbFormColor->Items->Clear();
  187. CbFormColor->Items->AddObject("", (TObject*)clBlack);
  188. CbFormColor->Items->AddObject("", (TObject*)clRed);
  189. CbFormColor->Items->AddObject("", (TObject*)clLime);
  190. CbFormColor->Items->AddObject("", (TObject*)clYellow);
  191. CbFormColor->ItemIndex = 0;
  192. //폼유형
  193. FillVmsFormType(CbFormKind);
  194. //표출방법
  195. FillVmsFormDispMode(CbFormDispMode);
  196. //표출방향
  197. FillVmsFormDispDir(CbFormDispDir);
  198. FormObjectInit();
  199. FNewDb = false;
  200. }
  201. //---------------------------------------------------------------------------
  202. void __fastcall TVMSM500M::FormObjectInit()
  203. {
  204. //TvObjList->OptionsView->NoDataToDisplayInfoText = "<등록되어 있는 객체 정보가 없습니다>";
  205. m_bEdit = false;
  206. PnlEdtBack->Left = 6;
  207. PnlEdtBack->Top = 4;
  208. PnlRePreview->Left = 6;
  209. PnlRePreview->Top = 4;
  210. ReForm->Left = 6;
  211. ReForm->Top = 4;
  212. //객체배경색상
  213. CbBkColor->Items->Clear();
  214. CbBkColor->Items->AddObject("", (TObject*)clBlack);
  215. CbBkColor->Items->AddObject("", (TObject*)clRed);
  216. CbBkColor->Items->AddObject("", (TObject*)clLime);
  217. CbBkColor->Items->AddObject("", (TObject*)clYellow);
  218. CbBkColor->ItemIndex = 0;
  219. //문자열색상
  220. CbFontColor->Items->Clear();
  221. CbFontColor->Items->AddObject("", (TObject*)clBlack);
  222. CbFontColor->Items->AddObject("", (TObject*)clRed);
  223. CbFontColor->Items->AddObject("", (TObject*)clLime);
  224. CbFontColor->Items->AddObject("", (TObject*)clYellow);
  225. CbFontColor->ItemIndex = 0;
  226. //직접입력 문자열색상
  227. CbFontColorRe->Items->Clear();
  228. CbFontColorRe->Items->AddObject("", (TObject*)clBlack);
  229. CbFontColorRe->Items->AddObject("", (TObject*)clRed);
  230. CbFontColorRe->Items->AddObject("", (TObject*)clLime);
  231. CbFontColorRe->Items->AddObject("", (TObject*)clYellow);
  232. CbFontColorRe->ItemIndex = 0;
  233. //VMS Font
  234. FillVmsFont(CbFontName);
  235. CbFontName->ItemIndex = 0;
  236. FillVmsFont(CbFontNameRe);
  237. CbFontNameRe->ItemIndex = 0;
  238. }
  239. //---------------------------------------------------------------------------
  240. /*
  241. * Form이 Show되고 난 후 최초 1회 수행되는 타이머 이벤트
  242. * arguments
  243. * Sender : event handler 객체
  244. * return
  245. * void
  246. */
  247. void __fastcall TVMSM500M::TmrShowTimer(TObject *Sender)
  248. {
  249. TmrShow->Enabled = false;
  250. }
  251. //---------------------------------------------------------------------------
  252. /*
  253. * Close 버튼 클릭 이벤트 핸들러
  254. * arguments
  255. * Sender : event handler 객체
  256. * return
  257. * void
  258. */
  259. void __fastcall TVMSM500M::BtnCloseClick(TObject *Sender)
  260. {
  261. Close();
  262. }
  263. //---------------------------------------------------------------------------
  264. void __fastcall TVMSM500M::FormClose(TObject *Sender, TCloseAction &Action)
  265. {
  266. CommClose();
  267. VMSM500M = NULL;
  268. Action = caFree;
  269. }
  270. //---------------------------------------------------------------------------
  271. void __fastcall TVMSM500M::FormCloseQuery(TObject *Sender, bool &CanClose)
  272. {
  273. if (FUpdate)
  274. {
  275. VComm_VmsFormUpdate();
  276. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_14, 0);
  277. }
  278. }
  279. //---------------------------------------------------------------------------
  280. void __fastcall TVMSM500M::BtnEditClick(TObject *Sender)
  281. {
  282. if (BtnEdit->Caption == FrmLang->lblEdit->Caption)//"편집")
  283. {
  284. ChangeEditMode(0);
  285. FNewDb = false;
  286. }
  287. else
  288. {
  289. String sId = EdFormId->Text;
  290. ChangeEditMode(1);
  291. if (CMM_FindGridData(TvList->DataController, sId, Col01->Index) >= 0)
  292. {
  293. CMM_SetGridRow(CxList, TvList, sId, Col01->Index);
  294. DisplayInfo();
  295. }
  296. }
  297. }
  298. //---------------------------------------------------------------------------
  299. void __fastcall TVMSM500M::ChangeEditMode(int AEdit)
  300. {
  301. bool bEnabled = false;
  302. CbFormKind->Enabled = false;
  303. switch(AEdit)
  304. {
  305. case 0: //편집버튼클릭
  306. {
  307. BtnEdit->Enabled = true;
  308. BtnInsert->Enabled = false;
  309. BtnDelete->Enabled = false;
  310. BtnCopyAdd->Enabled = false;
  311. BtnSave->Enabled = true;
  312. BtnEdit->Caption = FrmLang->lblCancel->Caption;//"취소";
  313. BtnEdit->Hint = FrmLang->lblCancel->Hint;//데이터 편집 취소";
  314. EditMode = true;
  315. }
  316. break;
  317. case 1: //편집[취소]버튼클릭
  318. {
  319. FormClear(); //화면을 모두 지운다.
  320. BtnEdit->Enabled = false;
  321. BtnInsert->Enabled = true;
  322. BtnDelete->Enabled = false;
  323. BtnCopyAdd->Enabled = false;
  324. BtnSave->Enabled = false;
  325. BtnEdit->Caption = FrmLang->lblEdit->Caption;//"편집";
  326. BtnEdit->Hint = FrmLang->lblEdit->Hint;//데이터 편집";
  327. //bEnabled = true;
  328. EditMode = false;
  329. }
  330. break;
  331. case 2: //추가
  332. {
  333. BtnEdit->Enabled = true;
  334. BtnInsert->Enabled = false;
  335. BtnDelete->Enabled = false;
  336. BtnCopyAdd->Enabled = false;
  337. BtnSave->Enabled = true;
  338. BtnEdit->Caption = FrmLang->lblCancel->Caption;//"취소";
  339. BtnEdit->Hint = FrmLang->lblCancel->Hint;//데이터 편집 취소";
  340. EditMode = true;
  341. //CbFormKind->Enabled = true;
  342. }
  343. break;
  344. case 3: //수정모드
  345. {
  346. BtnEdit->Enabled = true;
  347. BtnInsert->Enabled = true;
  348. BtnDelete->Enabled = true;
  349. BtnCopyAdd->Enabled = true;
  350. BtnSave->Enabled = false;
  351. BtnEdit->Caption = FrmLang->lblEdit->Caption;//"편집";
  352. BtnEdit->Hint = FrmLang->lblEdit->Hint;//데이터 편집";
  353. bEnabled = true;
  354. EditMode = false;
  355. }
  356. break;
  357. }
  358. BtnSaveImgFile->Enabled = false;
  359. if (ImgForm->Picture->Bitmap != NULL)
  360. {
  361. if (ImgForm->Picture->Bitmap->Height != 0)
  362. {
  363. BtnSaveImgFile->Enabled = true;
  364. }
  365. }
  366. if (AEdit == 0 || AEdit == 2)
  367. {
  368. PnlCmd->Enabled = true;
  369. GrpList->Enabled = false;
  370. }
  371. else
  372. {
  373. PnlCmd->Enabled = false;
  374. GrpList->Enabled = true;
  375. }
  376. ChangeEditModeObject(AEdit);
  377. }
  378. //---------------------------------------------------------------------------
  379. void __fastcall TVMSM500M::ChangeEditModeObject(int AEdit)
  380. {
  381. }
  382. //---------------------------------------------------------------------------
  383. void __fastcall TVMSM500M::BtnInsertClick(TObject *Sender)
  384. {
  385. int nFormId;
  386. if (!GetNextVmsFormId(nFormId))
  387. {
  388. Application->MessageBox(lblText1->Caption.c_str(),//L"새로운 VMS 폼정보를 생성하지 못하였습니다.\r\n프로그램 종료후에 다시 시도해 보세요.",
  389. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  390. return;
  391. }
  392. TVMSM520M *pSelForm = new TVMSM520M(this);
  393. pSelForm->ShowModal();
  394. String sFormType = pSelForm->EdNmbr->Text.Trim();
  395. bool bSelected = pSelForm->m_bSelected;
  396. delete pSelForm;
  397. pSelForm = NULL;
  398. if (!bSelected)
  399. {
  400. return;
  401. }
  402. if (sFormType == "")
  403. {
  404. return;
  405. }
  406. FormClear();
  407. EdFormId->Text = String(nFormId);
  408. ChangeEditMode(2);
  409. FNewDb = true;
  410. //폼유형을 설정
  411. APP_SetCode(CbFormKind, sFormType);
  412. CbFormDispMode->ItemIndex = 0;
  413. CbFormDispDir->ItemIndex = 0;
  414. //폼유형에 맞게 기본 폼을 생성하자
  415. switch(sFormType.ToIntDef(11))
  416. {
  417. case 11:// ' 소통상황(1단)
  418. MakeDefTrafficForm(1);
  419. break;
  420. case 12:// ' 소통상황(2단)
  421. MakeDefTrafficForm(2);
  422. break;
  423. case 13:// ' 소통상황(3단)
  424. MakeDefTrafficForm(3);
  425. break;
  426. case 14:// ' 소통상황(4단)
  427. MakeDefTrafficForm(4);
  428. break;
  429. case 15:// ' 소통상황(도형식)
  430. break;
  431. case 16:// ' 정체소통상황
  432. MakeDefTrafficForm(6);
  433. break;
  434. case 20:// ' 돌발문안
  435. break;
  436. case 30:// ' 공사/행사문안
  437. break;
  438. case 40:// ' 홍보문안
  439. break;
  440. case 50:// ' 우회도로
  441. break;
  442. default:
  443. APP_SetCode(CbFormKind, "11");
  444. MakeDefTrafficForm(1);
  445. break;
  446. }
  447. }
  448. //---------------------------------------------------------------------------
  449. bool __fastcall TVMSM500M::AddDefFormObject(String AFontName, int AFontSize, String AFontColor,
  450. int AObjType, String AText, int ASize, int APosX, int APosY)
  451. {
  452. TVmsFormObject *pObj;
  453. //1단 소통정보
  454. pObj = m_pEdtDesigner->AddObject(odtText);
  455. if (!pObj) return false;
  456. pObj->EditMode = true;
  457. pObj->ObjKind = OBJKIND_TEXT;
  458. pObj->ObjSeq = m_pEdtDesigner->GetNewObjectSeq();
  459. pObj->ObjType = String(AObjType);
  460. pObj->Text = AText;
  461. pObj->ObjSize = pObj->Text.Length();//ASize; //Pixel
  462. pObj->BkColorCode = "0"; //Balck, m_pEdtDesigner->BkColorCode;
  463. pObj->Blink = false;
  464. pObj->FontName = AFontName;
  465. pObj->FontNameCode = APP_GetCodeIdByName(CbFontName, AFontName);
  466. pObj->FontColorCode = AFontColor; //0:Black,1:Red,2:Green,3:Yellow
  467. pObj->FontSize = AFontSize;
  468. pObj->FontBold = true;
  469. pObj->TextAlign = 0; //(0:left, 1:right, 2:center
  470. pObj->SetPos(APosX, APosY);
  471. pObj->Show();
  472. AddObjectToList(pObj, true);
  473. return true;
  474. }
  475. //---------------------------------------------------------------------------
  476. void __fastcall TVMSM500M::MakeDefTrafficForm(int ARows)
  477. {
  478. //0:Black,1:Red, 2:Green, 3:Yellow
  479. //0:left, 1:right, 2:center
  480. //1단 소통정보
  481. if (g_AppCfg.sLang == "kr")
  482. {
  483. switch(ARows)
  484. {
  485. case 1:
  486. AddDefFormObject("굴림체", 18, "3", 12, "@시점명", 160, 16, 7); //시점명
  487. AddDefFormObject("굴림체", 18, "3", 13, "@종점명", 160, 213, 7); //종점명
  488. AddDefFormObject("굴림체", 18, "3", 14, "@소통상황", 112, 64, 35); //소통상황
  489. AddDefFormObject("굴림체", 18, "2", 15, "@00분", 80, 213, 35); //통행시간
  490. break;
  491. case 2:
  492. AddDefFormObject("굴림체", 16, "3", 0, "현위치", 100, 31, 7); //현위치
  493. AddDefFormObject("굴림체", 16, "3", 13, "@종점명1", 100, 133, 7); //종점명1
  494. AddDefFormObject("굴림체", 16, "3", 23, "@종점명2", 100, 265, 7); //종점명2
  495. AddDefFormObject("굴림체", 16, "2", 15, "@01분", 80, 133, 35); //통행시간1
  496. AddDefFormObject("굴림체", 16, "2", 25, "@02분", 80, 265, 35); //통행시간2
  497. break;
  498. case 3:
  499. AddDefFormObject("굴림체", 16, "3", 0, "현재위치부터", 126, 7, 7); //현재위치부터
  500. AddDefFormObject("굴림체", 16, "3", 13, "@종점명1", 85, 38, 50); //종점명1
  501. AddDefFormObject("굴림체", 16, "2", 15, "@1분", 80, 161, 50); //통행시간1
  502. AddDefFormObject("굴림체", 16, "3", 14, "@상황1", 53, 217, 50); //소통상황1
  503. AddDefFormObject("굴림체", 16, "3", 23, "@종점명2", 85, 38, 82); //종점명2
  504. AddDefFormObject("굴림체", 16, "2", 25, "@2분", 80, 161, 82); //통행시간2
  505. AddDefFormObject("굴림체", 16, "3", 24, "@상황2", 53, 217, 82); //소통상황2
  506. AddDefFormObject("굴림체", 16, "3", 33, "@종점명3", 85, 38, 117); //종점명3
  507. AddDefFormObject("굴림체", 16, "2", 35, "@3분", 80, 161, 117); //통행시간3
  508. AddDefFormObject("굴림체", 16, "3", 34, "@상황3", 53, 217, 117); //소통상황3
  509. break;
  510. case 6:
  511. AddDefFormObject("굴림체", 18, "3", 18, "@지점명", 300, 18, 20); //지점명
  512. AddDefFormObject("굴림체", 18, "3", 0, "주변", 126, 153, 20); //주변
  513. AddDefFormObject("굴림체", 18, "1", 0, "정체 극심", 126, 222, 20); //정체극심
  514. break;
  515. }
  516. }
  517. else
  518. {
  519. String sFontName = lblFontName->Caption;
  520. switch(ARows)
  521. {
  522. case 1:
  523. AddDefFormObject(sFontName, 18, "3", 12, "@StartName", 160, 16, 7); //@시점명 @StartName
  524. AddDefFormObject(sFontName, 18, "3", 13, "@EndName", 160, 213, 7); //@종점명 @EndName
  525. AddDefFormObject(sFontName, 18, "3", 14, "@Congest", 112, 64, 35); //@소통상황 @Congest
  526. AddDefFormObject(sFontName, 18, "2", 15, "@00Min", 80, 213, 35); //@통행시간 @00Min
  527. break;
  528. case 2:
  529. AddDefFormObject(sFontName, 16, "3", 0, "Location", 100, 31, 7); //현위치 Location
  530. AddDefFormObject(sFontName, 16, "3", 13, "@EndName1", 100, 133, 7); //종점명1 EndName1
  531. AddDefFormObject(sFontName, 16, "3", 23, "@EndName2", 100, 265, 7); //종점명2 EndName2
  532. AddDefFormObject(sFontName, 16, "2", 15, "@01Min", 80, 133, 35); //통행시간1 01Min
  533. AddDefFormObject(sFontName, 16, "2", 25, "@02Min", 80, 265, 35); //통행시간2 02Min
  534. break;
  535. case 3:
  536. AddDefFormObject(sFontName, 16, "3", 0, "From Location", 126, 7, 7); //현재위치부터 From Location
  537. AddDefFormObject(sFontName, 16, "3", 13, "@EndName1", 85, 38, 50); //종점명1 EndName1
  538. AddDefFormObject(sFontName, 16, "2", 15, "@1Min", 80, 161, 50); //통행시간1 1Min
  539. AddDefFormObject(sFontName, 16, "3", 14, "@Congest1", 53, 217, 50); //소통상황1 Congest1
  540. AddDefFormObject(sFontName, 16, "3", 23, "@EndName2", 85, 38, 82); //종점명2 EndName2
  541. AddDefFormObject(sFontName, 16, "2", 25, "@2Min", 80, 161, 82); //통행시간2 2Min
  542. AddDefFormObject(sFontName, 16, "3", 24, "@Congest2", 53, 217, 82); //소통상황2 Congest2
  543. AddDefFormObject(sFontName, 16, "3", 33, "@EndName3", 85, 38, 117); //종점명3 EndName3
  544. AddDefFormObject(sFontName, 16, "2", 35, "@3Min", 80, 161, 117); //통행시간3 3Min
  545. AddDefFormObject(sFontName, 16, "3", 34, "@Congest3", 53, 217, 117); //소통상황3 Congest3
  546. break;
  547. case 6:
  548. AddDefFormObject(sFontName, 18, "3", 18, "@SpotName", 300, 18, 20); //@지점명 @SpotName
  549. AddDefFormObject(sFontName, 18, "3", 0, "Around", 126, 153, 20); //주변 Around
  550. AddDefFormObject(sFontName, 18, "1", 0, "Congest Zam", 126, 222, 20); //정체극심 Congest Zam
  551. break;
  552. }
  553. }
  554. #if 0
  555. (String AFontName, int AFontSize, String AFontColor,
  556. int AObjType, String AText, int ASize, int APosX, int APosY)
  557. #endif
  558. }
  559. //---------------------------------------------------------------------------
  560. void __fastcall TVMSM500M::BtnDeleteClick(TObject *Sender)
  561. {
  562. int nIdx = TvList->DataController->FocusedRecordIndex;
  563. if (nIdx < 0) return;
  564. String sFormId = EdFormId->Text;
  565. if (sFormId.IsEmpty())
  566. {
  567. Application->MessageBox(lblText2->Caption.c_str(),//L"VMS 폼 삭제\r\n삭제할 VMS 폼을 목록에서 선택하세요.",
  568. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  569. return;
  570. }
  571. if (!CheckVmsFormUse(sFormId)) return;
  572. String sMsg;
  573. sMsg = lblText3->Caption + ": " + sFormId;//"VMS 폼 ID: " + sFormId;
  574. sMsg+= "\r\n" + lblText4->Caption;//"선택하신 VMS 폼 정보를 삭제하시겠습니까?";
  575. if (Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES) return;
  576. if (DelVmsForm(sFormId))
  577. {
  578. FUpdate = true;
  579. Application->MessageBox(lblText5->Caption.c_str(),//L"VMS 폼 삭제\r\nVMS 폼정보를 삭제 하였습니다.",
  580. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  581. FormClear();
  582. ChangeEditMode(1);
  583. LoadVmsForm();
  584. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_14, 0);
  585. }
  586. }
  587. //---------------------------------------------------------------------------
  588. void __fastcall TVMSM500M::BtnSaveImgFileClick(TObject *Sender)
  589. {
  590. if (EdFormId->Text == "") return;
  591. SaveDialog->Title = FTitle;
  592. SaveDialog->InitialDir = ExtractFilePath(Application->ExeName);
  593. SaveDialog->Filter = "Bitmap image Files (*.bmp)|*.bmp";
  594. SaveDialog->FileName = EdFormId->Text + ".bmp";
  595. if (SaveDialog->Execute())
  596. {
  597. try {
  598. String sFileName = SaveDialog->FileName;
  599. int iRet = sFileName.Pos(".bmp");
  600. if (iRet == 0)
  601. {
  602. sFileName = SaveDialog->FileName + ".bmp";
  603. }
  604. ImgForm->Picture->SaveToFile(sFileName);
  605. }
  606. catch (Exception &exception)
  607. {
  608. Application->ShowException(&exception);
  609. }
  610. }
  611. }
  612. //---------------------------------------------------------------------------
  613. void __fastcall TVMSM500M::ClearSymbloList()
  614. {
  615. for(int ii = 0; ii < FListSymb->Count; ii++)
  616. {
  617. Graphics::TBitmap *bitmap = (Graphics::TBitmap *)FListSymb->Items[ii];
  618. delete bitmap;
  619. }
  620. FListSymb->Clear();
  621. }
  622. //---------------------------------------------------------------------------
  623. void __fastcall TVMSM500M::TvListCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo,
  624. TMouseButton AButton, TShiftState AShift,
  625. bool &AHandled)
  626. {
  627. if (!ACellViewInfo) return;
  628. DisplayInfo();
  629. }
  630. //---------------------------------------------------------------------------
  631. void __fastcall TVMSM500M::TvListFocusedRecordChanged(TcxCustomGridTableView *Sender,
  632. TcxCustomGridRecord *APrevFocusedRecord, TcxCustomGridRecord *AFocusedRecord,
  633. bool ANewItemRecordFocusingChanged)
  634. {
  635. if (!AFocusedRecord) return;
  636. DisplayInfo();
  637. }
  638. //---------------------------------------------------------------------------
  639. void __fastcall TVMSM500M::CbSizeTypePropertiesChange(TObject *Sender)
  640. {
  641. EdSizeType->Text = CbSizeType->Text;
  642. BtnSearchClick(NULL);
  643. }
  644. //---------------------------------------------------------------------------
  645. void __fastcall TVMSM500M::BtnSearchClick(TObject *Sender)
  646. {
  647. RefreshData();
  648. EdFocus->SetFocus();
  649. ChangeEditMode(1);
  650. }
  651. //---------------------------------------------------------------------------
  652. void __fastcall TVMSM500M::RefreshData()
  653. {
  654. // 검색조건에 의한 링크 데이터 조회
  655. FormClear();
  656. LoadVmsForm();
  657. }
  658. //---------------------------------------------------------------------------
  659. void __fastcall TVMSM500M::FormClear()
  660. {
  661. FSelIdx = -1;
  662. ImgForm->Picture->Bitmap->FreeImage();
  663. ImgForm->Picture->Bitmap = NULL;
  664. EdFormId->Clear();
  665. EdFormName->Clear();
  666. EdFormDesc->Clear();
  667. CbFormKind->ItemIndex = 0;
  668. CbFormDispMode->ItemIndex = 1;
  669. CbFormDispDir->ItemIndex = 3;
  670. CbFormColor->ItemIndex = 0;
  671. FormObjectClear();
  672. FNewDb = false;
  673. }
  674. //---------------------------------------------------------------------------
  675. void __fastcall TVMSM500M::FormObjectClear()
  676. {
  677. m_pEdtDesigner->Clear();
  678. CMM_ClearGridTableView(TvObjList);
  679. }
  680. //---------------------------------------------------------------------------
  681. void __fastcall TVMSM500M::DisplayInfo()
  682. {
  683. FormClear();
  684. //m_pDesigner->Clear();
  685. PgEdit->ActivePage = TsEdit;
  686. FSelIdx = TvList->DataController->FocusedRecordIndex;
  687. if( FSelIdx <= -1 )
  688. return;
  689. DisplayFormInfo(FSelIdx);
  690. ChangeEditMode(3);
  691. }
  692. //---------------------------------------------------------------------------
  693. void __fastcall TVMSM500M::DisplayFormInfo(int AIdx)
  694. {
  695. TcxGridDataController *pDc = TvList->DataController;
  696. if (AIdx < FListSymb->Count)
  697. {
  698. Graphics::TBitmap *bitmap = (Graphics::TBitmap*)FListSymb->Items[AIdx];
  699. ImgForm->Picture->Bitmap->Assign(bitmap);
  700. }
  701. EdSizeType->Text = CbSizeType->Text;
  702. EdFormId->Text = VarToStr(pDc->Values[AIdx][Col01->Index]);
  703. EdFormName->Text = VarToStr(pDc->Values[AIdx][Col02->Index]);
  704. EdFormDesc->Text = VarToStr(pDc->Values[AIdx][Col03->Index]);
  705. CbFormColor->ItemIndex = VarToStr(pDc->Values[AIdx][Col08->Index]).ToIntDef(0);
  706. String sFormType = VarToStr(pDc->Values[AIdx][Col09->Index]);
  707. APP_SetCode(CbFormKind, sFormType);
  708. APP_SetCode(CbFormDispMode, VarToStr(pDc->Values[AIdx][Col06->Index]));
  709. APP_SetCode(CbFormDispDir, VarToStr(pDc->Values[AIdx][Col07->Index]));
  710. //m_pDesigner->BkColorCode = String(CbFormColor->ItemIndex);
  711. m_pEdtDesigner->BkColorCode = String(CbFormColor->ItemIndex);
  712. //LoadFormObjectInfo(EdFormId->Text, m_pDesigner, sFormType);
  713. LoadFormObjectInfo(EdFormId->Text, m_pEdtDesigner, sFormType);
  714. SelObjectListData();
  715. MyUseManager->LoadFromDb(EdFormId->Text);
  716. }
  717. //---------------------------------------------------------------------------
  718. String __fastcall TVMSM500M::FindObjectTypeName(String AFormType, String ATypeCd)
  719. {
  720. String sReturn = "--???--";
  721. TVmsObjType *pObj = MyVmsObjTypeManager->FLists.Find(AFormType.ToIntDef(-1));
  722. if (!pObj) return sReturn;
  723. TFormObjType *pType = pObj->FLists.Find(ATypeCd.ToIntDef(-1));
  724. if (pType) sReturn = pType->NAME;
  725. return sReturn;
  726. }
  727. //---------------------------------------------------------------------------
  728. void __fastcall TVMSM500M::FnFormObjectSelected(TMessage &Msg)
  729. {
  730. #if 0
  731. static long sLParam = -1;
  732. long cLParam = (long)Msg.LParam;
  733. if (sLParam == cLParam)
  734. {
  735. return;
  736. }
  737. sLParam = cLParam;
  738. #endif
  739. m_bEdit = true;
  740. try {
  741. ImgDesc99->Visible = false;
  742. Lbl99->Visible = false;
  743. Cb99->Visible = false;
  744. //Cb99->ItemIndex = 0;
  745. PnlIfsc->Visible = false;
  746. EdIfscId->Text = "";
  747. TVmsFormObject *pObj = (TVmsFormObject *)Msg.LParam;
  748. if (!pObj) return;
  749. if (!pObj->Selected) return;
  750. EdObjSeq->Text = String(pObj->ObjSeq);
  751. if (pObj->ObjType.ToIntDef(0) == 91 || //@축통행시간(고정)
  752. pObj->ObjType.ToIntDef(0) == 92) //@축소통상황(고정)
  753. {
  754. PnlIfsc->Visible = true;
  755. EdIfscId->Text = pObj->Tag;
  756. }
  757. String sFormType = APP_GetCode(CbFormKind);
  758. if (sFormType == "15")
  759. {
  760. //도형식배경소통정보
  761. if (pObj->ObjType.ToIntDef(0) == 0 || //문자열
  762. pObj->ObjType.ToIntDef(0) == 1 || //심볼
  763. pObj->ObjType.ToIntDef(0) == 2) //이미지
  764. {
  765. ImgDesc99->Visible = true;
  766. Lbl99->Visible = true;
  767. Cb99->Visible = true;
  768. TNotifyEvent evt = Cb99->Properties->OnChange;
  769. Cb99->Properties->OnChange = NULL;
  770. APP_SetCode(Cb99, pObj->Tag);
  771. Cb99->Properties->OnChange = evt;
  772. }
  773. }
  774. EdObjId->Text = pObj->ObjId;
  775. ChkBlinking->Checked = pObj->Blink;
  776. CbBkColor->ItemIndex = pObj->BkColorCode.ToInt();
  777. SeLeft->Value = pObj->GetLeft();
  778. SeTop->Value = pObj->GetTop();
  779. if (pObj->DrawType == odtText)
  780. {
  781. APP_SetCode(CbObjType, pObj->ObjType);
  782. APP_SetCode(CbFontName, pObj->FontNameCode);
  783. CbFontColor->ItemIndex = pObj->FontColorCode.ToInt();
  784. SeFontSize->Value = pObj->FontSize;
  785. ChkFontBold->Checked = pObj->FontBold;
  786. CbTextAlign->ItemIndex = pObj->TextAlign;
  787. if (EdTextData->Text != pObj->Text) EdTextData->Text = pObj->Text;
  788. if (pObj->ObjType.ToIntDef(0) == 19) //소통정보(가변)
  789. {
  790. EdTextData->Properties->ReadOnly = true;
  791. }
  792. else
  793. {
  794. EdTextData->Properties->ReadOnly = false;
  795. }
  796. //CbTextType->Visible = true;
  797. //CbImageType->Visible= false;
  798. }
  799. else
  800. {
  801. APP_SetCode(CbObjType, pObj->ObjType);
  802. if (EdTextData->Text != pObj->Text) EdTextData->Text = pObj->Text;
  803. //CbTextType->Visible = false;
  804. //CbImageType->Visible= true;
  805. }
  806. TcxGridFocusedRecordChangedEvent evt = TvObjList->OnFocusedRecordChanged;
  807. TvObjList->OnFocusedRecordChanged = NULL;
  808. String sObjSeq = String(pObj->ObjSeq);
  809. CMM_SetGridRow(CxObjList, TvObjList, sObjSeq, ColSeq->Index);
  810. TvObjList->OnFocusedRecordChanged = evt;
  811. } catch(...) {}
  812. m_bEdit = false;
  813. }
  814. //---------------------------------------------------------------------------
  815. void __fastcall TVMSM500M::TvObjListFocusedRecordChanged(TcxCustomGridTableView *Sender,
  816. TcxCustomGridRecord *APrevFocusedRecord, TcxCustomGridRecord *AFocusedRecord,
  817. bool ANewItemRecordFocusingChanged)
  818. {
  819. #if 0
  820. if (AFocusedRecord == NULL)
  821. {
  822. return;
  823. }
  824. #endif
  825. ImgDesc99->Visible = false;
  826. Lbl99->Visible = false;
  827. Cb99->Visible = false;
  828. //Cb99->ItemIndex = 0;
  829. PnlIfsc->Visible = false;
  830. EdIfscId->Text = "";
  831. if (TvObjList->ViewData->RecordCount <= 0) return;
  832. if (TvObjList->DataController->FocusedRowIndex < 0) return;
  833. TcxDataController *pGDC = TvObjList->DataController;
  834. int nIndex = pGDC->FocusedRecordIndex;
  835. String sObjSeq = pGDC->Values[nIndex][ColSeq->Index];
  836. String sObjId = pGDC->Values[nIndex][ColId->Index];
  837. EdObjSeq->Text = sObjSeq;
  838. //m_pEdtDesigner->SelectObject(sObjSeq.ToInt());
  839. TVmsFormObject *pObj = m_pEdtDesigner->FindObject(sObjSeq.ToInt());
  840. if (pObj)
  841. {
  842. if (pObj->ObjType.ToIntDef(0) == 91 || //@축통행시간(고정)
  843. pObj->ObjType.ToIntDef(0) == 92) //@축소통상황(고정)
  844. {
  845. PnlIfsc->Visible = true;
  846. EdIfscId->Text = pObj->Tag;
  847. }
  848. if (pObj->ObjType.ToIntDef(0) == 19) //소통정보(가변)
  849. {
  850. EdTextData->Properties->ReadOnly = true;
  851. }
  852. else
  853. {
  854. EdTextData->Properties->ReadOnly = false;
  855. }
  856. String sFormType = APP_GetCode(CbFormKind);
  857. if (sFormType == "15")
  858. {
  859. //도형식배경소통정보
  860. if (pObj->ObjType.ToIntDef(0) == 0 || //문자열
  861. pObj->ObjType.ToIntDef(0) == 1 || //심볼
  862. pObj->ObjType.ToIntDef(0) == 2) //이미지
  863. {
  864. ImgDesc99->Visible = true;
  865. Lbl99->Visible = true;
  866. Cb99->Visible = true;
  867. TNotifyEvent evt = Cb99->Properties->OnChange;
  868. Cb99->Properties->OnChange = NULL;
  869. APP_SetCode(Cb99, pObj->Tag);
  870. Cb99->Properties->OnChange = evt;
  871. }
  872. }
  873. }
  874. }
  875. //---------------------------------------------------------------------------
  876. void __fastcall TVMSM500M::SelObjectListData()
  877. {
  878. CMM_ClearGridTableView(TvObjList);
  879. int nObjCnt = m_pEdtDesigner->GetObjectCount();
  880. TVmsFormObject *pObj;
  881. for(int ii = 0; ii < nObjCnt; ii++)
  882. {
  883. pObj = m_pEdtDesigner->GetObject(ii);
  884. if (pObj)
  885. {
  886. AddObjectToList(pObj);
  887. }
  888. }
  889. if (TvObjList->DataController->RecordCount > 0) TvObjList->DataController->FocusedRecordIndex = 0;
  890. }
  891. //---------------------------------------------------------------------------
  892. void __fastcall TVMSM500M::AddObjectToList(TVmsFormObject *pObj, bool bSelect/*=false*/)
  893. {
  894. int nAddRow = -1;
  895. String sFormType = APP_GetCode(CbFormKind);
  896. TcxGridDataController *pGDC = TvObjList->DataController;
  897. try
  898. {
  899. TvObjList->BeginUpdate();
  900. pGDC->BeginUpdate();
  901. nAddRow = pGDC->AppendRecord();
  902. pGDC->Values[nAddRow][ColSeq->Index] = String(pObj->ObjSeq);
  903. pGDC->Values[nAddRow][ColId->Index] = String(pObj->ObjId);
  904. pGDC->Values[nAddRow][ColType->Index] = FindObjectTypeName(sFormType, pObj->ObjType);
  905. pGDC->Values[nAddRow][ColData->Index] = pObj->Text;
  906. #if 0
  907. if (pObj->ObjKind == OBJKIND_TEXT)
  908. {
  909. pGDC->Values[nAddRow][ColKind->Index] = "문자열";
  910. pGDC->Values[nAddRow][ColType->Index] = "";//GetComboBoxCodeName(CbTextType, pObj->ObjType);
  911. pGDC->Values[nAddRow][ColData->Index] = pObj->Text;
  912. }
  913. else
  914. if (pObj->ObjKind == OBJKIND_IMAGE)
  915. {
  916. pGDC->Values[nAddRow][ColKind->Index] = "이미지";
  917. pGDC->Values[nAddRow][ColType->Index] = "";//GetComboBoxCodeName(CbImageType, pObj->ObjType);
  918. pGDC->Values[nAddRow][ColData->Index] = pObj->Text;
  919. }
  920. else
  921. if (pObj->ObjKind == OBJKIND_IMAGEID)
  922. {
  923. pGDC->Values[nAddRow][ColKind->Index] = "이미지ID";
  924. pGDC->Values[nAddRow][ColType->Index] = "";//GetComboBoxCodeName(CbImageType, pObj->ObjType);
  925. pGDC->Values[nAddRow][ColData->Index] = pObj->Text + " [" + pObj->ImageId + "]";
  926. }
  927. #endif
  928. //pGDC->Values[nAddRow][ColX->Index] = String(pObj->GetLeft());
  929. //pGDC->Values[nAddRow][ColY->Index] = String(pObj->GetTop());
  930. pGDC->Values[nAddRow][ColIfscId->Index] = pObj->Tag;
  931. pGDC->Values[nAddRow][ColMem->Index] = (int)pObj;
  932. }
  933. __finally
  934. {
  935. pGDC->EndUpdate();
  936. TvObjList->EndUpdate();
  937. if (bSelect && pGDC->RecordCount > 0) if (nAddRow >= 0) pGDC->FocusedRecordIndex = nAddRow;
  938. }
  939. }
  940. //---------------------------------------------------------------------------
  941. void __fastcall TVMSM500M::BtnSortReClick(TObject *Sender)
  942. {
  943. TcxButton *pBtn = (TcxButton *)Sender;
  944. ReForm->Paragraph->Numbering = nsNone;
  945. ReForm->Paragraph->Alignment = (TAlignment)pBtn->Tag;
  946. }
  947. //---------------------------------------------------------------------------
  948. void __fastcall TVMSM500M::BtnBoldReClick(TObject *Sender)
  949. {
  950. if (ReForm->SelAttributes->Style.Contains(fsBold))
  951. ReForm->SelAttributes->Style = TFontStyles() >> fsBold;
  952. else
  953. ReForm->SelAttributes->Style = TFontStyles() << fsBold;
  954. }
  955. //---------------------------------------------------------------------------
  956. void __fastcall TVMSM500M::SeFontSizeRePropertiesChange(TObject *Sender)
  957. {
  958. if (((TcxSpinEdit*)Sender)->Value < ((TcxSpinEdit*)Sender)->Properties->MinValue)
  959. ((TcxSpinEdit*)Sender)->Value = ((TcxSpinEdit*)Sender)->Properties->MinValue;
  960. else if(((TcxSpinEdit*)Sender)->Value > ((TcxSpinEdit*)Sender)->Properties->MaxValue &&
  961. ((TcxSpinEdit*)Sender)->Properties->MaxValue)
  962. ((TcxSpinEdit*)Sender)->Value = ((TcxSpinEdit*)Sender)->Properties->MaxValue;
  963. ReForm->SelAttributes->Size = ((TcxSpinEdit*)Sender)->Value;
  964. }
  965. //---------------------------------------------------------------------------
  966. void __fastcall TVMSM500M::CbFontColorReClick(TObject *Sender)
  967. {
  968. switch(CbFontColorRe->ItemIndex)
  969. {
  970. case 0 : ReForm->SelAttributes->Color = clBlack; break;
  971. case 1 : ReForm->SelAttributes->Color = clRed; break;
  972. case 2 : ReForm->SelAttributes->Color = clLime; break;
  973. case 3 :
  974. default: ReForm->SelAttributes->Color = clYellow; break;
  975. }
  976. }
  977. //---------------------------------------------------------------------------
  978. void __fastcall TVMSM500M::CbFontNameReClick(TObject *Sender)
  979. {
  980. String sFontCode = APP_GetCode(CbFontNameRe);
  981. String sFontName = APP_GetCodeName(CbFontNameRe, sFontCode);
  982. ReForm->SelAttributes->Name = sFontName;
  983. }
  984. //---------------------------------------------------------------------------
  985. void __fastcall TVMSM500M::ReFormChange(TObject *Sender)
  986. {
  987. if (ChkAutoPreview->Checked) BtnPreviewClick(NULL);
  988. }
  989. //---------------------------------------------------------------------------
  990. void __fastcall TVMSM500M::ChkAutoPreviewClick(TObject *Sender)
  991. {
  992. if (ChkAutoPreview->Checked) BtnPreviewClick(NULL);
  993. }
  994. //---------------------------------------------------------------------------
  995. void __fastcall TVMSM500M::BtnPreviewClick(TObject *Sender)
  996. {
  997. m_pEdtDesigner->PreviewDrawForm(ReForm, ReFormTemp, ImgEdtPreview);
  998. }
  999. //---------------------------------------------------------------------------
  1000. void __fastcall TVMSM500M::BtnReApplyClick(TObject *Sender)
  1001. {
  1002. BtnPreviewClick(NULL);
  1003. m_pEdtDesigner->AddDrawFormToVmsForm(ReForm, ImgEdtPreview);
  1004. /*
  1005. * 신규로 등록한 객체의 객체타입과 폰트코드를 업데이트 한다.
  1006. */
  1007. CbVmsObjType->ItemIndex = 0; // For 고정문자열
  1008. String sObjType = APP_GetCode(CbVmsObjType);
  1009. TVmsFormObject *pObj;
  1010. int nObjCnt = m_pEdtDesigner->GetObjectCount();
  1011. for (int ii = 0; ii < nObjCnt; ii++)
  1012. {
  1013. pObj = m_pEdtDesigner->GetObject(ii);
  1014. if (pObj->ObjType == "XXX" && pObj->FontNameCode == "XXX")
  1015. {
  1016. pObj->ObjType = sObjType;
  1017. pObj->FontNameCode = APP_GetCodeIdByName(CbFontName, pObj->FontName);
  1018. }
  1019. }
  1020. PgEdit->ActivePageIndex = 0;
  1021. SelObjectListData();
  1022. }
  1023. //---------------------------------------------------------------------------
  1024. void __fastcall TVMSM500M::CbFormKindPropertiesChange(TObject *Sender)
  1025. {
  1026. CbVmsObjType->Properties->Items->Clear();
  1027. CbObjType->Properties->Items->Clear();
  1028. String sFormType = APP_GetCode(CbFormKind);
  1029. int nFormKind = sFormType.ToIntDef(0);
  1030. TVmsObjType *pObj = MyVmsObjTypeManager->FLists.Find(nFormKind);
  1031. if (!pObj) return;
  1032. FOR_STL(TFormObjType*, pType, pObj->FLists)
  1033. {
  1034. String sType;
  1035. sType.printf(L"%2d", pType->TYPE);
  1036. sType = pType->TYPE;
  1037. CbVmsObjType->Properties->Items->Add(" [" + sType + "] " + pType->NAME);
  1038. CbObjType->Properties->Items->Add(" [" + sType + "] " + pType->NAME);
  1039. }
  1040. CbVmsObjType->ItemIndex = 0;
  1041. CbObjType->ItemIndex = 0;
  1042. //EdFocus->SetFocus();
  1043. }
  1044. //---------------------------------------------------------------------------
  1045. void __fastcall TVMSM500M::CbFormColorClick(TObject *Sender)
  1046. {
  1047. m_pEdtDesigner->SetBkColor(String(CbFormColor->ItemIndex));
  1048. //m_pDesigner->BkColorCode = APP_GetCode(CbFormColor);
  1049. //m_pEdtDesigner->BkColorCode = m_pDesigner->BkColorCode;
  1050. }
  1051. //---------------------------------------------------------------------------
  1052. void __fastcall TVMSM500M::BtnMoveClick(TObject *Sender)
  1053. {
  1054. if (m_bEdit) return;
  1055. TcxButton *pBtn = (TcxButton *)Sender;
  1056. switch(pBtn->Tag)
  1057. {
  1058. case 0: m_pEdtDesigner->StepMoveLeft(); break;
  1059. case 1: m_pEdtDesigner->StepMoveRight(); break;
  1060. case 2: m_pEdtDesigner->StepMoveUp(); break;
  1061. case 3: m_pEdtDesigner->StepMoveDown(); break;
  1062. }
  1063. }
  1064. //---------------------------------------------------------------------------
  1065. void __fastcall TVMSM500M::BtnAlignClick(TObject *Sender)
  1066. {
  1067. if (m_bEdit) return;
  1068. TcxButton *pBtn = (TcxButton *)Sender;
  1069. if (m_pEdtDesigner->GetSelectedObjectCount() < 1) return;
  1070. switch(pBtn->Tag)
  1071. {
  1072. case 0: m_pEdtDesigner->SetLeftAlign(m_pEdtDesigner->GetLeftAlign()); break;
  1073. case 1: m_pEdtDesigner->SetRightAlign(m_pEdtDesigner->GetRightAlign()); break;
  1074. case 2: m_pEdtDesigner->SetTopAlign(m_pEdtDesigner->GetTopAlign()); break;
  1075. case 3: m_pEdtDesigner->SetBottomAlign(m_pEdtDesigner->GetBottomAlign()); break;
  1076. }
  1077. }
  1078. //---------------------------------------------------------------------------
  1079. void __fastcall TVMSM500M::BtnCenterClick(TObject *Sender)
  1080. {
  1081. if (m_bEdit) return;
  1082. TcxButton *pBtn = (TcxButton *)Sender;
  1083. if (m_pEdtDesigner->GetSelectedObjectCount() < 1) return;
  1084. switch(pBtn->Tag)
  1085. {
  1086. case 0: m_pEdtDesigner->SetAlignWidthCenter(); break;
  1087. case 1: m_pEdtDesigner->SetAlignHeightCenter(); break;
  1088. }
  1089. }
  1090. //---------------------------------------------------------------------------
  1091. void __fastcall TVMSM500M::SePosPropertiesChange(TObject *Sender)
  1092. {
  1093. if (m_bEdit) return;
  1094. if (((TcxSpinEdit*)Sender)->Value < ((TcxSpinEdit*)Sender)->Properties->MinValue)
  1095. ((TcxSpinEdit*)Sender)->Value = ((TcxSpinEdit*)Sender)->Properties->MinValue;
  1096. else if(((TcxSpinEdit*)Sender)->Value > ((TcxSpinEdit*)Sender)->Properties->MaxValue &&
  1097. ((TcxSpinEdit*)Sender)->Properties->MaxValue)
  1098. ((TcxSpinEdit*)Sender)->Value = ((TcxSpinEdit*)Sender)->Properties->MaxValue;
  1099. TcxSpinEdit *pPos = (TcxSpinEdit*)Sender;
  1100. if (m_pEdtDesigner->GetSelectedObjectCount() < 1) return;
  1101. int nValue = pPos->Value;
  1102. switch(pPos->Tag)
  1103. {
  1104. case 0: m_pEdtDesigner->MoveLeft(nValue); break;
  1105. case 1: m_pEdtDesigner->MoveUp(nValue); break;
  1106. }
  1107. }
  1108. //---------------------------------------------------------------------------
  1109. void __fastcall TVMSM500M::CbBkColorClick(TObject *Sender)
  1110. {
  1111. if (m_bEdit) return;
  1112. //if (m_pEdtDesigner->GetSelectedObjectCount() < 1) return;
  1113. m_pEdtDesigner->SetObjectBkColorCode(String(CbBkColor->ItemIndex));
  1114. }
  1115. //---------------------------------------------------------------------------
  1116. void __fastcall TVMSM500M::ChkBlinkingClick(TObject *Sender)
  1117. {
  1118. if (m_bEdit) return;
  1119. //if (m_pEdtDesigner->GetSelectedObjectCount() < 1) return;
  1120. m_pEdtDesigner->SetObjectBlink(ChkBlinking->Checked);
  1121. }
  1122. //---------------------------------------------------------------------------
  1123. void __fastcall TVMSM500M::EdTextDataKeyPress(TObject *Sender, wchar_t &Key)
  1124. {
  1125. if (m_bEdit) return;
  1126. if (Key == '\'')
  1127. {
  1128. Key = '`';
  1129. }
  1130. }
  1131. //---------------------------------------------------------------------------
  1132. void __fastcall TVMSM500M::EdTextDataPropertiesChange(TObject *Sender)
  1133. {
  1134. if (m_bEdit) return;
  1135. //if (m_pEdtDesigner->GetSelectedObjectCount() < 1) return;
  1136. m_pEdtDesigner->SetObejctText(EdTextData->Text);
  1137. }
  1138. //---------------------------------------------------------------------------
  1139. void __fastcall TVMSM500M::Button1Click(TObject *Sender)
  1140. {
  1141. TVmsFormObject *pObj;
  1142. int nObjCnt = m_pEdtDesigner->GetObjectCount();
  1143. for (int ii = 0; ii < nObjCnt; ii++)
  1144. {
  1145. pObj = m_pEdtDesigner->GetObject(ii);
  1146. if (!pObj->Selected) continue;
  1147. if (pObj->ObjKind != OBJKIND_TEXT) continue;
  1148. pObj->SetRuntimeText(Edit1->Text);
  1149. }
  1150. }
  1151. //---------------------------------------------------------------------------
  1152. void __fastcall TVMSM500M::SeFontSizePropertiesChange(TObject *Sender)
  1153. {
  1154. if (m_bEdit) return;
  1155. if (((TcxSpinEdit*)Sender)->Value < ((TcxSpinEdit*)Sender)->Properties->MinValue)
  1156. ((TcxSpinEdit*)Sender)->Value = ((TcxSpinEdit*)Sender)->Properties->MinValue;
  1157. else if(((TcxSpinEdit*)Sender)->Value > ((TcxSpinEdit*)Sender)->Properties->MaxValue &&
  1158. ((TcxSpinEdit*)Sender)->Properties->MaxValue)
  1159. ((TcxSpinEdit*)Sender)->Value = ((TcxSpinEdit*)Sender)->Properties->MaxValue;
  1160. //if (m_pEdtDesigner->GetSelectedObjectCount() < 1) return;
  1161. int nFontSize = SeFontSize->Value;
  1162. m_pEdtDesigner->SetObejctFontSize(nFontSize);
  1163. }
  1164. //---------------------------------------------------------------------------
  1165. void __fastcall TVMSM500M::CbFontNamePropertiesChange(TObject *Sender)
  1166. {
  1167. if (m_bEdit) return;
  1168. //if (m_pEdtDesigner->GetSelectedObjectCount() < 1) return;
  1169. String sFontCode = APP_GetCode(CbFontName);
  1170. String sFontName = APP_GetCodeName(CbFontName, sFontCode);
  1171. m_pEdtDesigner->SetObejctFontName(sFontName.Trim());
  1172. m_pEdtDesigner->SetObejctFontNameCode(sFontCode);
  1173. }
  1174. //---------------------------------------------------------------------------
  1175. void __fastcall TVMSM500M::CbFontColorClick(TObject *Sender)
  1176. {
  1177. if (m_bEdit) return;
  1178. //if (m_pEdtDesigner->GetSelectedObjectCount() < 1) return;
  1179. m_pEdtDesigner->SetObejctFontColorCode(String(CbFontColor->ItemIndex));
  1180. }
  1181. //---------------------------------------------------------------------------
  1182. void __fastcall TVMSM500M::CbTextAlignPropertiesChange(TObject *Sender)
  1183. {
  1184. if (m_bEdit) return;
  1185. //if (m_pEdtDesigner->GetSelectedObjectCount() < 1) return;
  1186. m_pEdtDesigner->SetObejctTextAlign(CbTextAlign->ItemIndex);
  1187. }
  1188. //---------------------------------------------------------------------------
  1189. void __fastcall TVMSM500M::EdObjIdPropertiesChange(TObject *Sender)
  1190. {
  1191. if (m_bEdit) return;
  1192. //if (m_pEdtDesigner->GetSelectedObjectCount() < 1) return;
  1193. try {
  1194. int nObjId;
  1195. TryStrToInt(EdObjId->Text.Trim(), nObjId);
  1196. m_pEdtDesigner->SetObejctId(nObjId);
  1197. } catch(...) {}
  1198. }
  1199. //---------------------------------------------------------------------------
  1200. void __fastcall TVMSM500M::ChkFontBoldClick(TObject *Sender)
  1201. {
  1202. if (m_bEdit) return;
  1203. //if (m_pEdtDesigner->GetSelectedObjectCount() < 1) return;
  1204. m_pEdtDesigner->SetObejctFontBold(ChkFontBold->Checked);
  1205. }
  1206. //---------------------------------------------------------------------------
  1207. bool __fastcall TVMSM500M::GetNextVmsImgeId(int &ANmbr)
  1208. {
  1209. String sQry;
  1210. TADOQuery *pADO = NULL;
  1211. sQry = "SELECT NVL(MAX(SYMBLIB_NMBR), 5999)+1 AS NEWID FROM TB_VMS_SYMB_LIB WHERE SYMBLIB_NMBR BETWEEN 6000 AND 6999 \r\n";
  1212. try
  1213. {
  1214. try
  1215. {
  1216. pADO = new TADOQuery(NULL);
  1217. pADO->Close();
  1218. pADO->Connection = ITSDb_GetConnection();
  1219. pADO->SQL->Clear();
  1220. pADO->SQL->Text = sQry;
  1221. pADO->Open();
  1222. ANmbr = pADO->FieldByName("NEWID")->AsInteger;
  1223. return true;
  1224. }
  1225. catch(EDatabaseError &E)
  1226. {
  1227. DBERRORLOG("VMS Image ID Query", String(E.ClassName()), E.Message, sQry);
  1228. throw Exception(String(E.ClassName()) + E.Message);
  1229. }
  1230. catch(Exception &e)
  1231. {
  1232. DBERRORLOG("VMS Image ID Query", String(e.ClassName()), e.Message, sQry);
  1233. throw Exception(String(e.ClassName()) + e.Message);
  1234. }
  1235. }
  1236. __finally
  1237. {
  1238. if (pADO)
  1239. {
  1240. pADO->Close();
  1241. delete pADO;
  1242. }
  1243. }
  1244. return false;
  1245. }
  1246. //---------------------------------------------------------------------------
  1247. bool __fastcall TVMSM500M::InsertVmsImage(String ANmbr, String AExpl, String ATypeCd)
  1248. {
  1249. String sQry;
  1250. TADOQuery *pADO = NULL;
  1251. sQry = "INSERT INTO TB_VMS_SYMB_LIB(SYMBLIB_NMBR, RGST_DT, SYMB_EXPL, IMAG_DATA, VMS_TYPE_CD) \r\n"
  1252. " VALUES(:p01, :p02, :p03, :p04, :p05) \r\n";
  1253. int nRowHeight = 0;
  1254. TMemoryStream *dataStream = new TMemoryStream();
  1255. ImgEdtTemp->Picture->Bitmap->SaveToStream(dataStream);
  1256. try
  1257. {
  1258. try
  1259. {
  1260. pADO = new TADOQuery(NULL);
  1261. pADO->Close();
  1262. pADO->Connection = ITSDb_GetConnection();
  1263. ITSDb_SQLText(pADO, sQry);
  1264. ITSDb_SQLBind(pADO, "p01", ANmbr);
  1265. ITSDb_SQLBind(pADO, "p02", Now().FormatString("yyyymmddhhnnss"));
  1266. ITSDb_SQLBind(pADO, "p03", AExpl);
  1267. pADO->Parameters->ParamByName("p04")->LoadFromStream(dataStream, ftBlob);
  1268. ITSDb_SQLBind(pADO, "p05", ATypeCd);
  1269. pADO->ExecSQL();
  1270. return true;
  1271. }
  1272. catch(EDatabaseError &E)
  1273. {
  1274. DBERRORMSG("VMS Iamge Update", String(E.ClassName()), E.Message, sQry);
  1275. throw Exception(String(E.ClassName()) + E.Message);
  1276. }
  1277. catch(Exception &e)
  1278. {
  1279. DBERRORMSG("MS Iamge Update", String(e.ClassName()), e.Message, sQry);
  1280. throw Exception(String(e.ClassName()) + e.Message);
  1281. }
  1282. }
  1283. __finally
  1284. {
  1285. if (pADO)
  1286. {
  1287. pADO->Close();
  1288. delete pADO;
  1289. }
  1290. if (dataStream) delete dataStream;
  1291. dataStream = NULL;
  1292. }
  1293. return true;
  1294. }
  1295. //---------------------------------------------------------------------------
  1296. void __fastcall TVMSM500M::OpenBmpCanClose(TObject *Sender, bool &CanClose)
  1297. {
  1298. String sFName = OpenBmp->FileName;
  1299. sFName = sFName.UpperCase();
  1300. if (sFName.SubString(sFName.Length()-2, 3) != "BMP")
  1301. {
  1302. Application->MessageBox(FrmLang->lblImage11->Caption.c_str(),//L"BMP 파일만 적용 가능합니다.",
  1303. lblImage1->Caption.c_str(),//L"VMS 이미지 선택",
  1304. MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  1305. return;
  1306. }
  1307. try
  1308. {
  1309. DWORD dwFileSize = ITSUtil_GetFileSize(sFName);
  1310. if (dwFileSize <= 0)
  1311. {
  1312. Application->MessageBox(FrmLang->lblImage12->Caption.c_str(),//L"이미지 파일을 읽어 오는데 실패하였습니다.",
  1313. lblImage1->Caption.c_str(),//L"VMS 이미지 선택",
  1314. MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  1315. return;
  1316. }
  1317. if (dwFileSize > (1024 * 32)) // Max 32Kbytes
  1318. {
  1319. Application->MessageBox(FrmLang->lblImage13->Caption.c_str(),//L"이미지 파일의 최대 크기는 32KBytes를 넘을 수 없습니다.\r\n이미지 파일의 용량을 줄여 주세요.",
  1320. lblImage1->Caption.c_str(),//L"VMS 이미지 선택",
  1321. MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  1322. return;
  1323. }
  1324. ImgEdtTemp->Picture->Bitmap->FreeImage();
  1325. ImgEdtTemp->Picture->Bitmap = NULL;
  1326. ImgEdtTemp->Picture->Bitmap->LoadFromFile(sFName);
  1327. String sExpl = EdFormId->Text.Trim();
  1328. int nNmbr;
  1329. if (!GetNextVmsImgeId(nNmbr))
  1330. {
  1331. Application->MessageBox(FrmLang->lblImage4->Caption.c_str(),//L"새로운 VMS 이미지정보를 생성하지 못하였습니다.\r\n프로그램 종료후에 다시 시도해 보세요.",
  1332. lblImage1->Caption.c_str(),//L"VMS 이미지 선택",
  1333. MB_OK|MB_ICONERROR|MB_APPLMODAL);
  1334. return;
  1335. }
  1336. if (!InsertVmsImage(String(nNmbr), sExpl, "VMP0"))
  1337. {
  1338. Application->MessageBox(FrmLang->lblImage4->Caption.c_str(),//L"새로운 VMS 이미지정보를 저장하지 못하였습니다.\r\n프로그램 종료후에 다시 시도해 보세요.",
  1339. lblImage1->Caption.c_str(),//L"VMS 이미지 선택",
  1340. MB_OK|MB_ICONERROR|MB_APPLMODAL);
  1341. return;
  1342. }
  1343. TVmsFormObject *pObj = m_pEdtDesigner->AddObject(odtBmp);
  1344. if (!pObj) return;
  1345. int nNewObjSeq = m_pEdtDesigner->GetNewObjectSeq();
  1346. EdObjSeq->Text = String(nNewObjSeq);
  1347. pObj->ObjSeq = nNewObjSeq;
  1348. pObj->ObjKind = OBJKIND_IMAGE; // "1"
  1349. pObj->ObjType = "2";
  1350. pObj->ObjSize = (int)dwFileSize;
  1351. pObj->BkColorCode = m_pEdtDesigner->BkColorCode;
  1352. pObj->Blink = false;
  1353. pObj->Tag = "N";
  1354. pObj->SetBitmap(ImgEdtTemp->Picture->Bitmap);
  1355. pObj->Text = lblFile1->Caption;//"파일이미지";//ExtractShortPathName(sFName).c_str();
  1356. pObj->ImageId = String(nNmbr);
  1357. pObj->SetPos(0, 0);
  1358. pObj->EditMode = true;
  1359. pObj->Show();
  1360. AddObjectToList(pObj, true);
  1361. }
  1362. catch(...)
  1363. {
  1364. return;
  1365. }
  1366. }
  1367. //---------------------------------------------------------------------------
  1368. void __fastcall TVMSM500M::BtnAddTextClick(TObject *Sender)
  1369. {
  1370. if (CbVmsObjType->ItemIndex < 0) return;
  1371. String sFormType = APP_GetCode(CbFormKind);
  1372. String sObjType = APP_GetCode(CbVmsObjType);
  1373. int nObjType = sObjType.ToIntDef(0);
  1374. String sObjText = FindObjectTypeName(sFormType, sObjType);
  1375. String sFontName = FrmLang->lblFontName->Caption;//"굴림체";
  1376. String sFontNameCode = "3";
  1377. String sFontColorCode = "2"; //Green
  1378. String sFontSize = 18;
  1379. bool bFontBold = true;
  1380. switch(nObjType)
  1381. {
  1382. case 1: //이미지 심볼
  1383. case 3: //소통정보배경이미지
  1384. case 17: //@소통이미지1
  1385. case 27: //@소통이미지2
  1386. case 37: //@소통이미지3
  1387. case 47: //@소통이미지4
  1388. {
  1389. TVMSM510M *pSelForm = new TVMSM510M(this);
  1390. if (nObjType == 1 || nObjType == 3)
  1391. {
  1392. pSelForm->FImageType = nObjType;
  1393. }
  1394. else
  1395. {
  1396. pSelForm->FImageType = 2;
  1397. }
  1398. pSelForm->ShowModal();
  1399. if (!pSelForm->m_bSelected)
  1400. {
  1401. delete pSelForm;
  1402. return;
  1403. }
  1404. TVmsFormObject *pObj = m_pEdtDesigner->AddObject(odtBmp);
  1405. if (!pObj) return;
  1406. int nNewObjSeq = m_pEdtDesigner->GetNewObjectSeq();
  1407. EdObjSeq->Text = String(nNewObjSeq);
  1408. pObj->ObjSeq = nNewObjSeq;
  1409. pObj->ObjKind = OBJKIND_IMAGEID; // "2"
  1410. pObj->ObjType = sObjType;
  1411. pObj->ObjSize = pSelForm->ImgPreView->Picture->Bitmap->Width * pSelForm->ImgPreView->Picture->Bitmap->Height;
  1412. pObj->BkColorCode = m_pEdtDesigner->BkColorCode;
  1413. pObj->Blink = false;
  1414. pObj->Tag = "N";
  1415. pObj->Text = sObjText;
  1416. pObj->ImageId = pSelForm->EdNmbr->Text;
  1417. pObj->SetBitmap(pSelForm->ImgPreView->Picture->Bitmap);
  1418. pObj->SetPos(0, 0);
  1419. pObj->Show();
  1420. AddObjectToList(pObj, true);
  1421. delete pSelForm;
  1422. }
  1423. break;
  1424. case 2: //파일이미지
  1425. OpenBmp->FileName = "";
  1426. OpenBmp->Execute();
  1427. break;
  1428. #if 0
  1429. case 17: //@방향이미지1
  1430. case 27: //@방향이미지2
  1431. case 37: //@방향이미지3
  1432. case 47: //@방향이미지4
  1433. {
  1434. TVmsFormObject *pObj = m_pEdtDesigner->AddObject(odtBmp);
  1435. if (!pObj) return;
  1436. int nNewObjSeq = m_pEdtDesigner->GetNewObjectSeq();
  1437. EdObjSeq->Text = String(nNewObjSeq);
  1438. pObj->ObjSeq = nNewObjSeq;
  1439. pObj->ObjKind = OBJKIND_IMAGEID; // "2"
  1440. pObj->ObjType = sObjType;
  1441. pObj->ObjSize = ImgDir->Picture->Bitmap->Width * ImgDir->Picture->Bitmap->Height;
  1442. pObj->BkColorCode = m_pEdtDesigner->BkColorCode;
  1443. pObj->Blink = false;
  1444. //pObj->Text = CbVmsObjType->Text;
  1445. pObj->Text = sObjText;
  1446. pObj->ImageId = "0";
  1447. pObj->SetBitmap(ImgDir->Picture->Bitmap);
  1448. pObj->SetPos(0, 0);
  1449. pObj->Show();
  1450. AddObjectToList(pObj, true);
  1451. }
  1452. break;
  1453. #endif
  1454. default:
  1455. {
  1456. TVmsFormObject *pObj = m_pEdtDesigner->AddObject(odtText);
  1457. if (!pObj) return;
  1458. int nNewObjSeq = m_pEdtDesigner->GetNewObjectSeq();
  1459. EdObjSeq->Text = String(nNewObjSeq);
  1460. pObj->ObjSeq = nNewObjSeq;
  1461. pObj->ObjType = sObjType;
  1462. if (nObjType == 91 || nObjType == 92) //축통행시간,소통상황(고정)
  1463. pObj->Tag = "0";
  1464. else
  1465. pObj->Tag = "N";
  1466. pObj->TextAlign = 0; // left
  1467. if (nObjType == 19) //소통정보(가변)
  1468. {
  1469. #ifdef ENG
  1470. sObjText = "@Traffic Fast About 0 Min.";
  1471. #else
  1472. sObjText = "@소통원활 약 0 분";
  1473. #endif
  1474. pObj->TextAlign = 2; // center
  1475. EdTextData->Properties->ReadOnly = true;
  1476. }
  1477. else
  1478. {
  1479. EdTextData->Properties->ReadOnly = false;
  1480. }
  1481. pObj->ObjSize = sObjText.Length();
  1482. pObj->BkColorCode = m_pEdtDesigner->BkColorCode;
  1483. pObj->Blink = false;
  1484. pObj->Text = sObjText;
  1485. pObj->EditMode = true;
  1486. pObj->ObjKind = OBJKIND_TEXT;
  1487. pObj->FontName = sFontName;
  1488. pObj->FontNameCode = sFontNameCode;
  1489. pObj->FontColorCode = sFontColorCode;
  1490. pObj->FontSize = sFontSize.ToInt();
  1491. pObj->FontBold = bFontBold;
  1492. pObj->SetPos(0, 0);
  1493. pObj->Show();
  1494. AddObjectToList(pObj, true);
  1495. }
  1496. break;
  1497. }
  1498. }
  1499. //---------------------------------------------------------------------------
  1500. void __fastcall TVMSM500M::BtnObjDeleteClick(TObject *Sender)
  1501. {
  1502. if (m_pEdtDesigner->GetSelectedObjectCount() < 1) return;
  1503. String sMsgString;
  1504. sMsgString = lblText6->Caption;//"선택한 객체 정보를 모두 삭제하시겠습니까?";
  1505. if (Application->MessageBox(sMsgString.c_str(),
  1506. lblText7->Caption.c_str(),//L"객체 정보 삭제",
  1507. MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES)
  1508. {
  1509. return;
  1510. }
  1511. bool bUse = false;
  1512. TVmsFormObject *pObj;
  1513. int nObjCnt = m_pEdtDesigner->GetObjectCount();
  1514. for (int ii = nObjCnt-1; ii >= 0; ii--)
  1515. {
  1516. pObj = m_pEdtDesigner->GetObject(ii);
  1517. if (pObj->Selected)
  1518. {
  1519. TVmsObjUse*pObjUse = MyUseManager->FLists.Find(pObj->ObjSeq);
  1520. if (pObjUse)
  1521. {
  1522. bUse = true;
  1523. continue;
  1524. }
  1525. m_pEdtDesigner->DelObject(ii);
  1526. }
  1527. }
  1528. if (bUse)
  1529. {
  1530. Application->MessageBox(lblText8->Caption.c_str(),//L"VMS 폼 객체 삭제\r\nVMS 폼 객체 중 정보제공구간에 설정된 객체는 삭제할 수 없습니다.",
  1531. FTitle.c_str(),
  1532. MB_OK|MB_ICONERROR|MB_APPLMODAL);
  1533. }
  1534. SelObjectListData();
  1535. }
  1536. //---------------------------------------------------------------------------
  1537. void __fastcall TVMSM500M::ColXGetDataText(TcxCustomGridTableItem *Sender, int ARecordIndex,
  1538. UnicodeString &AText)
  1539. {
  1540. if (ARecordIndex < 0) return;
  1541. try
  1542. {
  1543. int nMemPtr = (int)(TvObjList->DataController->Values[ARecordIndex][ColMem->Index]);
  1544. TVmsFormObject *pObj = (TVmsFormObject*)nMemPtr;
  1545. if (pObj)
  1546. {
  1547. AText = pObj->GetLeft();
  1548. }
  1549. } catch(Exception &e) {}
  1550. }
  1551. //---------------------------------------------------------------------------
  1552. void __fastcall TVMSM500M::ColYGetDataText(TcxCustomGridTableItem *Sender, int ARecordIndex,
  1553. UnicodeString &AText)
  1554. {
  1555. if (ARecordIndex < 0) return;
  1556. try
  1557. {
  1558. int nMemPtr = (int)(TvObjList->DataController->Values[ARecordIndex][ColMem->Index]);
  1559. TVmsFormObject *pObj = (TVmsFormObject*)nMemPtr;
  1560. if (pObj)
  1561. {
  1562. AText = pObj->GetTop();
  1563. }
  1564. } catch(Exception &e) {}
  1565. }
  1566. //---------------------------------------------------------------------------
  1567. void __fastcall TVMSM500M::CbVmsObjTypeClick(TObject *Sender)
  1568. {
  1569. if (BtnAddText->CanFocus())
  1570. {
  1571. BtnAddText->SetFocus();
  1572. }
  1573. }
  1574. //---------------------------------------------------------------------------
  1575. void __fastcall TVMSM500M::EdIfscIdClick(TObject *Sender)
  1576. {
  1577. TVMSM530M *pSelForm = new TVMSM530M(this);
  1578. pSelForm->EdNmbr->Text = EdIfscId->Text.Trim();
  1579. pSelForm->ShowModal();
  1580. String sIfscId = pSelForm->EdNmbr->Text.Trim();
  1581. bool bSelected = pSelForm->m_bSelected;
  1582. delete pSelForm;
  1583. pSelForm = NULL;
  1584. if (!bSelected)
  1585. {
  1586. return;
  1587. }
  1588. if (sIfscId != "")
  1589. {
  1590. EdIfscId->Text = sIfscId;
  1591. }
  1592. UpdateObjectIfscId();
  1593. }
  1594. //---------------------------------------------------------------------------
  1595. void __fastcall TVMSM500M::BtnIfscEraseClick(TObject *Sender)
  1596. {
  1597. EdIfscId->Text = "";
  1598. UpdateObjectIfscId();
  1599. }
  1600. //---------------------------------------------------------------------------
  1601. void __fastcall TVMSM500M::UpdateObjectIfscId()
  1602. {
  1603. TVmsFormObject *pObj;
  1604. int nObjCnt = m_pEdtDesigner->GetObjectCount();
  1605. for (int ii = nObjCnt-1; ii >= 0; ii--)
  1606. {
  1607. pObj = m_pEdtDesigner->GetObject(ii);
  1608. if (pObj->Selected)
  1609. {
  1610. if (pObj->ObjType.ToIntDef(0) == 91 || //@축통행시간(고정)
  1611. pObj->ObjType.ToIntDef(0) == 92) //@축소통상황(고정)
  1612. {
  1613. pObj->Tag = EdIfscId->Text.Trim();
  1614. }
  1615. }
  1616. }
  1617. }
  1618. //---------------------------------------------------------------------------
  1619. void __fastcall TVMSM500M::BtnCopyAddClick(TObject *Sender)
  1620. {
  1621. int nIdx = TvList->DataController->FocusedRecordIndex;
  1622. if (nIdx < 0) return;
  1623. String sFormName = InputBox(lblText9->Caption,//"폼명칭",
  1624. lblText10->Caption,//"신규 폼명칭 입력하세요(60Byte).",
  1625. lblText9->Caption);//"폼명칭" );
  1626. sFormName = sFormName.Trim();
  1627. if (sFormName == lblText9->Caption//"폼명칭"
  1628. || sFormName == "")
  1629. {
  1630. return;
  1631. }
  1632. if (AnsiString(sFormName).Length() > 60)
  1633. {
  1634. Application->MessageBox(lblText11->Caption.c_str(),//L"폼명칭은 60Byte를 초과할 수 없습니다.",
  1635. FTitle.c_str(),
  1636. MB_OK|MB_ICONERROR|MB_APPLMODAL);
  1637. return;
  1638. }
  1639. String sFormId = EdFormId->Text;
  1640. if (sFormId.IsEmpty())
  1641. {
  1642. Application->MessageBox(lblText12->Caption.c_str(),//L"VMS 폼 복사 추가\r\n복사 추가할 VMS 폼을 목록에서 선택하세요.",
  1643. FTitle.c_str(),
  1644. MB_OK|MB_ICONERROR|MB_APPLMODAL);
  1645. return;
  1646. }
  1647. int nFormId;
  1648. if (!GetNextVmsFormId(nFormId))
  1649. {
  1650. Application->MessageBox(lblText1->Caption.c_str(),//L"새로운 VMS 폼정보를 생성하지 못하였습니다.\r\n프로그램 종료후에 다시 시도해 보세요.",
  1651. FTitle.c_str(),
  1652. MB_OK|MB_ICONERROR|MB_APPLMODAL);
  1653. return;
  1654. }
  1655. if (CopyFormAdd(sFormId, String(nFormId), sFormName))
  1656. {
  1657. Application->MessageBox(lblText13->Caption.c_str(),//L"VMS 폼 복사 추가\r\nVMS 폼 정보를 복사 추가 하였습니다.",
  1658. FTitle.c_str(),
  1659. MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  1660. FUpdate = true;
  1661. LoadVmsForm();
  1662. CMM_SetGridRow(CxList, TvList, String(nFormId), Col01->Index);
  1663. DisplayInfo();
  1664. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_14, 0);
  1665. VComm_VmsFormUpdate();
  1666. }
  1667. }
  1668. //---------------------------------------------------------------------------
  1669. bool __fastcall TVMSM500M::CopyFormAdd(String AOrgFormId, String ANewFormId, String AFormName)
  1670. {
  1671. bool bResult = false;
  1672. String sQry;
  1673. TADOQuery *pADO = NULL;
  1674. try
  1675. {
  1676. try
  1677. {
  1678. pADO = new TADOQuery(NULL);
  1679. pADO->Close();
  1680. pADO->Connection = ITSDb_GetConnection();
  1681. sQry = "INSERT INTO TB_VMS_FORM (VMS_FORM_ID, \r\n"
  1682. " VMS_TYPE_CD, \r\n"
  1683. " VMS_FORM_TYPE_CD, \r\n"
  1684. " VMS_FORM_BCKG_HUE_CD, \r\n"
  1685. " VMS_FORM_NM, \r\n"
  1686. " VMS_FORM_EXPL, \r\n"
  1687. " VMS_MSG_DSPL_DRCT_CD, \r\n"
  1688. " SYMBLIB_NMBR, \r\n"
  1689. " VMS_FORM_IMAG, \r\n"
  1690. " VMS_MSG_DSPL_MTHD_CD, \r\n"
  1691. " CCTV_MNGM_NMBR) \r\n"
  1692. "SELECT :p01, \r\n"
  1693. " VMS_TYPE_CD, \r\n"
  1694. " VMS_FORM_TYPE_CD, \r\n"
  1695. " VMS_FORM_BCKG_HUE_CD, \r\n"
  1696. " :p02, \r\n"
  1697. " VMS_FORM_EXPL, \r\n"
  1698. " VMS_MSG_DSPL_DRCT_CD, \r\n"
  1699. " SYMBLIB_NMBR, \r\n"
  1700. " VMS_FORM_IMAG, \r\n"
  1701. " VMS_MSG_DSPL_MTHD_CD, \r\n"
  1702. " CCTV_MNGM_NMBR \r\n"
  1703. " FROM TB_VMS_FORM \r\n"
  1704. " WHERE VMS_FORM_ID = :p03 \r\n";
  1705. ITSDb_GetConnection()->BeginTrans();
  1706. ITSDb_SQLText(pADO, sQry);
  1707. ITSDb_SQLBind(pADO, "p01", ANewFormId);
  1708. ITSDb_SQLBind(pADO, "p02", AFormName);
  1709. ITSDb_SQLBind(pADO, "p03", AOrgFormId);
  1710. pADO->ExecSQL();
  1711. sQry = "INSERT INTO TB_VMS_FORM_OBJECT ( \r\n"
  1712. " FORM_OBJECT_ID, \r\n"
  1713. " VMS_FORM_ID, \r\n"
  1714. " VMS_FORM_DSPL_ROW, \r\n"
  1715. " VMS_FORM_DSPL_CLMN, \r\n"
  1716. " VMS_FORM_OBJECT_TYPE_CD, \r\n"
  1717. " VMS_FONT_TYPE_CD, \r\n"
  1718. " VMS_FONT_HUE_CD, \r\n"
  1719. " VMS_FONT_STYL_CD, \r\n"
  1720. " VMS_FONT_SIZE, \r\n"
  1721. " VMS_FONT_ALIGN, \r\n"
  1722. " VMS_DSPL_TXT, \r\n"
  1723. " VMS_DSPL_FIGR, \r\n"
  1724. " VMS_DSPL_XCRDN, \r\n"
  1725. " VMS_DSPL_YCRDN, \r\n"
  1726. " VMS_DSPL_WIDTH, \r\n"
  1727. " VMS_DSPL_HEIGHT, \r\n"
  1728. " VMS_DSPL_BLINKING, \r\n"
  1729. " VMS_DSPL_BKCOLOR, \r\n"
  1730. " VMS_DSPL_SIZE, \r\n"
  1731. " TRFC_FILL_CD, \r\n"
  1732. " SYMBLIB_NMBR, \r\n"
  1733. " VMS_IFSC_ID \r\n"
  1734. " ) \r\n"
  1735. " SELECT \r\n"
  1736. " FORM_OBJECT_ID, \r\n"
  1737. " :p01, \r\n"
  1738. " VMS_FORM_DSPL_ROW, \r\n"
  1739. " VMS_FORM_DSPL_CLMN, \r\n"
  1740. " VMS_FORM_OBJECT_TYPE_CD, \r\n"
  1741. " VMS_FONT_TYPE_CD, \r\n"
  1742. " VMS_FONT_HUE_CD, \r\n"
  1743. " VMS_FONT_STYL_CD, \r\n"
  1744. " VMS_FONT_SIZE, \r\n"
  1745. " VMS_FONT_ALIGN, \r\n"
  1746. " VMS_DSPL_TXT, \r\n"
  1747. " VMS_DSPL_FIGR, \r\n"
  1748. " VMS_DSPL_XCRDN, \r\n"
  1749. " VMS_DSPL_YCRDN, \r\n"
  1750. " VMS_DSPL_WIDTH, \r\n"
  1751. " VMS_DSPL_HEIGHT, \r\n"
  1752. " VMS_DSPL_BLINKING, \r\n"
  1753. " VMS_DSPL_BKCOLOR, \r\n"
  1754. " VMS_DSPL_SIZE, \r\n"
  1755. " TRFC_FILL_CD, \r\n"
  1756. " SYMBLIB_NMBR, \r\n"
  1757. " VMS_IFSC_ID \r\n"
  1758. " FROM TB_VMS_FORM_OBJECT \r\n"
  1759. " WHERE VMS_FORM_ID = :p02 \r\n";
  1760. ITSDb_SQLText(pADO, sQry);
  1761. ITSDb_SQLBind(pADO, "p01", ANewFormId);
  1762. ITSDb_SQLBind(pADO, "p02", AOrgFormId);
  1763. pADO->ExecSQL();
  1764. ITSDb_GetConnection()->CommitTrans();
  1765. bResult = true;
  1766. }
  1767. catch(EDatabaseError &E)
  1768. {
  1769. ITSDb_GetConnection()->RollbackTrans();
  1770. DBERRORMSG("VMS Copy Add", String(E.ClassName()), E.Message, sQry);
  1771. throw Exception(String(E.ClassName()) + E.Message);
  1772. }
  1773. catch(Exception &e)
  1774. {
  1775. ITSDb_GetConnection()->RollbackTrans();
  1776. DBERRORMSG("VMS Copy Add", String(e.ClassName()), e.Message, sQry);
  1777. throw Exception(String(e.ClassName()) + e.Message);
  1778. }
  1779. }
  1780. __finally
  1781. {
  1782. if (pADO)
  1783. {
  1784. pADO->Close();
  1785. delete pADO;
  1786. }
  1787. }
  1788. return bResult;
  1789. }
  1790. //---------------------------------------------------------------------------
  1791. void __fastcall TVMSM500M::BtnUpClick(TObject *Sender)
  1792. {
  1793. try
  1794. {
  1795. TvObjList->BeginUpdate();
  1796. int nCurIdx = TvObjList->DataController->FocusedRowIndex;//FocusedRecordIndex;
  1797. if (nCurIdx <= 0)
  1798. {
  1799. return;
  1800. }
  1801. int nUpIdx = nCurIdx-1;
  1802. try
  1803. {
  1804. String sVal1 = VarToStr(TvObjList->DataController->Values[nCurIdx][ColSeq->Index]);
  1805. String sVal2 = VarToStr(TvObjList->DataController->Values[nCurIdx][ColId->Index]);
  1806. String sVal3 = VarToStr(TvObjList->DataController->Values[nCurIdx][ColType->Index]);
  1807. String sVal4 = VarToStr(TvObjList->DataController->Values[nCurIdx][ColData->Index]);
  1808. String sVal5 = VarToStr(TvObjList->DataController->Values[nCurIdx][ColIfscId->Index]);
  1809. int sVal6 = (TvObjList->DataController->Values[nCurIdx][ColMem->Index]);
  1810. TvObjList->DataController->Values[nCurIdx][ColSeq->Index] = TvObjList->DataController->Values[nUpIdx][ColSeq->Index];
  1811. TvObjList->DataController->Values[nCurIdx][ColId->Index] = TvObjList->DataController->Values[nUpIdx][ColId->Index];
  1812. TvObjList->DataController->Values[nCurIdx][ColType->Index] = TvObjList->DataController->Values[nUpIdx][ColType->Index];
  1813. TvObjList->DataController->Values[nCurIdx][ColData->Index] = TvObjList->DataController->Values[nUpIdx][ColData->Index];
  1814. TvObjList->DataController->Values[nCurIdx][ColIfscId->Index] = TvObjList->DataController->Values[nUpIdx][ColIfscId->Index];
  1815. TvObjList->DataController->Values[nCurIdx][ColMem->Index] = TvObjList->DataController->Values[nUpIdx][ColMem->Index];
  1816. TvObjList->DataController->Values[nUpIdx][ColSeq->Index] = sVal1;
  1817. TvObjList->DataController->Values[nUpIdx][ColId->Index] = sVal2;
  1818. TvObjList->DataController->Values[nUpIdx][ColType->Index] = sVal3;
  1819. TvObjList->DataController->Values[nUpIdx][ColData->Index] = sVal4;
  1820. TvObjList->DataController->Values[nUpIdx][ColIfscId->Index] = sVal5;
  1821. TvObjList->DataController->Values[nUpIdx][ColMem->Index] = sVal6;
  1822. TvObjList->Controller->ClearSelection();
  1823. TvObjList->Controller->FocusedRowIndex = nUpIdx;
  1824. //TvObjList->Controller->FocusedRecordIndex = nUpIdx;
  1825. TvObjList->ViewData->Records[nUpIdx]->Focused = true;
  1826. TvObjList->ViewData->Records[nUpIdx]->Selected = true;
  1827. CxObjList->SetFocus();
  1828. //TcxCustomGridRow* ARow = TvObjList->ViewData->Rows[TvObjList->DataController->FocusedRowIndex];
  1829. }
  1830. catch(...)
  1831. {
  1832. }
  1833. }
  1834. __finally
  1835. {
  1836. TvObjList->EndUpdate();
  1837. }
  1838. }
  1839. //---------------------------------------------------------------------------
  1840. void __fastcall TVMSM500M::BtnDownClick(TObject *Sender)
  1841. {
  1842. try
  1843. {
  1844. TvObjList->BeginUpdate();
  1845. int nCurIdx = TvObjList->DataController->FocusedRowIndex;//FocusedRecordIndex;
  1846. //int nCurIdx = TvObjList->DataController->FocusedRecordIndex;
  1847. if (nCurIdx < 0)
  1848. {
  1849. return;
  1850. }
  1851. if (nCurIdx == TvObjList->DataController->RecordCount-1)
  1852. {
  1853. return;
  1854. }
  1855. int nDnIdx = nCurIdx+1;
  1856. try
  1857. {
  1858. String sVal1 = VarToStr(TvObjList->DataController->Values[nCurIdx][ColSeq->Index]);
  1859. String sVal2 = VarToStr(TvObjList->DataController->Values[nCurIdx][ColId->Index]);
  1860. String sVal3 = VarToStr(TvObjList->DataController->Values[nCurIdx][ColType->Index]);
  1861. String sVal4 = VarToStr(TvObjList->DataController->Values[nCurIdx][ColData->Index]);
  1862. String sVal5 = VarToStr(TvObjList->DataController->Values[nCurIdx][ColIfscId->Index]);
  1863. int sVal6 = (TvObjList->DataController->Values[nCurIdx][ColMem->Index]);
  1864. TvObjList->DataController->Values[nCurIdx][ColSeq->Index] = TvObjList->DataController->Values[nDnIdx][ColSeq->Index];
  1865. TvObjList->DataController->Values[nCurIdx][ColId->Index] = TvObjList->DataController->Values[nDnIdx][ColId->Index];
  1866. TvObjList->DataController->Values[nCurIdx][ColType->Index] = TvObjList->DataController->Values[nDnIdx][ColType->Index];
  1867. TvObjList->DataController->Values[nCurIdx][ColData->Index] = TvObjList->DataController->Values[nDnIdx][ColData->Index];
  1868. TvObjList->DataController->Values[nCurIdx][ColIfscId->Index] = TvObjList->DataController->Values[nDnIdx][ColIfscId->Index];
  1869. TvObjList->DataController->Values[nCurIdx][ColMem->Index] = TvObjList->DataController->Values[nDnIdx][ColMem->Index];
  1870. TvObjList->DataController->Values[nDnIdx][ColSeq->Index] = sVal1;
  1871. TvObjList->DataController->Values[nDnIdx][ColId->Index] = sVal2;
  1872. TvObjList->DataController->Values[nDnIdx][ColType->Index] = sVal3;
  1873. TvObjList->DataController->Values[nDnIdx][ColData->Index] = sVal4;
  1874. TvObjList->DataController->Values[nDnIdx][ColIfscId->Index] = sVal5;
  1875. TvObjList->DataController->Values[nDnIdx][ColMem->Index] = sVal6;
  1876. TvObjList->Controller->ClearSelection();
  1877. TvObjList->Controller->FocusedRowIndex = nDnIdx;
  1878. //TvObjList->Controller->FocusedRecordIndex = nDnIdx;
  1879. TvObjList->ViewData->Records[nDnIdx]->Focused = true;
  1880. TvObjList->ViewData->Records[nDnIdx]->Selected = true;
  1881. CxObjList->SetFocus();
  1882. //TcxCustomGridRow* ARow = TvObjList->ViewData->Rows[TvObjList->DataController->FocusedRowIndex];
  1883. }
  1884. catch(...)
  1885. {
  1886. }
  1887. }
  1888. __finally
  1889. {
  1890. TvObjList->EndUpdate();
  1891. }
  1892. }
  1893. //---------------------------------------------------------------------------
  1894. void __fastcall TVMSM500M::BtnSaveClick(TObject *Sender)
  1895. {
  1896. if (EdFormId->Text.IsEmpty())
  1897. {
  1898. Application->MessageBox(lblText14->Caption.c_str(),//L"VMS 폼 저장\r\nVMS 폼 ID를 입력하세요.",
  1899. FTitle.c_str(),
  1900. MB_OK|MB_ICONERROR|MB_APPLMODAL);
  1901. return;
  1902. }
  1903. if (EdFormName->Text.Trim().IsEmpty())
  1904. {
  1905. Application->MessageBox(lblText15->Caption.c_str(),//L"VMS 폼 저장\r\nVMS 폼 이름을 입력하세요.",
  1906. FTitle.c_str(),
  1907. MB_OK|MB_ICONERROR|MB_APPLMODAL);
  1908. return;
  1909. }
  1910. String sFormId = EdFormId->Text;
  1911. //String sVmsType = FVmsTypeCd;
  1912. String sFormType = APP_GetCode(CbFormKind);
  1913. String sFormColor = String(CbFormColor->ItemIndex);
  1914. String sName = EdFormName->Text.Trim();
  1915. String sExpl = EdFormDesc->Text.Trim();
  1916. String sDispDir = APP_GetCode(CbFormDispDir);
  1917. String sDispMode = APP_GetCode(CbFormDispMode);
  1918. bool bResult = false;
  1919. m_pEdtDesigner->GetVmsFormImage(ImgForm);
  1920. bResult = SaveVmsForm();
  1921. if (!bResult) return;
  1922. String sQry;
  1923. TADOQuery *pADO = NULL;
  1924. try
  1925. {
  1926. try
  1927. {
  1928. pADO = new TADOQuery(NULL);
  1929. pADO->Close();
  1930. pADO->Connection = ITSDb_GetConnection();
  1931. sQry = "DELETE TB_VMS_FORM_OBJECT \r\n"
  1932. " WHERE VMS_FORM_ID = :p01 \r\n";
  1933. ITSDb_SQLText(pADO, sQry);
  1934. ITSDb_SQLBind(pADO, "p01", sFormId);
  1935. pADO->ExecSQL();
  1936. sQry = "INSERT INTO TB_VMS_FORM_OBJECT ( \r\n"
  1937. " FORM_OBJECT_ID, \r\n" //N NUMBER(5) N FORM OBJECT ID
  1938. " VMS_FORM_ID, \r\n" //N NUMBER(5) N VMS FORM ID
  1939. " VMS_FORM_DSPL_ROW, \r\n" //N NUMBER(2) Y VMS FORM 표출 행
  1940. " VMS_FORM_DSPL_CLMN, \r\n" //N NUMBER(2) Y VMS FORM 표출 칼럼
  1941. " VMS_FORM_OBJECT_TYPE_CD, \r\n" //N NUMBER(3) N VMS FORM OBJECT 유형 코드
  1942. " VMS_FONT_TYPE_CD, \r\n" //N NUMBER(3) N VMS 글꼴 유형 코드
  1943. " VMS_FONT_HUE_CD, \r\n" //N NUMBER(9) N VMS 글꼴 색상 코드
  1944. " VMS_FONT_STYL_CD, \r\n" //N NUMBER(3) Y VMS 글꼴 방식 코드
  1945. " VMS_FONT_SIZE, \r\n" //N NUMBER(3) Y 0 VMS 글꼴 크기
  1946. " VMS_FONT_ALIGN, \r\n" //N NUMBER(1) Y 0 VMS 표출 문자열정열방식(0:LEFT,1:RIGHT,2:CENTER)
  1947. " VMS_DSPL_TXT, \r\n" //N VARCHAR2(200) Y VMS 표출 텍스트
  1948. " VMS_DSPL_FIGR, \r\n" //N BLOB Y VMS 표출 도형
  1949. " VMS_DSPL_XCRDN, \r\n" //N NUMBER(5) Y VMS 표출 X좌표
  1950. " VMS_DSPL_YCRDN, \r\n" //N NUMBER(5) Y VMS 표출 Y좌표
  1951. " VMS_DSPL_WIDTH, \r\n" //N NUMBER(5) Y 0 VMS 표출 넓이
  1952. " VMS_DSPL_HEIGHT, \r\n" //N NUMBER(5) Y 0 VMS 표출 높이
  1953. " VMS_DSPL_BLINKING, \r\n" //N NUMBER(1) Y 0 VMS 표출 점멸 여부(0:지속, 1:점멸)
  1954. " VMS_DSPL_BKCOLOR, \r\n" //N NUMBER(1) Y 0 VMS 표출 배경색상코드
  1955. " VMS_DSPL_SIZE, \r\n" //N NUMBER(7) Y 0 VMS 표출 크기(문자:문자길이,이미지:이미지전체크기)
  1956. " TRFC_FILL_CD, \r\n" //N CHAR(1) Y 'N' FILL-IN 메시지 여부
  1957. " SYMBLIB_NMBR, \r\n" //N NUMBER(4) N 0 심벌라이브러리 번호
  1958. " VMS_IFSC_ID \r\n" //N NUMBER(10) N 0 VMS 정보제공구간 ID
  1959. " ) \r\n"
  1960. " VALUES ( \r\n"
  1961. " :p01, \r\n" //N NUMBER(5) N FORM OBJECT ID
  1962. " :p02, \r\n" //N NUMBER(5) N VMS FORM ID
  1963. " 0, \r\n" //N NUMBER(2) Y VMS FORM 표출 행
  1964. " 0, \r\n" //N NUMBER(2) Y VMS FORM 표출 칼럼
  1965. " :p05, \r\n" //N NUMBER(3) N VMS FORM OBJECT 유형 코드
  1966. " :p06, \r\n" //N NUMBER(3) N VMS 글꼴 유형 코드
  1967. " :p07, \r\n" //N NUMBER(9) N VMS 글꼴 색상 코드
  1968. " :p08, \r\n" //N NUMBER(3) Y VMS 글꼴 방식 코드
  1969. " :p09, \r\n" //N NUMBER(3) Y 0 VMS 글꼴 크기
  1970. " :p10, \r\n" //N NUMBER(1) Y 0 VMS 표출 문자열정열방식(0:LEFT,1:RIGHT,2:CENTER)
  1971. " :p11, \r\n" //N VARCHAR2(200) Y VMS 표출 텍스트
  1972. " :p12, \r\n" //N BLOB Y VMS 표출 도형
  1973. " :p13, \r\n" //N NUMBER(5) Y VMS 표출 X좌표
  1974. " :p14, \r\n" //N NUMBER(5) Y VMS 표출 Y좌표
  1975. " :p15, \r\n" //N NUMBER(5) Y 0 VMS 표출 넓이
  1976. " :p16, \r\n" //N NUMBER(5) Y 0 VMS 표출 높이
  1977. " :p17, \r\n" //N NUMBER(1) Y 0 VMS 표출 점멸 여부(0:지속, 1:점멸)
  1978. " :p18, \r\n" //N NUMBER(1) Y 0 VMS 표출 배경색상코드
  1979. " :p19, \r\n" //N NUMBER(7) Y 0 VMS 표출 크기(문자:문자길이,이미지:이미지전체크기)
  1980. " :p23, \r\n" //N CHAR(1) Y 'N' FILL-IN 메시지 여부
  1981. " :p21, \r\n" //N NUMBER(4) N 0 심벌라이브러리 번호
  1982. " :p22 \r\n" //N NUMBER(10) N 0 VMS 정보제공구간 ID
  1983. " ) \r\n";
  1984. ITSDb_SQLText(pADO, sQry);
  1985. ITSDb_GetConnection()->BeginTrans();
  1986. TVmsFormObject *pObj;
  1987. TcxGridDataController *pGDC = TvObjList->DataController;
  1988. int nObjType;
  1989. int nObjCnt = pGDC->RecordCount;
  1990. for (int ii = 0; ii < nObjCnt; ii++)
  1991. {
  1992. String sObjSeq = VarToStr(pGDC->Values[ii][ColSeq->Index]);
  1993. pObj = m_pEdtDesigner->FindObject(sObjSeq.ToInt());
  1994. if (!pObj) continue;
  1995. nObjType = pObj->ObjType.ToIntDef(0);
  1996. ITSDb_SQLBind(pADO, "p01", String(ii+1));
  1997. ITSDb_SQLBind(pADO, "p02", sFormId);
  1998. //ITSDb_SQLBind(pADO, "p03", );
  1999. //ITSDb_SQLBind(pADO, "p04", );
  2000. ITSDb_SQLBind(pADO, "p05", pObj->ObjType);
  2001. ITSDb_SQLBind(pADO, "p06", pObj->FontNameCode);
  2002. ITSDb_SQLBind(pADO, "p07", pObj->FontColorCode);
  2003. if (pObj->FontBold)
  2004. ITSDb_SQLBind(pADO, "p08", "1");
  2005. else
  2006. ITSDb_SQLBind(pADO, "p08", "0");
  2007. ITSDb_SQLBind(pADO, "p09", String(pObj->FontSize));
  2008. ITSDb_SQLBind(pADO, "p10", String(pObj->TextAlign));
  2009. ITSDb_SQLBind(pADO, "p11", pObj->Text);
  2010. ITSDb_SQLBind(pADO, "p13", String(pObj->GetLeft()));
  2011. ITSDb_SQLBind(pADO, "p14", String(pObj->GetTop()));
  2012. ITSDb_SQLBind(pADO, "p15", String(pObj->GetWidth()));
  2013. ITSDb_SQLBind(pADO, "p16", String(pObj->GetHeight()));
  2014. if (pObj->Blink)
  2015. ITSDb_SQLBind(pADO, "p17", "1");
  2016. else
  2017. ITSDb_SQLBind(pADO, "p17", "0");
  2018. ITSDb_SQLBind(pADO, "p18", pObj->BkColorCode);
  2019. ITSDb_SQLBind(pADO, "p19", String(pObj->ObjSize));
  2020. //ITSDb_SQLBind(pADO, "p20", );
  2021. ITSDb_SQLBind(pADO, "p21", pObj->ImageId);
  2022. String sIfscId = "";
  2023. if (nObjType == 91 || nObjType == 92)
  2024. {
  2025. sIfscId = pObj->Tag;
  2026. }
  2027. ITSDb_SQLBind(pADO, "p22", sIfscId);
  2028. String sFillIn = "N";
  2029. if (sFormType == "15")
  2030. {
  2031. if (nObjType == 0 || nObjType == 1 || nObjType == 2)
  2032. {
  2033. sFillIn = pObj->Tag;
  2034. }
  2035. }
  2036. ITSDb_SQLBind(pADO, "p23", sFillIn);
  2037. TMemoryStream *dataStream = NULL;
  2038. TImage *pImg = pObj->GetImage();
  2039. dataStream = new TMemoryStream();
  2040. if (!pImg)
  2041. {
  2042. ImgNull->Picture->Bitmap->SaveToStream(dataStream);
  2043. }
  2044. else
  2045. {
  2046. pImg->Picture->Bitmap->SaveToStream(dataStream);
  2047. }
  2048. pADO->Parameters->ParamByName("p12")->LoadFromStream(dataStream, ftBlob);
  2049. ITSDb_SQLExec(pADO);
  2050. if (dataStream) delete dataStream;
  2051. dataStream = NULL;
  2052. }
  2053. ITSDb_GetConnection()->CommitTrans();
  2054. bResult = true;
  2055. }
  2056. catch(EDatabaseError &E)
  2057. {
  2058. ITSDb_GetConnection()->RollbackTrans();
  2059. DBERRORMSG("VMS Form Object Save", String(E.ClassName()), E.Message, sQry);
  2060. throw Exception(String(E.ClassName()) + E.Message);
  2061. }
  2062. catch(Exception &e)
  2063. {
  2064. ITSDb_GetConnection()->RollbackTrans();
  2065. DBERRORMSG("VMS Form Object Save", String(e.ClassName()), e.Message, sQry);
  2066. throw Exception(String(e.ClassName()) + e.Message);
  2067. }
  2068. }
  2069. __finally
  2070. {
  2071. if (pADO)
  2072. {
  2073. pADO->Close();
  2074. delete pADO;
  2075. }
  2076. }
  2077. if (bResult)
  2078. {
  2079. Application->MessageBox(lblText16->Caption.c_str(),//L"VMS 폼 정보 저장\r\nVMS 폼 정보를 저장 하였습니다.",
  2080. FTitle.c_str(),
  2081. MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  2082. FUpdate = true;
  2083. LoadVmsForm();
  2084. CMM_SetGridRow(CxList, TvList, sFormId, Col01->Index);
  2085. DisplayInfo();
  2086. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_14, 0);
  2087. VComm_VmsFormUpdate();
  2088. }
  2089. ReForm->Lines->Clear();
  2090. ReFormTemp->Lines->Clear();
  2091. }
  2092. //---------------------------------------------------------------------------
  2093. void __fastcall TVMSM500M::Cb99PropertiesChange(TObject *Sender)
  2094. {
  2095. if (m_bEdit) return;
  2096. #if 1
  2097. String sFormType = APP_GetCode(CbFormKind);
  2098. if (sFormType == "15")
  2099. {
  2100. String sFillIn = APP_GetCode(Cb99);
  2101. if (sFillIn == "") sFillIn = "N";
  2102. TVmsFormObject *pObj = m_pEdtDesigner->FindObject(EdObjSeq->Text.ToIntDef(-1), false);
  2103. if (pObj)
  2104. {
  2105. int nObjType = pObj->ObjType.ToIntDef(-1);
  2106. if (nObjType == 0 || nObjType == 1 || nObjType == 2)
  2107. {
  2108. pObj->Tag = sFillIn;
  2109. }
  2110. }
  2111. }
  2112. #endif
  2113. }
  2114. //---------------------------------------------------------------------------