VMSM500MF.cpp 121 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #include "ITSSkinF.h"
  4. #include "ITSUtilF.h"
  5. #include "AppGlobalF.h"
  6. #include "ITSLangTransF.h"
  7. #include "CDSFontF.h"
  8. #include "CDSVmsIfscF.h"
  9. #include "CDSAtmpF.h"
  10. #include "CDSParkF.h"
  11. #include "CDSVmsFormF.h"
  12. #pragma hdrstop
  13. #include "VMSM500MF.h"
  14. #include "VMSM510MF.h"
  15. #include "VMSM520MF.h"
  16. #include "VMSM530MF.h"
  17. #include "VMSM540MF.h"
  18. #include "VMSM550MF.h"
  19. #include "VMSM560MF.h"
  20. //---------------------------------------------------------------------------
  21. #pragma package(smart_init)
  22. #pragma link "cxButtons"
  23. #pragma link "cxCalendar"
  24. #pragma link "cxContainer"
  25. #pragma link "cxControls"
  26. #pragma link "cxDropDownEdit"
  27. #pragma link "cxEdit"
  28. #pragma link "cxGraphics"
  29. #pragma link "cxGroupBox"
  30. #pragma link "cxLabel"
  31. #pragma link "cxLookAndFeelPainters"
  32. #pragma link "cxLookAndFeels"
  33. #pragma link "cxMaskEdit"
  34. #pragma link "cxPC"
  35. #pragma link "cxPCdxBarPopupMenu"
  36. #pragma link "cxSpinEdit"
  37. #pragma link "cxSplitter"
  38. #pragma link "cxTextEdit"
  39. #pragma link "cxTimeEdit"
  40. #pragma link "dxSkinBlack"
  41. #pragma link "dxSkinBlue"
  42. #pragma link "dxSkinCaramel"
  43. #pragma link "dxSkinCoffee"
  44. #pragma link "dxSkinDarkRoom"
  45. #pragma link "dxSkinDarkSide"
  46. #pragma link "dxSkinFoggy"
  47. #pragma link "dxSkinGlassOceans"
  48. #pragma link "dxSkiniMaginary"
  49. #pragma link "dxSkinLilian"
  50. #pragma link "dxSkinLiquidSky"
  51. #pragma link "dxSkinLondonLiquidSky"
  52. #pragma link "dxSkinMcSkin"
  53. #pragma link "dxSkinMoneyTwins"
  54. #pragma link "dxSkinOffice2007Black"
  55. #pragma link "dxSkinOffice2007Blue"
  56. #pragma link "dxSkinOffice2007Green"
  57. #pragma link "dxSkinOffice2007Pink"
  58. #pragma link "dxSkinOffice2007Silver"
  59. #pragma link "dxSkinOffice2010Black"
  60. #pragma link "dxSkinOffice2010Blue"
  61. #pragma link "dxSkinOffice2010Silver"
  62. #pragma link "dxSkinsCore"
  63. #pragma link "dxSkinscxPCPainter"
  64. #pragma link "dxSkinSeven"
  65. #pragma link "dxSkinSharp"
  66. #pragma link "dxSkinSilver"
  67. #pragma link "dxSkinStardust"
  68. #pragma link "cxRadioGroup"
  69. #pragma link "cxClasses"
  70. #pragma link "cxCustomData"
  71. #pragma link "cxData"
  72. #pragma link "cxDataStorage"
  73. #pragma link "cxDBData"
  74. #pragma link "cxFilter"
  75. #pragma link "cxGrid"
  76. #pragma link "cxGridCustomTableView"
  77. #pragma link "cxGridCustomView"
  78. #pragma link "cxGridDBTableView"
  79. #pragma link "cxGridLevel"
  80. #pragma link "cxGridTableView"
  81. #pragma link "cxStyles"
  82. #pragma link "cxCheckBox"
  83. #pragma link "cxImage"
  84. #pragma link "cxButtonEdit"
  85. #pragma link "cxBlobEdit"
  86. #pragma link "VmsDesignerF"
  87. #pragma link "cxColorComboBox"
  88. #pragma link "cxCalc"
  89. #pragma resource "*.dfm"
  90. TVMSM500M *VMSM500M = NULL;
  91. //---------------------------------------------------------------------------
  92. __fastcall TVMSM500M::TVMSM500M(TComponent* Owner)
  93. : TForm(Owner)
  94. {
  95. LangTrans->Translate(this, ITSDb_GetConnection());
  96. ITSSkin_Load(this);
  97. CMM_LoadForm(g_sFormsDir, this);
  98. FUpdate= false;
  99. FTitle = Caption;//"VMS 문자식 폼관리";
  100. FListSymb = new TList;
  101. EditMode = false;
  102. PgEdit->ActivePage = TsEdit;
  103. PgFormTab->ActivePage = TsForm;
  104. //BtnSaveImgFile->Caption = "Save form image";
  105. //BtnSaveImgFile->Hint = "Save the form as an image file.";
  106. FSelObjType = eSelObjNone;
  107. MyUseManager = new TVmsObjUseManager();
  108. //TvList->FilterRow->ApplyChanges = fracDelayed;//fracImmediately;
  109. TvList->OptionsBehavior->ShowLockedStateImageOptions->Filtering = lsimNever;
  110. BtnLime->LookAndFeel->NativeStyle = false;
  111. BtnLime->LookAndFeel->SkinName = "";
  112. BtnYellow->LookAndFeel->NativeStyle = false;
  113. BtnYellow->LookAndFeel->SkinName = "";
  114. BtnRed->LookAndFeel->NativeStyle = false;
  115. BtnRed->LookAndFeel->SkinName = "";
  116. BtnObjLime->LookAndFeel->NativeStyle = false;
  117. BtnObjLime->LookAndFeel->SkinName = "";
  118. BtnObjYellow->LookAndFeel->NativeStyle = false;
  119. BtnObjYellow->LookAndFeel->SkinName = "";
  120. BtnObjRed->LookAndFeel->NativeStyle = false;
  121. BtnObjRed->LookAndFeel->SkinName = "";
  122. }
  123. //---------------------------------------------------------------------------
  124. void __fastcall TVMSM500M::CommClose()
  125. {
  126. try
  127. {
  128. if (MyUseManager)
  129. {
  130. delete MyUseManager;
  131. MyUseManager = NULL;
  132. }
  133. if (m_pEdtDesigner)
  134. {
  135. delete m_pEdtDesigner;
  136. m_pEdtDesigner = NULL;
  137. }
  138. APP_DelVmsSizeCombo(CbSizeType);
  139. SAFE_DELETE(MyVmsObjTypeManager);
  140. ClearSymbloList();
  141. SAFE_DELETE(FListSymb);
  142. CMM_SaveForm(g_sFormsDir, this);
  143. }
  144. catch(...)
  145. {
  146. }
  147. }
  148. //---------------------------------------------------------------------------
  149. void __fastcall TVMSM500M::FormCreate(TObject *Sender)
  150. {
  151. MyVmsObjTypeManager = new TVmsObjTypeManager();
  152. m_pEdtDesigner = new TVmsFormDesigner(PnlEditForm);
  153. FOR_STL(TCDSFontColor*, pObj, CDSFontManager->FColors)
  154. {
  155. m_pEdtDesigner->InitFontColor(pObj->VMS_FONT_COLR_CD, (TColor)pObj->VMS_FONT_COLR_VAL);
  156. }
  157. }
  158. //---------------------------------------------------------------------------
  159. void __fastcall TVMSM500M::FormShow(TObject *Sender)
  160. {
  161. ::SendMessage(ReForm->Handle, EM_SETLANGOPTIONS, 0, (LPARAM)(::SendMessage(ReForm->Handle, EM_GETLANGOPTIONS, 0, 0) & ~IMF_AUTOFONT));
  162. ::SendMessage(ReFormTemp->Handle, EM_SETLANGOPTIONS, 0, (LPARAM)(::SendMessage(ReFormTemp->Handle, EM_GETLANGOPTIONS, 0, 0) & ~IMF_AUTOFONT));
  163. Refresh();
  164. FormInit();
  165. ChangeEditMode(1);
  166. TmrShow->Enabled = true;
  167. }
  168. //---------------------------------------------------------------------------
  169. void __fastcall TVMSM500M::FormInit()
  170. {
  171. //TvList->OptionsView->NoDataToDisplayInfoText = "<등록되어 있는 폼 정보가 없습니다>";
  172. CheckVideoStreamImage();
  173. MyVmsObjTypeManager->LoadFromDb();
  174. m_pEdtDesigner->ApplicationHandle = (long)Handle;
  175. //VMS사이즈
  176. APP_FillVmsSizeType(CbSizeType, false);
  177. //폼색상
  178. CbFormColor->Items->Clear();
  179. CbFormColor->Items->AddObject("", (TObject*)clBlack);
  180. CbFormColor->Items->AddObject("", (TObject*)clRed);
  181. CbFormColor->Items->AddObject("", (TObject*)clLime);
  182. CbFormColor->Items->AddObject("", (TObject*)clYellow);
  183. CbFormColor->ItemIndex = 0;
  184. CbFormColor1->Items->Clear();
  185. CbFormColor1->Items = CbFormColor->Items;
  186. CbFormColor1->ItemIndex = 0;
  187. //폼유형
  188. FillVmsFormType(CbFormKind);
  189. //표출방법
  190. FillVmsFormDispMode(CbFormDispMode);
  191. //표출방향
  192. FillVmsFormDispDir(CbFormDispDir);
  193. FormObjectInit();
  194. ReForm->Paragraph->Numbering = nsNone;
  195. ReForm->Paragraph->Alignment = (TAlignment)2;
  196. FNewDb = false;
  197. }
  198. //---------------------------------------------------------------------------
  199. void __fastcall TVMSM500M::FormObjectInit()
  200. {
  201. //TvObjList->OptionsView->NoDataToDisplayInfoText = "<등록되어 있는 객체 정보가 없습니다>";
  202. m_bEdit = false;
  203. PnlEdtBack->Left = 6;
  204. PnlEdtBack->Top = 4;
  205. PnlRePreview->Left = 4;
  206. PnlRePreview->Top = 4;
  207. //ReForm->Left = 6;
  208. //ReForm->Top = 4;
  209. //객체배경색상
  210. CbBkColor->Items->Clear();
  211. CbBkColor->Items->AddObject("", (TObject*)clBlack);
  212. CbBkColor->Items->AddObject("", (TObject*)clRed);
  213. CbBkColor->Items->AddObject("", (TObject*)clLime);
  214. CbBkColor->Items->AddObject("", (TObject*)clYellow);
  215. CbBkColor->ItemIndex = 0;
  216. //문자열색상
  217. CbFontColor->Items->Clear();
  218. #if 0
  219. CbFontColor->Items->AddObject("", (TObject*)clBlack);
  220. CbFontColor->Items->AddObject("", (TObject*)clRed);
  221. CbFontColor->Items->AddObject("", (TObject*)clLime);
  222. CbFontColor->Items->AddObject("", (TObject*)clYellow);
  223. #endif
  224. FOR_STL(TCDSFontColor*, pObj, CDSFontManager->FColors)
  225. {
  226. CbFontColor->Items->AddObject("", (TObject*)pObj->VMS_FONT_COLR_VAL);
  227. }
  228. CbFontColor->ItemIndex = 0;
  229. //직접입력 문자열색상
  230. CbFontColorRe->Items->Clear();
  231. #if 0
  232. CbFontColorRe->Items->AddObject("", (TObject*)clBlack);
  233. CbFontColorRe->Items->AddObject("", (TObject*)clRed);
  234. CbFontColorRe->Items->AddObject("", (TObject*)clLime);
  235. CbFontColorRe->Items->AddObject("", (TObject*)clYellow);
  236. #endif
  237. CbFontColorRe->Items = CbFontColor->Items;
  238. CbFontColorRe->ItemIndex = 0;
  239. //VMS Font
  240. FillVmsFont(CbFontName);
  241. CbFontName->ItemIndex = 0;
  242. FillVmsFont(CbFontNameRe);
  243. CbFontNameRe->ItemIndex = 0;
  244. }
  245. //---------------------------------------------------------------------------
  246. void __fastcall TVMSM500M::TmrShowTimer(TObject *Sender)
  247. {
  248. TmrShow->Enabled = false;
  249. }
  250. //---------------------------------------------------------------------------
  251. void __fastcall TVMSM500M::BtnCloseClick(TObject *Sender)
  252. {
  253. Close();
  254. }
  255. //---------------------------------------------------------------------------
  256. void __fastcall TVMSM500M::FormClose(TObject *Sender, TCloseAction &Action)
  257. {
  258. CommClose();
  259. VMSM500M = NULL;
  260. Action = caFree;
  261. }
  262. //---------------------------------------------------------------------------
  263. void __fastcall TVMSM500M::FormCloseQuery(TObject *Sender, bool &CanClose)
  264. {
  265. if (FUpdate)
  266. {
  267. CComm_VmsFormUpdate();
  268. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_14, 0);
  269. }
  270. }
  271. //---------------------------------------------------------------------------
  272. void __fastcall TVMSM500M::BtnEditClick(TObject *Sender)
  273. {
  274. bool singleForm = false;
  275. int nFormTypeCd = m_sFormTypeCd.ToIntDef(11);
  276. if (nFormTypeCd == 70 || nFormTypeCd == 80)
  277. {
  278. singleForm = true; //동영상, 스트리밍 영상 폼
  279. }
  280. if (BtnEdit->Caption == FrmLang->lblEdit->Caption)//"편집")
  281. {
  282. ChangeEditMode(0);
  283. FNewDb = false;
  284. if (singleForm)
  285. {
  286. if (PnlCmd2->Enabled == true)
  287. {
  288. //PnlCmd2->Enabled = false;
  289. }
  290. }
  291. else
  292. {
  293. if (PnlCmd2->Enabled == false)
  294. {
  295. PnlCmd2->Enabled = true;
  296. }
  297. }
  298. if (PgFormTab->ActivePage != TsFormObject)
  299. {
  300. PgFormTab->ActivePage = TsFormObject;
  301. }
  302. }
  303. else
  304. {
  305. String sId = EdFormId->Text;
  306. ChangeEditMode(1);
  307. if (CMM_FindGridData(TvList->DataController, sId, Col01->Index) >= 0)
  308. {
  309. CMM_SetGridRow(CxList, TvList, sId, Col01->Index);
  310. DisplayInfo();
  311. }
  312. }
  313. }
  314. //---------------------------------------------------------------------------
  315. void __fastcall TVMSM500M::ChangeEditMode(int AEdit)
  316. {
  317. bool bEnabled = false;
  318. CbFormKind->Enabled = false;
  319. switch(AEdit)
  320. {
  321. case 0: //편집버튼클릭
  322. {
  323. BtnEdit->Enabled = true;
  324. BtnInsert->Enabled = false;
  325. BtnDelete->Enabled = false;
  326. BtnCopyAdd->Enabled = false;
  327. BtnCopyAdd212->Enabled = false;
  328. BtnSave->Enabled = true;
  329. BtnEdit->Caption = FrmLang->lblCancel->Caption;//"취소";
  330. BtnEdit->Hint = FrmLang->lblCancel->Hint;//데이터 편집 취소";
  331. EditMode = true;
  332. }
  333. break;
  334. case 1: //편집[취소]버튼클릭
  335. {
  336. FormClear(); //화면을 모두 지운다.
  337. BtnEdit->Enabled = false;
  338. BtnInsert->Enabled = true;
  339. BtnDelete->Enabled = false;
  340. BtnCopyAdd->Enabled = false;
  341. BtnCopyAdd212->Enabled = false;
  342. BtnSave->Enabled = false;
  343. BtnEdit->Caption = FrmLang->lblEdit->Caption;//"편집";
  344. BtnEdit->Hint = FrmLang->lblEdit->Hint;//데이터 편집";
  345. //bEnabled = true;
  346. EditMode = false;
  347. }
  348. break;
  349. case 2: //추가
  350. {
  351. BtnEdit->Enabled = true;
  352. BtnInsert->Enabled = false;
  353. BtnDelete->Enabled = false;
  354. BtnCopyAdd->Enabled = false;
  355. BtnCopyAdd212->Enabled = false;
  356. BtnSave->Enabled = true;
  357. BtnEdit->Caption = FrmLang->lblCancel->Caption;//"취소";
  358. BtnEdit->Hint = FrmLang->lblCancel->Hint;//데이터 편집 취소";
  359. EditMode = true;
  360. //CbFormKind->Enabled = true;
  361. }
  362. break;
  363. case 3: //수정모드
  364. {
  365. BtnEdit->Enabled = true;
  366. BtnInsert->Enabled = true;
  367. BtnDelete->Enabled = true;
  368. BtnCopyAdd->Enabled = true;
  369. BtnCopyAdd212->Enabled = true;
  370. BtnSave->Enabled = false;
  371. BtnEdit->Caption = FrmLang->lblEdit->Caption;//"편집";
  372. BtnEdit->Hint = FrmLang->lblEdit->Hint;//데이터 편집";
  373. bEnabled = true;
  374. EditMode = false;
  375. }
  376. break;
  377. }
  378. BtnSaveImgFile->Enabled = false;
  379. if (ImgForm->Picture->Bitmap != NULL)
  380. {
  381. if (ImgForm->Picture->Bitmap->Height != 0)
  382. {
  383. BtnSaveImgFile->Enabled = true;
  384. }
  385. }
  386. if (AEdit == 0 || AEdit == 2)
  387. {
  388. PnlCmd1->Enabled = true;
  389. PnlCmd2->Enabled = true;
  390. GrpList->Enabled = false;
  391. }
  392. else
  393. {
  394. PnlCmd1->Enabled = false;
  395. PnlCmd2->Enabled = false;
  396. GrpList->Enabled = true;
  397. }
  398. ChangeEditModeObject(AEdit);
  399. }
  400. //---------------------------------------------------------------------------
  401. void __fastcall TVMSM500M::ChangeEditModeObject(int AEdit)
  402. {
  403. }
  404. //---------------------------------------------------------------------------
  405. void __fastcall TVMSM500M::BtnInsertClick(TObject *Sender)
  406. {
  407. int nFormId;
  408. if (!GetNextVmsFormId(nFormId))
  409. {
  410. Application->MessageBox(lblText1->Caption.c_str(),//L"새로운 VMS 폼정보를 생성하지 못하였습니다.\r\n프로그램 종료후에 다시 시도해 보세요.",
  411. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  412. return;
  413. }
  414. TVMSM520M *pSelForm = new TVMSM520M(this);
  415. pSelForm->ShowModal();
  416. String sFormType = pSelForm->EdNmbr->Text.Trim();
  417. bool bSelected = pSelForm->m_bSelected;
  418. delete pSelForm;
  419. pSelForm = NULL;
  420. if (!bSelected) {
  421. return;
  422. }
  423. if (sFormType == "")
  424. {
  425. return;
  426. }
  427. int nFormDispDir = 0;
  428. if (sFormType.ToIntDef(0) == eFormTp_evehicle) {
  429. TVMSM560M *pEVehicleForm = new TVMSM560M(this);
  430. pEVehicleForm->ShowModal();
  431. String sFormSubType = pEVehicleForm->EdNmbr->Text.Trim();
  432. bool bSelected = pEVehicleForm->m_bSelected;
  433. delete pEVehicleForm;
  434. pEVehicleForm = NULL;
  435. if (!bSelected) {
  436. return;
  437. }
  438. nFormDispDir = sFormSubType.ToIntDef(0);
  439. CbFormSubType->ItemIndex = nFormDispDir;
  440. }
  441. FormClear();
  442. EdFormId->Text = String(nFormId);
  443. ChangeEditMode(2);
  444. FNewDb = true;
  445. //폼유형을 설정
  446. APP_SetCode(CbFormKind, sFormType);
  447. CbFormDispMode->ItemIndex = 0;
  448. CbFormDispDir->ItemIndex = nFormDispDir;
  449. bool singleForm = false;
  450. //폼유형에 맞게 기본 폼을 생성하자
  451. switch(sFormType.ToIntDef(11))
  452. {
  453. case eFormTp_traf_1:// ' 소통상황(1단)
  454. MakeDefTrafficForm(1);
  455. break;
  456. case eFormTp_traf_2:// ' 소통상황(2단)
  457. MakeDefTrafficForm(2);
  458. break;
  459. case eFormTp_traf_3:// ' 소통상황(3단)
  460. MakeDefTrafficForm(3);
  461. break;
  462. case eFormTp_traf_4:// ' 소통상황(4단)
  463. MakeDefTrafficForm(4);
  464. break;
  465. case eFormtp_figure:// ' 소통상황(도형식)
  466. break;
  467. case eFormTp_congest:// ' 정체소통상황
  468. //MakeDefTrafficForm(6);
  469. break;
  470. case eFormTp_incident:// ' 돌발문안
  471. break;
  472. case eFormTp_gongsa:// ' 공사/행사문안
  473. break;
  474. case eFormTp_hongbo:// ' 홍보문안
  475. break;
  476. case eFormTp_deture:// ' 우회도로
  477. break;
  478. case eFormTp_safe:// ' 재난안전
  479. break;
  480. case eFormTp_video:// ' 동영상
  481. MakeDefVideoStreamForm(70);
  482. singleForm = true;
  483. break;
  484. case eFormTp_stream:// ' 스트리밍영상
  485. MakeDefVideoStreamForm(80);
  486. singleForm = true;
  487. break;
  488. case eFormTp_atmp:// ' 대기환경(좋음)
  489. //MakeDefVideoStreamForm(90);
  490. break;
  491. case eFormTp_park:// ' 주차정보
  492. break;
  493. //TODO: 2023PRJ S
  494. case eFormTp_evehicle: // 긴급차량우선신호
  495. break;
  496. //TODO: 2023PRJ E
  497. default:
  498. //APP_SetCode(CbFormKind, "11");
  499. MakeDefTrafficForm(1);
  500. break;
  501. }
  502. if (singleForm)
  503. {
  504. if (PnlCmd2->Enabled == true)
  505. {
  506. //PnlCmd2->Enabled = false;
  507. }
  508. }
  509. else
  510. {
  511. if (PnlCmd2->Enabled == false)
  512. {
  513. PnlCmd2->Enabled = true;
  514. }
  515. }
  516. if (PgFormTab->ActivePage != TsFormObject)
  517. {
  518. PgFormTab->ActivePage = TsFormObject;
  519. }
  520. EdFormName->SetFocus();
  521. }
  522. //---------------------------------------------------------------------------
  523. bool __fastcall TVMSM500M::AddDefFormObject(String AFontName, int AFontSize, String AFontColor,
  524. int AObjType, String AText, int ASize, int APosX, int APosY, int AAlign/*=0*/)
  525. {
  526. TVmsFormObject *pObj;
  527. //1단 소통정보
  528. pObj = m_pEdtDesigner->AddObject(odtText);
  529. if (!pObj) return false;
  530. pObj->EditMode = true;
  531. pObj->ObjKind = OBJKIND_TEXT;
  532. pObj->ObjSeq = m_pEdtDesigner->GetNewObjectSeq();
  533. pObj->ObjType = String(AObjType);
  534. pObj->Text = AText;
  535. pObj->ObjSize = pObj->Text.Length();//ASize; //Pixel
  536. pObj->BkColorCode = "0"; //Balck, m_pEdtDesigner->BkColorCode;
  537. pObj->Blink = false;
  538. pObj->FontName = AFontName;
  539. pObj->FontNameCode = APP_GetCodeIdByName(CbFontName, AFontName);
  540. pObj->FontColorCode = AFontColor; //0:Black,1:Red,2:Green,3:Yellow
  541. pObj->FontSize = AFontSize;
  542. pObj->FontBold = true;
  543. pObj->TextAlign = AAlign; //(0:left, 1:right, 2:center
  544. pObj->SetPos(APosX, APosY);
  545. pObj->Show();
  546. AddObjectToList(pObj, true);
  547. return true;
  548. }
  549. //---------------------------------------------------------------------------
  550. void __fastcall TVMSM500M::MakeDefTrafficForm(int ARows)
  551. {
  552. //0:Black,1:Red, 2:Green, 3:Yellow
  553. //0:left, 1:right, 2:center
  554. //1단 소통정보
  555. if (g_AppCfg.sLang == "kr")
  556. {
  557. switch(ARows)
  558. {
  559. case 1:
  560. AddDefFormObject("굴림체", 18, "3", 12, "@시점명", 160, 16, 7, 1); //시점명
  561. AddDefFormObject("굴림체", 18, "3", 13, "@종점명", 160, 213, 7, 0); //종점명
  562. AddDefFormObject("굴림체", 18, "3", 14, "@소통상황", 112, 64, 35, 2); //소통상황
  563. AddDefFormObject("굴림체", 18, "2", 15, "@00분", 80, 213, 35, 0); //통행시간
  564. break;
  565. case 2:
  566. AddDefFormObject("굴림체", 16, "3", 0, "현위치", 100, 31, 7); //현위치
  567. AddDefFormObject("굴림체", 16, "3", 13, "@종점명1", 100, 133, 7); //종점명1
  568. AddDefFormObject("굴림체", 16, "3", 23, "@종점명2", 100, 265, 7); //종점명2
  569. AddDefFormObject("굴림체", 16, "2", 15, "@01분", 80, 133, 35); //통행시간1
  570. AddDefFormObject("굴림체", 16, "2", 25, "@02분", 80, 265, 35); //통행시간2
  571. break;
  572. case 3:
  573. AddDefFormObject("굴림체", 16, "3", 0, "현재위치부터", 126, 7, 7); //현재위치부터
  574. AddDefFormObject("굴림체", 16, "3", 13, "@종점명1", 85, 38, 50); //종점명1
  575. AddDefFormObject("굴림체", 16, "2", 15, "@1분", 80, 161, 50); //통행시간1
  576. AddDefFormObject("굴림체", 16, "3", 14, "@상황1", 53, 217, 50); //소통상황1
  577. AddDefFormObject("굴림체", 16, "3", 23, "@종점명2", 85, 38, 82); //종점명2
  578. AddDefFormObject("굴림체", 16, "2", 25, "@2분", 80, 161, 82); //통행시간2
  579. AddDefFormObject("굴림체", 16, "3", 24, "@상황2", 53, 217, 82); //소통상황2
  580. AddDefFormObject("굴림체", 16, "3", 33, "@종점명3", 85, 38, 117); //종점명3
  581. AddDefFormObject("굴림체", 16, "2", 35, "@3분", 80, 161, 117); //통행시간3
  582. AddDefFormObject("굴림체", 16, "3", 34, "@상황3", 53, 217, 117); //소통상황3
  583. break;
  584. case 6:
  585. AddDefFormObject("굴림체", 18, "3", 18, "@지점명", 300, 18, 20); //지점명
  586. AddDefFormObject("굴림체", 18, "3", 0, "주변", 126, 153, 20); //주변
  587. AddDefFormObject("굴림체", 18, "1", 0, "정체 극심", 126, 222, 20); //정체극심
  588. break;
  589. }
  590. }
  591. else
  592. {
  593. String sFontName = lblFontName->Caption;
  594. switch(ARows)
  595. {
  596. case 1:
  597. AddDefFormObject(sFontName, 18, "3", 12, "@StartName", 160, 16, 7); //@시점명 @StartName
  598. AddDefFormObject(sFontName, 18, "3", 13, "@EndName", 160, 213, 7); //@종점명 @EndName
  599. AddDefFormObject(sFontName, 18, "3", 14, "@Congest", 112, 64, 35); //@소통상황 @Congest
  600. AddDefFormObject(sFontName, 18, "2", 15, "@00Min", 80, 213, 35); //@통행시간 @00Min
  601. break;
  602. case 2:
  603. AddDefFormObject(sFontName, 16, "3", 0, "Location", 100, 31, 7); //현위치 Location
  604. AddDefFormObject(sFontName, 16, "3", 13, "@EndName1", 100, 133, 7); //종점명1 EndName1
  605. AddDefFormObject(sFontName, 16, "3", 23, "@EndName2", 100, 265, 7); //종점명2 EndName2
  606. AddDefFormObject(sFontName, 16, "2", 15, "@01Min", 80, 133, 35); //통행시간1 01Min
  607. AddDefFormObject(sFontName, 16, "2", 25, "@02Min", 80, 265, 35); //통행시간2 02Min
  608. break;
  609. case 3:
  610. AddDefFormObject(sFontName, 16, "3", 0, "From Location", 126, 7, 7); //현재위치부터 From Location
  611. AddDefFormObject(sFontName, 16, "3", 13, "@EndName1", 85, 38, 50); //종점명1 EndName1
  612. AddDefFormObject(sFontName, 16, "2", 15, "@1Min", 80, 161, 50); //통행시간1 1Min
  613. AddDefFormObject(sFontName, 16, "3", 14, "@Congest1", 53, 217, 50); //소통상황1 Congest1
  614. AddDefFormObject(sFontName, 16, "3", 23, "@EndName2", 85, 38, 82); //종점명2 EndName2
  615. AddDefFormObject(sFontName, 16, "2", 25, "@2Min", 80, 161, 82); //통행시간2 2Min
  616. AddDefFormObject(sFontName, 16, "3", 24, "@Congest2", 53, 217, 82); //소통상황2 Congest2
  617. AddDefFormObject(sFontName, 16, "3", 33, "@EndName3", 85, 38, 117); //종점명3 EndName3
  618. AddDefFormObject(sFontName, 16, "2", 35, "@3Min", 80, 161, 117); //통행시간3 3Min
  619. AddDefFormObject(sFontName, 16, "3", 34, "@Congest3", 53, 217, 117); //소통상황3 Congest3
  620. break;
  621. case 6:
  622. AddDefFormObject(sFontName, 18, "3", 18, "@SpotName", 300, 18, 20); //@지점명 @SpotName
  623. AddDefFormObject(sFontName, 18, "3", 0, "Around", 126, 153, 20); //주변 Around
  624. AddDefFormObject(sFontName, 18, "1", 0, "Congest Zam", 126, 222, 20); //정체극심 Congest Zam
  625. break;
  626. }
  627. }
  628. #if 0
  629. (String AFontName, int AFontSize, String AFontColor,
  630. int AObjType, String AText, int ASize, int APosX, int APosY)
  631. #endif
  632. }
  633. //---------------------------------------------------------------------------
  634. void __fastcall TVMSM500M::BtnDeleteClick(TObject *Sender)
  635. {
  636. int nIdx = TvList->DataController->FocusedRecordIndex;
  637. if (nIdx < 0) return;
  638. String sFormId = EdFormId->Text;
  639. if (sFormId.IsEmpty())
  640. {
  641. Application->MessageBox(lblText2->Caption.c_str(),//L"VMS 폼 삭제\r\n삭제할 VMS 폼을 목록에서 선택하세요.",
  642. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  643. return;
  644. }
  645. if (!CheckVmsFormUse(sFormId)) return;
  646. String sMsg;
  647. sMsg = lblText3->Caption + ": " + sFormId;//"VMS 폼 ID: " + sFormId;
  648. sMsg+= "\r\n" + lblText4->Caption;//"선택하신 VMS 폼 정보를 삭제하시겠습니까?";
  649. if (Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES) return;
  650. if (DelVmsForm(sFormId))
  651. {
  652. FUpdate = true;
  653. Application->MessageBox(lblText5->Caption.c_str(),//L"VMS 폼 삭제\r\nVMS 폼정보를 삭제 하였습니다.",
  654. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  655. FormClear();
  656. ChangeEditMode(1);
  657. LoadVmsForm();
  658. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_14, 0);
  659. }
  660. }
  661. //---------------------------------------------------------------------------
  662. void __fastcall TVMSM500M::BtnSaveImgFileClick(TObject *Sender)
  663. {
  664. if (EdFormId->Text == "") return;
  665. SaveDialog->Title = FTitle;
  666. SaveDialog->InitialDir = ExtractFilePath(Application->ExeName);
  667. SaveDialog->Filter = "Bitmap image Files (*.bmp)|*.bmp";
  668. SaveDialog->FileName = EdFormId->Text + ".bmp";
  669. if (SaveDialog->Execute())
  670. {
  671. try {
  672. String sFileName = SaveDialog->FileName;
  673. int iRet = sFileName.Pos(".bmp");
  674. if (iRet == 0)
  675. {
  676. sFileName = SaveDialog->FileName + ".bmp";
  677. }
  678. ImgForm->Picture->SaveToFile(sFileName);
  679. }
  680. catch (Exception &exception)
  681. {
  682. Application->ShowException(&exception);
  683. }
  684. }
  685. }
  686. //---------------------------------------------------------------------------
  687. void __fastcall TVMSM500M::ClearSymbloList()
  688. {
  689. for(int ii = 0; ii < FListSymb->Count; ii++)
  690. {
  691. Graphics::TBitmap *bitmap = (Graphics::TBitmap *)FListSymb->Items[ii];
  692. delete bitmap;
  693. }
  694. FListSymb->Clear();
  695. }
  696. //---------------------------------------------------------------------------
  697. void __fastcall TVMSM500M::TvListCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo,
  698. TMouseButton AButton, TShiftState AShift,
  699. bool &AHandled)
  700. {
  701. if (!ACellViewInfo) return;
  702. DisplayInfo();
  703. }
  704. //---------------------------------------------------------------------------
  705. void __fastcall TVMSM500M::TvListFocusedRecordChanged(TcxCustomGridTableView *Sender,
  706. TcxCustomGridRecord *APrevFocusedRecord, TcxCustomGridRecord *AFocusedRecord,
  707. bool ANewItemRecordFocusingChanged)
  708. {
  709. if (!AFocusedRecord) return;
  710. DisplayInfo();
  711. }
  712. //---------------------------------------------------------------------------
  713. void __fastcall TVMSM500M::CbSizeTypePropertiesChange(TObject *Sender)
  714. {
  715. EdSizeType->Text = CbSizeType->Text;
  716. #if 0
  717. TVmsSizeType *pVmsSizeType = APP_GetVmsSizeTypeObject(CbSizeType);
  718. if (pVmsSizeType)
  719. {
  720. if (pVmsSizeType->TypeCd == "VMP2")
  721. {
  722. if (CbFontColor->Visible == true) CbFontColor->Visible = false;
  723. }
  724. else
  725. {
  726. if (CbFontColor->Visible == false) CbFontColor->Visible = true;
  727. }
  728. }
  729. #endif
  730. BtnSearchClick(NULL);
  731. }
  732. //---------------------------------------------------------------------------
  733. void __fastcall TVMSM500M::BtnSearchClick(TObject *Sender)
  734. {
  735. RefreshData();
  736. EdFocus->SetFocus();
  737. ChangeEditMode(1);
  738. }
  739. //---------------------------------------------------------------------------
  740. void __fastcall TVMSM500M::RefreshData()
  741. {
  742. // 검색조건에 의한 링크 데이터 조회
  743. TvList->DataController->Filter->Clear();
  744. FormClear();
  745. LoadVmsForm();
  746. }
  747. //---------------------------------------------------------------------------
  748. void __fastcall TVMSM500M::FormClear()
  749. {
  750. FSelObjType = eSelObjNone;
  751. FSelIdx = -1;
  752. ImgForm->Picture->Bitmap->FreeImage();
  753. ImgForm->Picture->Bitmap = NULL;
  754. EdFormId->Clear();
  755. EdFormName->Clear();
  756. EdFormDesc->Clear();
  757. CbFormKind->ItemIndex = 0;
  758. CbFormDispMode->ItemIndex = 1;
  759. CbFormDispDir->ItemIndex = 3;
  760. CbFormColor->ItemIndex = 0;
  761. FormObjectClear();
  762. FNewDb = false;
  763. }
  764. //---------------------------------------------------------------------------
  765. void __fastcall TVMSM500M::FormObjectClear()
  766. {
  767. m_pEdtDesigner->Clear();
  768. CMM_ClearGridTableView(TvObjList);
  769. }
  770. //---------------------------------------------------------------------------
  771. void __fastcall TVMSM500M::DisplayInfo()
  772. {
  773. TcxTabSheet* pActive = PgFormTab->ActivePage;
  774. try
  775. {
  776. LockWindowUpdate(Handle);
  777. FormClear();
  778. PgEdit->ActivePage = TsEdit;
  779. FSelIdx = TvList->DataController->FocusedRecordIndex;
  780. if( FSelIdx <= -1 )
  781. return;
  782. DisplayFormInfo(FSelIdx);
  783. ChangeEditMode(3);
  784. }
  785. __finally
  786. {
  787. if (PgFormTab->ActivePage != pActive)
  788. PgFormTab->ActivePage = pActive;
  789. LockWindowUpdate(0);
  790. }
  791. }
  792. //---------------------------------------------------------------------------
  793. void __fastcall TVMSM500M::DisplayFormInfo(int AIdx)
  794. {
  795. TcxGridDataController *pDc = TvList->DataController;
  796. if (AIdx < FListSymb->Count)
  797. {
  798. Graphics::TBitmap *bitmap = (Graphics::TBitmap*)FListSymb->Items[AIdx];
  799. ImgForm->Picture->Bitmap->Assign(bitmap);
  800. }
  801. EdSizeType->Text = CbSizeType->Text;
  802. EdFormId->Text = VarToStr(pDc->Values[AIdx][Col01->Index]);
  803. EdFormName->Text = VarToStr(pDc->Values[AIdx][Col02->Index]);
  804. EdFormDesc->Text = VarToStr(pDc->Values[AIdx][Col03->Index]);
  805. EdFormName1->Text = EdFormName->Text;
  806. EdFormDesc1->Text = EdFormDesc->Text;
  807. CbFormColor->ItemIndex = VarToStr(pDc->Values[AIdx][Col08->Index]).ToIntDef(0);
  808. CbFormColor1->ItemIndex = CbFormColor->ItemIndex;
  809. m_sFormTypeCd = VarToStr(pDc->Values[AIdx][Col09->Index]);
  810. APP_SetCode(CbFormKind, m_sFormTypeCd);
  811. APP_SetCode(CbFormDispMode, VarToStr(pDc->Values[AIdx][Col06->Index]));
  812. APP_SetCode(CbFormDispDir, VarToStr(pDc->Values[AIdx][Col07->Index]));
  813. if (m_sFormTypeCd.ToIntDef(0) == eFormTp_evehicle) {
  814. CbFormSubType->ItemIndex = VarToStr(pDc->Values[AIdx][Col07->Index]).ToIntDef(0);
  815. }
  816. m_pEdtDesigner->BkColorCode = String(CbFormColor->ItemIndex);
  817. LoadFormObjectInfo(EdFormId->Text, m_pEdtDesigner, m_sFormTypeCd);
  818. SelObjectListData();
  819. MyUseManager->LoadFromDb(EdFormId->Text);
  820. }
  821. //---------------------------------------------------------------------------
  822. String __fastcall TVMSM500M::FindObjectTypeName(String AFormType, String ATypeCd)
  823. {
  824. String sReturn = "--???--";
  825. TVmsObjType *pObj = MyVmsObjTypeManager->FLists.Find(AFormType.ToIntDef(-1));
  826. if (!pObj) return sReturn;
  827. TFormObjType *pType = pObj->FLists.Find(ATypeCd.ToIntDef(-1));
  828. if (pType) sReturn = pType->NAME;
  829. return sReturn;
  830. }
  831. //---------------------------------------------------------------------------
  832. void __fastcall TVMSM500M::FnFormObjectSelected(TMessage &Msg)
  833. {
  834. #if 0
  835. static long sLParam = -1;
  836. long cLParam = (long)Msg.LParam;
  837. if (sLParam == cLParam)
  838. {
  839. return;
  840. }
  841. sLParam = cLParam;
  842. #endif
  843. m_bEdit = true;
  844. try {
  845. ImgDesc99->Visible = false;
  846. Lbl99->Visible = false;
  847. Cb99->Visible = false;
  848. //Cb99->ItemIndex = 0;
  849. PnlIfsc->Visible = false;
  850. EdIfscId->Text = "";
  851. TVmsFormObject *pObj = (TVmsFormObject *)Msg.LParam;
  852. if (!pObj) return;
  853. if (!pObj->Selected) return;
  854. EdObjSeq->Text = String(pObj->ObjSeq);
  855. int nObjType = pObj->ObjType.ToIntDef(0);
  856. if (nObjType == 91 || //@축통행시간(고정)
  857. nObjType == 92) //@축소통상황(고정)
  858. {
  859. LblTag->Caption = "제공구간";
  860. BtnIfscErase->Caption = "제공구간초기화";
  861. PnlIfsc->Visible = true;
  862. EdIfscId->Text = pObj->Tag;
  863. FSelObjType = eSelObjIfsc;
  864. }
  865. else
  866. if (nObjType == 101 || nObjType == 102 || nObjType == 103 || nObjType == 104) //@주차장
  867. {
  868. LblTag->Caption = "주차장";
  869. BtnIfscErase->Caption = "주차장초기화";
  870. PnlIfsc->Visible = true;
  871. EdIfscId->Text = pObj->Tag;
  872. FSelObjType = eSelObjPark;
  873. }
  874. else
  875. if (nObjType >= 401 && nObjType <= 413)
  876. {
  877. LblTag->Caption = "관측소";
  878. BtnIfscErase->Caption = "관측소초기화";
  879. PnlIfsc->Visible = true;
  880. EdIfscId->Text = pObj->Tag;
  881. FSelObjType = eSelObjAtmp;
  882. }
  883. String sFormType = APP_GetCode(CbFormKind);
  884. if (sFormType == "15")
  885. {
  886. //도형식배경소통정보
  887. if (nObjType == 0 || //문자열
  888. nObjType == 1 || //심볼
  889. nObjType == 2) //이미지
  890. {
  891. ImgDesc99->Visible = true;
  892. Lbl99->Visible = true;
  893. Cb99->Visible = true;
  894. TNotifyEvent evt = Cb99->Properties->OnChange;
  895. Cb99->Properties->OnChange = NULL;
  896. APP_SetCode(Cb99, pObj->Tag);
  897. Cb99->Properties->OnChange = evt;
  898. }
  899. }
  900. EdObjId->Text = pObj->ObjId;
  901. ChkBlinking->Checked = pObj->Blink;
  902. CbBkColor->ItemIndex = pObj->BkColorCode.ToInt();
  903. SeLeft->Value = pObj->GetLeft();
  904. SeTop->Value = pObj->GetTop();
  905. if (pObj->DrawType == odtText)
  906. {
  907. APP_SetCode(CbObjType, pObj->ObjType);
  908. APP_SetCode(CbFontName, pObj->FontNameCode);
  909. #if 0
  910. CbFontColor->ItemIndex = pObj->FontColorCode.ToInt();
  911. #else
  912. CbFontColor->ItemIndex = CDSFontManager->GetColorCodeIndex(pObj->FontColorCode.ToInt());
  913. #endif
  914. SeFontSize->Value = pObj->FontSize;
  915. ChkFontBold->Checked = pObj->FontBold;
  916. CbTextAlign->ItemIndex = pObj->TextAlign;
  917. if (EdTextData->Text != pObj->Text) EdTextData->Text = pObj->Text;
  918. if (pObj->ObjType.ToIntDef(0) == 19) //소통정보(가변)
  919. {
  920. EdTextData->Properties->ReadOnly = true;
  921. }
  922. else
  923. {
  924. EdTextData->Properties->ReadOnly = false;
  925. }
  926. //CbTextType->Visible = true;
  927. //CbImageType->Visible= false;
  928. }
  929. else
  930. {
  931. APP_SetCode(CbObjType, pObj->ObjType);
  932. if (EdTextData->Text != pObj->Text) EdTextData->Text = pObj->Text;
  933. //CbTextType->Visible = false;
  934. //CbImageType->Visible= true;
  935. }
  936. TcxGridFocusedRecordChangedEvent evt = TvObjList->OnFocusedRecordChanged;
  937. TvObjList->OnFocusedRecordChanged = NULL;
  938. String sObjSeq = String(pObj->ObjSeq);
  939. CMM_SetGridRow(CxObjList, TvObjList, sObjSeq, ColSeq->Index);
  940. TvObjList->OnFocusedRecordChanged = evt;
  941. CheckImageSelected();
  942. } catch(...) {}
  943. m_bEdit = false;
  944. }
  945. //---------------------------------------------------------------------------
  946. void __fastcall TVMSM500M::TvObjListFocusedRecordChanged(TcxCustomGridTableView *Sender,
  947. TcxCustomGridRecord *APrevFocusedRecord, TcxCustomGridRecord *AFocusedRecord,
  948. bool ANewItemRecordFocusingChanged)
  949. {
  950. #if 0
  951. if (AFocusedRecord == NULL)
  952. {
  953. return;
  954. }
  955. #endif
  956. ImgDesc99->Visible = false;
  957. Lbl99->Visible = false;
  958. Cb99->Visible = false;
  959. //Cb99->ItemIndex = 0;
  960. PnlIfsc->Visible = false;
  961. EdIfscId->Text = "";
  962. if (TvObjList->ViewData->RecordCount <= 0) return;
  963. if (TvObjList->DataController->FocusedRowIndex < 0) return;
  964. TcxDataController *pGDC = TvObjList->DataController;
  965. int nIndex = pGDC->FocusedRecordIndex;
  966. String sObjSeq = pGDC->Values[nIndex][ColSeq->Index];
  967. String sObjId = pGDC->Values[nIndex][ColId->Index];
  968. EdObjSeq->Text = sObjSeq;
  969. //m_pEdtDesigner->SelectObject(sObjSeq.ToInt());
  970. TVmsFormObject *pObj = m_pEdtDesigner->FindObject(sObjSeq.ToInt());
  971. if (pObj)
  972. {
  973. int nObjType = pObj->ObjType.ToIntDef(0);
  974. if (nObjType == 91 || //@축통행시간(고정)
  975. nObjType == 92) //@축소통상황(고정)
  976. {
  977. LblTag->Caption = "제공구간";
  978. BtnIfscErase->Caption = "제공구간초기화";
  979. PnlIfsc->Visible = true;
  980. EdIfscId->Text = pObj->Tag;
  981. FSelObjType = eSelObjIfsc;
  982. }
  983. else
  984. if (nObjType == 101 || nObjType == 102 || nObjType == 103 || nObjType == 104) //@주차장
  985. {
  986. LblTag->Caption = "주차장";
  987. BtnIfscErase->Caption = "주차장초기화";
  988. PnlIfsc->Visible = true;
  989. EdIfscId->Text = pObj->Tag;
  990. FSelObjType = eSelObjPark;
  991. }
  992. else
  993. if (nObjType >= 401 && nObjType <= 413)
  994. {
  995. LblTag->Caption = "관측소";
  996. BtnIfscErase->Caption = "관측소초기화";
  997. PnlIfsc->Visible = true;
  998. EdIfscId->Text = pObj->Tag;
  999. FSelObjType = eSelObjAtmp;
  1000. }
  1001. if (pObj->ObjType.ToIntDef(0) == 19) //소통정보(가변)
  1002. {
  1003. EdTextData->Properties->ReadOnly = true;
  1004. }
  1005. else
  1006. {
  1007. EdTextData->Properties->ReadOnly = false;
  1008. }
  1009. String sFormType = APP_GetCode(CbFormKind);
  1010. if (sFormType == "15")
  1011. {
  1012. //도형식배경소통정보
  1013. if (nObjType == 0 || //문자열
  1014. nObjType == 1 || //심볼
  1015. nObjType == 2) //이미지
  1016. {
  1017. ImgDesc99->Visible = true;
  1018. Lbl99->Visible = true;
  1019. Cb99->Visible = true;
  1020. TNotifyEvent evt = Cb99->Properties->OnChange;
  1021. Cb99->Properties->OnChange = NULL;
  1022. APP_SetCode(Cb99, pObj->Tag);
  1023. Cb99->Properties->OnChange = evt;
  1024. }
  1025. }
  1026. }
  1027. CheckImageSelected();
  1028. }
  1029. //---------------------------------------------------------------------------
  1030. void __fastcall TVMSM500M::SelObjectListData()
  1031. {
  1032. CMM_ClearGridTableView(TvObjList);
  1033. int nObjCnt = m_pEdtDesigner->GetObjectCount();
  1034. TVmsFormObject *pObj;
  1035. for(int ii = 0; ii < nObjCnt; ii++)
  1036. {
  1037. pObj = m_pEdtDesigner->GetObject(ii);
  1038. if (pObj)
  1039. {
  1040. AddObjectToList(pObj);
  1041. }
  1042. }
  1043. if (TvObjList->DataController->RecordCount > 0) TvObjList->DataController->FocusedRecordIndex = 0;
  1044. }
  1045. //---------------------------------------------------------------------------
  1046. void __fastcall TVMSM500M::AddObjectToList(TVmsFormObject *pObj, bool bSelect/*=false*/)
  1047. {
  1048. int nAddRow = -1;
  1049. String sFormType = APP_GetCode(CbFormKind);
  1050. TcxGridDataController *pGDC = TvObjList->DataController;
  1051. try
  1052. {
  1053. TvObjList->BeginUpdate();
  1054. pGDC->BeginUpdate();
  1055. nAddRow = pGDC->AppendRecord();
  1056. pGDC->Values[nAddRow][ColSeq->Index] = String(pObj->ObjSeq);
  1057. pGDC->Values[nAddRow][ColId->Index] = String(pObj->ObjId);
  1058. pGDC->Values[nAddRow][ColType->Index] = FindObjectTypeName(sFormType, pObj->ObjType);
  1059. pGDC->Values[nAddRow][ColData->Index] = pObj->Text;
  1060. #if 0
  1061. if (pObj->ObjKind == OBJKIND_TEXT)
  1062. {
  1063. pGDC->Values[nAddRow][ColKind->Index] = "문자열";
  1064. pGDC->Values[nAddRow][ColType->Index] = "";//GetComboBoxCodeName(CbTextType, pObj->ObjType);
  1065. pGDC->Values[nAddRow][ColData->Index] = pObj->Text;
  1066. }
  1067. else
  1068. if (pObj->ObjKind == OBJKIND_IMAGE)
  1069. {
  1070. pGDC->Values[nAddRow][ColKind->Index] = "이미지";
  1071. pGDC->Values[nAddRow][ColType->Index] = "";//GetComboBoxCodeName(CbImageType, pObj->ObjType);
  1072. pGDC->Values[nAddRow][ColData->Index] = pObj->Text;
  1073. }
  1074. else
  1075. if (pObj->ObjKind == OBJKIND_IMAGEID)
  1076. {
  1077. pGDC->Values[nAddRow][ColKind->Index] = "이미지ID";
  1078. pGDC->Values[nAddRow][ColType->Index] = "";//GetComboBoxCodeName(CbImageType, pObj->ObjType);
  1079. pGDC->Values[nAddRow][ColData->Index] = pObj->Text + " [" + pObj->ImageId + "]";
  1080. }
  1081. #endif
  1082. //pGDC->Values[nAddRow][ColX->Index] = String(pObj->GetLeft());
  1083. //pGDC->Values[nAddRow][ColY->Index] = String(pObj->GetTop());
  1084. pGDC->Values[nAddRow][ColIfscId->Index] = pObj->Tag;
  1085. pGDC->Values[nAddRow][ColMem->Index] = (int)pObj;
  1086. }
  1087. __finally
  1088. {
  1089. pGDC->EndUpdate();
  1090. TvObjList->EndUpdate();
  1091. if (bSelect && pGDC->RecordCount > 0) if (nAddRow >= 0) pGDC->FocusedRecordIndex = nAddRow;
  1092. }
  1093. }
  1094. //---------------------------------------------------------------------------
  1095. void __fastcall TVMSM500M::BtnSortReClick(TObject *Sender)
  1096. {
  1097. TcxButton *pBtn = (TcxButton *)Sender;
  1098. ReForm->Paragraph->Numbering = nsNone;
  1099. ReForm->Paragraph->Alignment = (TAlignment)pBtn->Tag;
  1100. }
  1101. //---------------------------------------------------------------------------
  1102. void __fastcall TVMSM500M::BtnBoldReClick(TObject *Sender)
  1103. {
  1104. if (ReForm->SelAttributes->Style.Contains(fsBold))
  1105. ReForm->SelAttributes->Style = TFontStyles() >> fsBold;
  1106. else
  1107. ReForm->SelAttributes->Style = TFontStyles() << fsBold;
  1108. }
  1109. //---------------------------------------------------------------------------
  1110. void __fastcall TVMSM500M::SeFontSizeRePropertiesChange(TObject *Sender)
  1111. {
  1112. if (((TcxSpinEdit*)Sender)->Value < ((TcxSpinEdit*)Sender)->Properties->MinValue)
  1113. ((TcxSpinEdit*)Sender)->Value = ((TcxSpinEdit*)Sender)->Properties->MinValue;
  1114. else if(((TcxSpinEdit*)Sender)->Value > ((TcxSpinEdit*)Sender)->Properties->MaxValue &&
  1115. ((TcxSpinEdit*)Sender)->Properties->MaxValue)
  1116. ((TcxSpinEdit*)Sender)->Value = ((TcxSpinEdit*)Sender)->Properties->MaxValue;
  1117. ReForm->SelAttributes->Size = ((TcxSpinEdit*)Sender)->Value;
  1118. }
  1119. //---------------------------------------------------------------------------
  1120. void __fastcall TVMSM500M::CbFontColorReClick(TObject *Sender)
  1121. {
  1122. #if 0
  1123. switch(CbFontColorRe->ItemIndex)
  1124. {
  1125. case 0 : ReForm->SelAttributes->Color = clBlack; break;
  1126. case 1 : ReForm->SelAttributes->Color = clRed; break;
  1127. case 2 : ReForm->SelAttributes->Color = clLime; break;
  1128. case 3 :
  1129. default: ReForm->SelAttributes->Color = clYellow; break;
  1130. }
  1131. #else
  1132. ReForm->SelAttributes->Color = CbFontColorRe->Selected;//CbFontColorRe->Colors[CbFontColorRe->ItemIndex];
  1133. #endif
  1134. }
  1135. //---------------------------------------------------------------------------
  1136. void __fastcall TVMSM500M::CbFontNameReClick(TObject *Sender)
  1137. {
  1138. String sFontCode = APP_GetCode(CbFontNameRe);
  1139. String sFontName = APP_GetCodeName(CbFontNameRe, sFontCode);
  1140. ReForm->SelAttributes->Name = sFontName;
  1141. }
  1142. //---------------------------------------------------------------------------
  1143. void __fastcall TVMSM500M::ReFormChange(TObject *Sender)
  1144. {
  1145. if (ChkAutoPreview->Checked) BtnPreviewClick(NULL);
  1146. }
  1147. //---------------------------------------------------------------------------
  1148. void __fastcall TVMSM500M::ChkAutoPreviewClick(TObject *Sender)
  1149. {
  1150. if (ChkAutoPreview->Checked) BtnPreviewClick(NULL);
  1151. }
  1152. //---------------------------------------------------------------------------
  1153. void __fastcall TVMSM500M::BtnPreviewClick(TObject *Sender)
  1154. {
  1155. if (ChkDrawModule->Checked)
  1156. m_pEdtDesigner->PreviewDrawModuleForm(ReForm, ReFormTemp, ImgEdtPreview, FVmsRows, FVmsCols);
  1157. else
  1158. m_pEdtDesigner->PreviewDrawForm(ReForm, ReFormTemp, ImgEdtPreview);
  1159. }
  1160. //---------------------------------------------------------------------------
  1161. void __fastcall TVMSM500M::BtnReApplyClick(TObject *Sender)
  1162. {
  1163. BtnPreviewClick(NULL);
  1164. m_pEdtDesigner->AddDrawFormToVmsForm(ReForm, ImgEdtPreview);
  1165. /*
  1166. * 신규로 등록한 객체의 객체타입과 폰트코드를 업데이트 한다.
  1167. */
  1168. CbVmsObjType->ItemIndex = 0; // For 고정문자열
  1169. String sObjType = APP_GetCode(CbVmsObjType);
  1170. TVmsFormObject *pObj;
  1171. int nObjCnt = m_pEdtDesigner->GetObjectCount();
  1172. for (int ii = 0; ii < nObjCnt; ii++)
  1173. {
  1174. pObj = m_pEdtDesigner->GetObject(ii);
  1175. if (pObj->ObjType == "XXX" && pObj->FontNameCode == "XXX")
  1176. {
  1177. pObj->ObjType = sObjType;
  1178. pObj->FontNameCode = APP_GetCodeIdByName(CbFontName, pObj->FontName);
  1179. }
  1180. }
  1181. PgEdit->ActivePageIndex = 0;
  1182. SelObjectListData();
  1183. }
  1184. //---------------------------------------------------------------------------
  1185. void __fastcall TVMSM500M::CbFormKindPropertiesChange(TObject *Sender)
  1186. {
  1187. CbVmsObjType->Properties->Items->Clear();
  1188. CbObjType->Properties->Items->Clear();
  1189. String sFormType = APP_GetCode(CbFormKind);
  1190. int nFormKind = sFormType.ToIntDef(0);
  1191. if (nFormKind == eFormTp_evehicle) {
  1192. if (PnlFormSubType->Visible == false) PnlFormSubType->Visible = true;
  1193. } else {
  1194. if (PnlFormSubType->Visible == true) PnlFormSubType->Visible = false;
  1195. }
  1196. TVmsObjType *pObj = MyVmsObjTypeManager->FLists.Find(nFormKind);
  1197. if (!pObj) return;
  1198. FOR_STL(TFormObjType*, pType, pObj->FLists)
  1199. {
  1200. String sType;
  1201. sType.printf(L"%2d", pType->TYPE);
  1202. sType = pType->TYPE;
  1203. CbVmsObjType->Properties->Items->Add(" [" + sType + "] " + pType->NAME);
  1204. CbObjType->Properties->Items->Add(" [" + sType + "] " + pType->NAME);
  1205. }
  1206. CbVmsObjType->ItemIndex = 0;
  1207. CbObjType->ItemIndex = 0;
  1208. //EdFocus->SetFocus();
  1209. }
  1210. //---------------------------------------------------------------------------
  1211. void __fastcall TVMSM500M::CbFormColorClick(TObject *Sender)
  1212. {
  1213. m_pEdtDesigner->SetBkColor(String(CbFormColor->ItemIndex));
  1214. }
  1215. //---------------------------------------------------------------------------
  1216. void __fastcall TVMSM500M::BtnMoveClick(TObject *Sender)
  1217. {
  1218. if (m_bEdit) return;
  1219. TcxButton *pBtn = (TcxButton *)Sender;
  1220. switch(pBtn->Tag)
  1221. {
  1222. case 0: m_pEdtDesigner->StepMoveLeft(); break;
  1223. case 1: m_pEdtDesigner->StepMoveRight(); break;
  1224. case 2: m_pEdtDesigner->StepMoveUp(); break;
  1225. case 3: m_pEdtDesigner->StepMoveDown(); break;
  1226. }
  1227. }
  1228. //---------------------------------------------------------------------------
  1229. void __fastcall TVMSM500M::BtnAlignClick(TObject *Sender)
  1230. {
  1231. if (m_bEdit) return;
  1232. TcxButton *pBtn = (TcxButton *)Sender;
  1233. if (m_pEdtDesigner->GetSelectedObjectCount() < 1) return;
  1234. switch(pBtn->Tag)
  1235. {
  1236. case 0: m_pEdtDesigner->SetLeftAlign(m_pEdtDesigner->GetLeftAlign()); break;
  1237. case 1: m_pEdtDesigner->SetRightAlign(m_pEdtDesigner->GetRightAlign()); break;
  1238. case 2: m_pEdtDesigner->SetTopAlign(m_pEdtDesigner->GetTopAlign()); break;
  1239. case 3: m_pEdtDesigner->SetBottomAlign(m_pEdtDesigner->GetBottomAlign()); break;
  1240. }
  1241. }
  1242. //---------------------------------------------------------------------------
  1243. void __fastcall TVMSM500M::BtnCenterClick(TObject *Sender)
  1244. {
  1245. if (m_bEdit) return;
  1246. TcxButton *pBtn = (TcxButton *)Sender;
  1247. if (m_pEdtDesigner->GetSelectedObjectCount() < 1) return;
  1248. switch(pBtn->Tag)
  1249. {
  1250. case 0: m_pEdtDesigner->SetAlignWidthCenter(); break;
  1251. case 1: m_pEdtDesigner->SetAlignHeightCenter(); break;
  1252. }
  1253. }
  1254. //---------------------------------------------------------------------------
  1255. void __fastcall TVMSM500M::SePosPropertiesChange(TObject *Sender)
  1256. {
  1257. if (m_bEdit) return;
  1258. if (((TcxSpinEdit*)Sender)->Value < ((TcxSpinEdit*)Sender)->Properties->MinValue)
  1259. ((TcxSpinEdit*)Sender)->Value = ((TcxSpinEdit*)Sender)->Properties->MinValue;
  1260. else if(((TcxSpinEdit*)Sender)->Value > ((TcxSpinEdit*)Sender)->Properties->MaxValue &&
  1261. ((TcxSpinEdit*)Sender)->Properties->MaxValue)
  1262. ((TcxSpinEdit*)Sender)->Value = ((TcxSpinEdit*)Sender)->Properties->MaxValue;
  1263. TcxSpinEdit *pPos = (TcxSpinEdit*)Sender;
  1264. if (m_pEdtDesigner->GetSelectedObjectCount() < 1) return;
  1265. int nValue = pPos->Value;
  1266. switch(pPos->Tag)
  1267. {
  1268. case 0: m_pEdtDesigner->MoveLeft(nValue); break;
  1269. case 1: m_pEdtDesigner->MoveUp(nValue); break;
  1270. }
  1271. }
  1272. //---------------------------------------------------------------------------
  1273. void __fastcall TVMSM500M::CbBkColorClick(TObject *Sender)
  1274. {
  1275. if (m_bEdit) return;
  1276. //if (m_pEdtDesigner->GetSelectedObjectCount() < 1) return;
  1277. m_pEdtDesigner->SetObjectBkColorCode(String(CbBkColor->ItemIndex));
  1278. }
  1279. //---------------------------------------------------------------------------
  1280. void __fastcall TVMSM500M::ChkBlinkingClick(TObject *Sender)
  1281. {
  1282. if (m_bEdit) return;
  1283. //if (m_pEdtDesigner->GetSelectedObjectCount() < 1) return;
  1284. m_pEdtDesigner->SetObjectBlink(ChkBlinking->Checked);
  1285. }
  1286. //---------------------------------------------------------------------------
  1287. void __fastcall TVMSM500M::EdTextDataKeyPress(TObject *Sender, wchar_t &Key)
  1288. {
  1289. if (m_bEdit) return;
  1290. if (Key == '\'')
  1291. {
  1292. Key = '`';
  1293. }
  1294. }
  1295. //---------------------------------------------------------------------------
  1296. void __fastcall TVMSM500M::EdTextDataPropertiesChange(TObject *Sender)
  1297. {
  1298. if (m_bEdit) return;
  1299. //if (m_pEdtDesigner->GetSelectedObjectCount() < 1) return;
  1300. m_pEdtDesigner->SetObejctText(EdTextData->Text);
  1301. }
  1302. //---------------------------------------------------------------------------
  1303. void __fastcall TVMSM500M::SeFontSizePropertiesChange(TObject *Sender)
  1304. {
  1305. if (m_bEdit) return;
  1306. if (((TcxSpinEdit*)Sender)->Value < ((TcxSpinEdit*)Sender)->Properties->MinValue)
  1307. ((TcxSpinEdit*)Sender)->Value = ((TcxSpinEdit*)Sender)->Properties->MinValue;
  1308. else if(((TcxSpinEdit*)Sender)->Value > ((TcxSpinEdit*)Sender)->Properties->MaxValue &&
  1309. ((TcxSpinEdit*)Sender)->Properties->MaxValue)
  1310. ((TcxSpinEdit*)Sender)->Value = ((TcxSpinEdit*)Sender)->Properties->MaxValue;
  1311. //if (m_pEdtDesigner->GetSelectedObjectCount() < 1) return;
  1312. int nFontSize = SeFontSize->Value;
  1313. m_pEdtDesigner->SetObejctFontSize(nFontSize);
  1314. }
  1315. //---------------------------------------------------------------------------
  1316. void __fastcall TVMSM500M::CbFontNamePropertiesChange(TObject *Sender)
  1317. {
  1318. if (m_bEdit) return;
  1319. //if (m_pEdtDesigner->GetSelectedObjectCount() < 1) return;
  1320. String sFontCode = APP_GetCode(CbFontName);
  1321. String sFontName = APP_GetCodeName(CbFontName, sFontCode);
  1322. m_pEdtDesigner->SetObejctFontName(sFontName.Trim());
  1323. m_pEdtDesigner->SetObejctFontNameCode(sFontCode);
  1324. }
  1325. //---------------------------------------------------------------------------
  1326. void __fastcall TVMSM500M::CbFontColorClick(TObject *Sender)
  1327. {
  1328. if (m_bEdit) return;
  1329. //if (m_pEdtDesigner->GetSelectedObjectCount() < 1) return;
  1330. #if 0
  1331. m_pEdtDesigner->SetObejctFontColorCode(String(CbFontColor->ItemIndex));
  1332. #else
  1333. m_pEdtDesigner->SetObejctFontColorCode(String(CDSFontManager->GetColorCode((int)CbFontColor->Selected)));
  1334. #endif
  1335. }
  1336. //---------------------------------------------------------------------------
  1337. void __fastcall TVMSM500M::CbTextAlignPropertiesChange(TObject *Sender)
  1338. {
  1339. if (m_bEdit) return;
  1340. //if (m_pEdtDesigner->GetSelectedObjectCount() < 1) return;
  1341. m_pEdtDesigner->SetObejctTextAlign(CbTextAlign->ItemIndex);
  1342. }
  1343. //---------------------------------------------------------------------------
  1344. void __fastcall TVMSM500M::EdObjIdPropertiesChange(TObject *Sender)
  1345. {
  1346. if (m_bEdit) return;
  1347. //if (m_pEdtDesigner->GetSelectedObjectCount() < 1) return;
  1348. try {
  1349. int nObjId;
  1350. TryStrToInt(EdObjId->Text.Trim(), nObjId);
  1351. m_pEdtDesigner->SetObejctId(nObjId);
  1352. } catch(...) {}
  1353. }
  1354. //---------------------------------------------------------------------------
  1355. void __fastcall TVMSM500M::ChkFontBoldClick(TObject *Sender)
  1356. {
  1357. if (m_bEdit) return;
  1358. //if (m_pEdtDesigner->GetSelectedObjectCount() < 1) return;
  1359. m_pEdtDesigner->SetObejctFontBold(ChkFontBold->Checked);
  1360. }
  1361. //---------------------------------------------------------------------------
  1362. bool __fastcall TVMSM500M::InsertVmsImage(String ANmbr, String AExpl, String AFileName, String ATypeCd)
  1363. {
  1364. String sQry;
  1365. TADOQuery *pADO = NULL;
  1366. sQry = "INSERT INTO TB_VMS_SYMB_LIB(SYMB_LIB_NMBR, RGST_DT, SYMB_EXPL, IMAG_DATA, SYMB_FILE_NM, SYMB_TYPE, AVI_DATA, IMAG_SIZE, UPDT_DT, DEL_YN) \r\n"
  1367. " VALUES(:p01, :p02, :p03, :p04, NULL, :p05, NULL, :p06, :p07, 'N' ) \r\n";
  1368. int nRowHeight = 0;
  1369. TMemoryStream *dataStream = new TMemoryStream();
  1370. ImgEdtTemp->Picture->Bitmap->SaveToStream(dataStream);
  1371. try
  1372. {
  1373. try
  1374. {
  1375. pADO = new TADOQuery(NULL);
  1376. pADO->Close();
  1377. pADO->Connection = ITSDb_GetConnection();
  1378. ITSDb_SQLText(pADO, sQry);
  1379. ITSDb_SQLBind(pADO, "p01", ANmbr);
  1380. ITSDb_SQLBind(pADO, "p02", Now().FormatString("yyyymmddhhnnss"));
  1381. ITSDb_SQLBind(pADO, "p03", AExpl);
  1382. pADO->Parameters->ParamByName("p04")->LoadFromStream(dataStream, ftBlob);
  1383. ITSDb_SQLBind(pADO, "p05", ATypeCd);
  1384. ITSDb_SQLBind(pADO, "p06", FFileSize);
  1385. ITSDb_SQLBind(pADO, "p07", Now().FormatString("yyyymmddhhnnss"));
  1386. pADO->ExecSQL();
  1387. return true;
  1388. }
  1389. catch(EDatabaseError &E)
  1390. {
  1391. DBERRORMSG("TVMSM500M::InsertVmsImage", String(E.ClassName()), E.Message, sQry);
  1392. throw Exception(String(E.ClassName()) + E.Message);
  1393. }
  1394. catch(Exception &e)
  1395. {
  1396. DBERRORMSG("TVMSM500M::InsertVmsImage", String(e.ClassName()), e.Message, sQry);
  1397. throw Exception(String(e.ClassName()) + e.Message);
  1398. }
  1399. }
  1400. __finally
  1401. {
  1402. if (pADO)
  1403. {
  1404. pADO->Close();
  1405. delete pADO;
  1406. }
  1407. if (dataStream) delete dataStream;
  1408. dataStream = NULL;
  1409. }
  1410. return true;
  1411. }
  1412. //---------------------------------------------------------------------------
  1413. void __fastcall TVMSM500M::OpenBmpCanClose(TObject *Sender, bool &CanClose)
  1414. {
  1415. String sFName = OpenBmp->FileName;
  1416. //sFName = sFName.UpperCase();
  1417. String sFilePath = ExtractFilePath(sFName);
  1418. String sFileName = ExtractFileName(sFName);
  1419. String sFileExt = ExtractFileExt(sFName);
  1420. if (sFileExt.UpperCase() != ".BMP")
  1421. {
  1422. if (!APP_CheckBmpFile(sFName, sFName))
  1423. {
  1424. Application->MessageBox(L"이미지 파일을 읽어오는데 실패하였습니다", L"이미지 파일 읽기 실패", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  1425. return;
  1426. }
  1427. sFileExt = ExtractFileExt(sFName);
  1428. }
  1429. sFName = sFName.UpperCase();
  1430. if (sFName.SubString(sFName.Length()-2, 3) != "BMP")
  1431. {
  1432. Application->MessageBox(FrmLang->lblImage11->Caption.c_str(),//L"BMP 파일만 적용 가능합니다.",
  1433. lblImage1->Caption.c_str(),//L"VMS 이미지 선택",
  1434. MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  1435. return;
  1436. }
  1437. try
  1438. {
  1439. FFileSize = ITSUtil_GetFileSize(sFName);
  1440. if (FFileSize <= 0)
  1441. {
  1442. Application->MessageBox(FrmLang->lblImage12->Caption.c_str(),//L"이미지 파일을 읽어 오는데 실패하였습니다.",
  1443. lblImage1->Caption.c_str(),//L"VMS 이미지 선택",
  1444. MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  1445. return;
  1446. }
  1447. #if 0
  1448. if (FFileSize > (1024 * 32)) // Max 32Kbytes
  1449. {
  1450. Application->MessageBox(FrmLang->lblImage13->Caption.c_str(),//L"이미지 파일의 최대 크기는 32KBytes를 넘을 수 없습니다.\r\n이미지 파일의 용량을 줄여 주세요.",
  1451. lblImage1->Caption.c_str(),//L"VMS 이미지 선택",
  1452. MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  1453. return;
  1454. }
  1455. #endif
  1456. ImgEdtTemp->Picture->Bitmap->FreeImage();
  1457. ImgEdtTemp->Picture->Bitmap = NULL;
  1458. ImgEdtTemp->Picture->Bitmap->LoadFromFile(sFName);
  1459. String sExpl = EdFormId->Text.Trim();
  1460. int nNmbr;
  1461. if (!FrmLang->GetNextVmsImgeId(nNmbr, 6000, 6999))
  1462. {
  1463. Application->MessageBox(FrmLang->lblImage4->Caption.c_str(),//L"새로운 VMS 이미지정보를 생성하지 못하였습니다.\r\n프로그램 종료후에 다시 시도해 보세요.",
  1464. lblImage1->Caption.c_str(),//L"VMS 이미지 선택",
  1465. MB_OK|MB_ICONERROR|MB_APPLMODAL);
  1466. return;
  1467. }
  1468. if (!InsertVmsImage(String(nNmbr), sExpl, "", "SBT0"))
  1469. {
  1470. Application->MessageBox(FrmLang->lblImage4->Caption.c_str(),//L"새로운 VMS 이미지정보를 저장하지 못하였습니다.\r\n프로그램 종료후에 다시 시도해 보세요.",
  1471. lblImage1->Caption.c_str(),//L"VMS 이미지 선택",
  1472. MB_OK|MB_ICONERROR|MB_APPLMODAL);
  1473. return;
  1474. }
  1475. TVmsFormObject *pObj = m_pEdtDesigner->AddObject(odtBmp);
  1476. if (!pObj) return;
  1477. int nNewObjSeq = m_pEdtDesigner->GetNewObjectSeq();
  1478. EdObjSeq->Text = String(nNewObjSeq);
  1479. pObj->ObjSeq = nNewObjSeq;
  1480. pObj->ObjKind = OBJKIND_IMAGEID;//OBJKIND_IMAGE; // "1"
  1481. pObj->ObjType = "1";//"2";
  1482. pObj->ObjSize = (int)FFileSize;
  1483. pObj->BkColorCode = m_pEdtDesigner->BkColorCode;
  1484. pObj->Blink = false;
  1485. pObj->Tag = "N";
  1486. pObj->SetBitmap(ImgEdtTemp->Picture->Bitmap);
  1487. pObj->Text = lblFile1->Caption;//"파일이미지";//ExtractShortPathName(sFName).c_str();
  1488. pObj->ImageId = String(nNmbr);
  1489. pObj->SetPos(0, 0);
  1490. #ifdef IMAGE_RESIZE
  1491. //pObj->GetImage()->AutoSize= false;
  1492. //pObj->GetImage()->Stretch = true;
  1493. TNotifyEvent evtW = SeImgW->Properties->OnChange;
  1494. TNotifyEvent evtH = SeImgH->Properties->OnChange;
  1495. SeImgW->Properties->OnChange = NULL;
  1496. SeImgH->Properties->OnChange = NULL;
  1497. SeImgW->Value = ImgEdtTemp->Picture->Bitmap->Width;
  1498. SeImgH->Value = ImgEdtTemp->Picture->Bitmap->Height;
  1499. SeImgW->Properties->OnChange = evtW;
  1500. SeImgH->Properties->OnChange = evtH;
  1501. PnlImage->Visible = true;
  1502. #endif
  1503. pObj->EditMode = true;
  1504. pObj->Show();
  1505. AddObjectToList(pObj, true);
  1506. }
  1507. catch(...)
  1508. {
  1509. return;
  1510. }
  1511. }
  1512. //---------------------------------------------------------------------------
  1513. bool __fastcall TVMSM500M::CheckVideoStreamImage()
  1514. {
  1515. String sQry;
  1516. TADOQuery *pADO = NULL;
  1517. sQry = "SELECT SYMB_LIB_NMBR, COUNT(1) AS CNT \r\n"
  1518. " FROM TB_VMS_SYMB_LIB \r\n"
  1519. " WHERE SYMB_LIB_NMBR IN (200, 300) \r\n"
  1520. " GROUP BY SYMB_LIB_NMBR \r\n";
  1521. bool bVideo = false;
  1522. bool bStream = false;
  1523. try
  1524. {
  1525. try
  1526. {
  1527. pADO = new TADOQuery(NULL);
  1528. pADO->Close();
  1529. pADO->Connection = ITSDb_GetConnection();
  1530. ITSDb_SQLText(pADO, sQry);
  1531. ITSDb_SQLOpen(pADO);
  1532. for( ; !pADO->Eof; pADO->Next())
  1533. {
  1534. int SYMB_LIB_NMBR = pADO->FieldByName("SYMB_LIB_NMBR")->AsInteger;
  1535. int CNT = pADO->FieldByName("CNT")->AsInteger;
  1536. if (CNT > 0)
  1537. {
  1538. if (SYMB_LIB_NMBR == 200) bVideo = true;
  1539. else bStream = true;
  1540. }
  1541. }
  1542. sQry = "INSERT INTO TB_VMS_SYMB_LIB(SYMB_LIB_NMBR, RGST_DT, SYMB_EXPL, IMAG_DATA, SYMB_FILE_NM, SYMB_TYPE, AVI_DATA, IMAG_SIZE, UPDT_DT, DEL_YN) \r\n"
  1543. " VALUES(:p01, :p02, :p03, :p04, NULL, 'SBT9', NULL, :p05, :p06, 'N' ) \r\n";
  1544. if (!bVideo)
  1545. {
  1546. TMemoryStream *imgStream = new TMemoryStream();
  1547. ImgVideo->Picture->Bitmap->SaveToStream(imgStream);
  1548. try
  1549. {
  1550. ITSDb_SQLText(pADO, sQry);
  1551. ITSDb_SQLBind(pADO, "p01", "200");
  1552. ITSDb_SQLBind(pADO, "p02", Now().FormatString("yyyymmddhhnnss"));
  1553. if (g_AppCfg.sLang != "kr")
  1554. ITSDb_SQLBind(pADO, "p03", "@Video file mame");
  1555. else
  1556. ITSDb_SQLBind(pADO, "p03", "@동영상파일명");
  1557. pADO->Parameters->ParamByName("p04")->LoadFromStream(imgStream, ftBlob);
  1558. ITSDb_SQLBind(pADO, "p05", ImgVideo->Width*ImgVideo->Height);
  1559. ITSDb_SQLBind(pADO, "p06", Now().FormatString("yyyymmddhhnnss"));
  1560. pADO->ExecSQL();
  1561. }
  1562. __finally
  1563. {
  1564. if (imgStream) delete imgStream;
  1565. imgStream = NULL;
  1566. }
  1567. }
  1568. if (!bStream)
  1569. {
  1570. TMemoryStream *imgStream = new TMemoryStream();
  1571. ImgStream->Picture->Bitmap->SaveToStream(imgStream);
  1572. try
  1573. {
  1574. ITSDb_SQLText(pADO, sQry);
  1575. ITSDb_SQLBind(pADO, "p01", "300");
  1576. ITSDb_SQLBind(pADO, "p02", Now().FormatString("yyyymmddhhnnss"));
  1577. if (g_AppCfg.sLang != "kr")
  1578. ITSDb_SQLBind(pADO, "p03", "@Stream URL");
  1579. else
  1580. ITSDb_SQLBind(pADO, "p03", "@스트리밍영상주소");
  1581. pADO->Parameters->ParamByName("p04")->LoadFromStream(imgStream, ftBlob);
  1582. ITSDb_SQLBind(pADO, "p05", ImgStream->Width*ImgStream->Height);
  1583. pADO->ExecSQL();
  1584. }
  1585. __finally
  1586. {
  1587. if (imgStream) delete imgStream;
  1588. imgStream = NULL;
  1589. }
  1590. }
  1591. return true;
  1592. }
  1593. catch(EDatabaseError &E)
  1594. {
  1595. DBERRORMSG("TVMSM500M::CheckVideoStreamImage", String(E.ClassName()), E.Message, sQry);
  1596. throw Exception(String(E.ClassName()) + E.Message);
  1597. }
  1598. catch(Exception &e)
  1599. {
  1600. DBERRORMSG("TVMSM500M::CheckVideoStreamImage", String(e.ClassName()), e.Message, sQry);
  1601. throw Exception(String(e.ClassName()) + e.Message);
  1602. }
  1603. }
  1604. __finally
  1605. {
  1606. if (pADO)
  1607. {
  1608. pADO->Close();
  1609. delete pADO;
  1610. }
  1611. }
  1612. return true;
  1613. }
  1614. //---------------------------------------------------------------------------
  1615. void __fastcall TVMSM500M::MakeDefVideoStreamForm(int AType)
  1616. {
  1617. if (CbVmsObjType->ItemIndex < 0) return;
  1618. for (int ii = 0; ii < CbVmsObjType->Properties->Items->Count; ii++)
  1619. {
  1620. CbVmsObjType->ItemIndex = ii;
  1621. String sFormType = APP_GetCode(CbFormKind);
  1622. String sObjType = APP_GetCode(CbVmsObjType);
  1623. int nObjType = sObjType.ToIntDef(0);
  1624. String sObjText = FindObjectTypeName(sFormType, sObjType);
  1625. String sFontName = FrmLang->lblFontName->Caption;//"굴림체";
  1626. String sFontNameCode = "1";
  1627. String sFontColorCode = "2"; //Green
  1628. int nFontSize = 22;
  1629. bool bFontBold = true;
  1630. if (AType == 90) nFontSize = 14;
  1631. switch(nObjType)
  1632. {
  1633. case 200: //동영상
  1634. case 300: //스트리밍영상
  1635. {
  1636. TVmsFormObject *pObj = m_pEdtDesigner->AddObject(odtBmp);
  1637. if (!pObj) return;
  1638. int nNewObjSeq = m_pEdtDesigner->GetNewObjectSeq();
  1639. EdObjSeq->Text = String(nNewObjSeq);
  1640. pObj->EditMode = false;
  1641. pObj->ObjSeq = nNewObjSeq;
  1642. pObj->ObjKind = OBJKIND_IMAGEID; // "2"
  1643. pObj->ObjType = sObjType;
  1644. if (nObjType == 200)
  1645. pObj->ObjSize = ImgVideo->Width * ImgVideo->Height;
  1646. else
  1647. pObj->ObjSize = ImgStream->Width * ImgStream->Height;
  1648. pObj->BkColorCode = m_pEdtDesigner->BkColorCode;
  1649. pObj->Blink = false;
  1650. pObj->Tag = "N";
  1651. pObj->Text = sObjText;
  1652. pObj->ImageId = IntToStr(nObjType);
  1653. int nW, nH;
  1654. if (nObjType == 200)
  1655. {
  1656. pObj->SetBitmap(ImgVideo->Picture->Bitmap);
  1657. nW = ImgVideo->Width;
  1658. nH = ImgVideo->Height;
  1659. }
  1660. else
  1661. {
  1662. pObj->SetBitmap(ImgStream->Picture->Bitmap);
  1663. nW = ImgStream->Width;
  1664. nH = ImgStream->Height;
  1665. }
  1666. nW = (FVmsWidth-nW)/2;
  1667. nH = (FVmsHeight-nH)/2;
  1668. pObj->SetPos(nW, nH);
  1669. pObj->Show();
  1670. AddObjectToList(pObj, true);
  1671. }
  1672. break;
  1673. case 0: //문자열
  1674. case 1: //심볼
  1675. case 2: //이미지
  1676. case 406: //@통합대기등급 이미지
  1677. case 407: //@미세먼지등급 이미지
  1678. case 408: //@초미세먼지등급 이미지
  1679. case 413: //@오존등급이미지
  1680. break;
  1681. default:
  1682. {
  1683. TVmsFormObject *pObj = m_pEdtDesigner->AddObject(odtText);
  1684. if (!pObj) return;
  1685. int nNewObjSeq = m_pEdtDesigner->GetNewObjectSeq();
  1686. EdObjSeq->Text = String(nNewObjSeq);
  1687. pObj->ObjSeq = nNewObjSeq;
  1688. pObj->ObjType = sObjType;
  1689. switch(nObjType)
  1690. {
  1691. case 409: //@통합대기등급
  1692. case 404: //@PM10등급
  1693. case 405: //@PM2.5등급
  1694. case 412: //@오존등급
  1695. //pObj->TextAlign = 2; // center
  1696. pObj->TextAlign = 0; // left
  1697. break;
  1698. case 402: //@PM10
  1699. case 403: //@PM2.5
  1700. case 410: //@통합대기
  1701. case 411: //@오존
  1702. //pObj->TextAlign = 1; // right
  1703. pObj->TextAlign = 0; // left
  1704. break;
  1705. default:
  1706. pObj->TextAlign = 0; // left
  1707. break;
  1708. }
  1709. //EdTextData->Properties->ReadOnly = false;
  1710. pObj->ObjSize = sObjText.Length();
  1711. pObj->BkColorCode = m_pEdtDesigner->BkColorCode;
  1712. pObj->Blink = false;
  1713. pObj->Text = sObjText;
  1714. pObj->EditMode = true;
  1715. pObj->ObjKind = OBJKIND_TEXT;
  1716. pObj->FontName = sFontName;
  1717. pObj->FontNameCode = sFontNameCode;
  1718. pObj->FontColorCode = sFontColorCode;
  1719. pObj->FontSize = nFontSize;
  1720. pObj->FontBold = bFontBold;
  1721. pObj->SetPos(0, 0);
  1722. pObj->Show();
  1723. AddObjectToList(pObj, true);
  1724. }
  1725. break;
  1726. }
  1727. }
  1728. }
  1729. //---------------------------------------------------------------------------
  1730. void __fastcall TVMSM500M::BtnAddTextClick(TObject *Sender)
  1731. {
  1732. if (CbVmsObjType->ItemIndex < 0) return;
  1733. PnlImage->Visible = false;
  1734. String sFormType = APP_GetCode(CbFormKind);
  1735. String sObjType = APP_GetCode(CbVmsObjType);
  1736. int nObjType = sObjType.ToIntDef(0);
  1737. String sObjText = FindObjectTypeName(sFormType, sObjType);
  1738. String sFontName = FrmLang->lblFontName->Caption;//"굴림체";
  1739. String sFontNameCode = "1";
  1740. String sFontColorCode = "2"; //Green
  1741. int nFontSize = 14;
  1742. bool bFontBold = true;
  1743. switch(nObjType)
  1744. {
  1745. case 201: //동영상
  1746. case 301: //스트리밍영상
  1747. {
  1748. TVmsFormObject *pObj = m_pEdtDesigner->AddObject(odtBmp);
  1749. if (!pObj) return;
  1750. int nNewObjSeq = m_pEdtDesigner->GetNewObjectSeq();
  1751. EdObjSeq->Text = String(nNewObjSeq);
  1752. pObj->EditMode = false;
  1753. pObj->ObjSeq = nNewObjSeq;
  1754. pObj->ObjKind = OBJKIND_IMAGE; // "2"
  1755. pObj->ObjType = sObjType;
  1756. pObj->ObjSize = FVmsWidth * FVmsHeight;
  1757. pObj->BkColorCode = m_pEdtDesigner->BkColorCode;
  1758. pObj->Blink = false;
  1759. pObj->Tag = "N";
  1760. pObj->Text = sObjText;
  1761. pObj->ImageId = "0";
  1762. int nW, nH;
  1763. if (nObjType == 201)
  1764. {
  1765. pObj->SetBitmap(ImgVideo->Picture->Bitmap);
  1766. nW = ImgVideo->Width;
  1767. nH = ImgVideo->Height;
  1768. }
  1769. else
  1770. {
  1771. pObj->SetBitmap(ImgStream->Picture->Bitmap);
  1772. nW = ImgStream->Width;
  1773. nH = ImgStream->Height;
  1774. }
  1775. //pObj->SetSize(FVmsWidth, FVmsHeight);
  1776. nW = (FVmsWidth-nW)/2;
  1777. nH = (FVmsHeight-nH)/2;
  1778. pObj->SetPos(nW, nH);
  1779. pObj->Show();
  1780. AddObjectToList(pObj, true);
  1781. }
  1782. break;
  1783. case 1: //이미지 심볼
  1784. case 3: //소통정보배경이미지
  1785. case 17: //@소통이미지1
  1786. case 27: //@소통이미지2
  1787. case 37: //@소통이미지3
  1788. case 47: //@소통이미지4
  1789. case 406: //@통합대기등급 이미지
  1790. case 407: //@미세먼지등급 이미지
  1791. case 408: //@초미세먼지등급 이미지
  1792. case 413: //@오존등급이미지
  1793. {
  1794. TVMSM510M *pSelForm = new TVMSM510M(this);
  1795. if (nObjType == 1 || nObjType == 3)
  1796. {
  1797. pSelForm->FImageType = nObjType;
  1798. }
  1799. else
  1800. {
  1801. pSelForm->FImageType = 2;
  1802. }
  1803. if (nObjType >= 406 && nObjType <= 408)
  1804. {
  1805. pSelForm->FImageType = 1;
  1806. }
  1807. if (nObjType == 413)
  1808. {
  1809. pSelForm->FImageType = 1;
  1810. }
  1811. String sSymbType = "SBT0";
  1812. switch(nObjType)
  1813. {
  1814. case 1: //이미지 심볼
  1815. sSymbType = "SBT0";
  1816. break;
  1817. case 3: //소통정보배경이미지
  1818. sSymbType = "SBT1";
  1819. break;
  1820. case 17: //@소통이미지1
  1821. case 27: //@소통이미지2
  1822. case 37: //@소통이미지3
  1823. case 47: //@소통이미지4
  1824. sSymbType = "SBT2";
  1825. break;
  1826. case 406: //@통합대기등급 이미지
  1827. case 407: //@미세먼지등급 이미지
  1828. case 408: //@초미세먼지등급 이미지
  1829. case 413: //@오존등급 이미지
  1830. sSymbType = "SBT4";
  1831. break;
  1832. default :
  1833. sSymbType = "SBT0";
  1834. break;
  1835. }
  1836. pSelForm->SYMB_TYPE = sSymbType;
  1837. pSelForm->ShowModal();
  1838. if (!pSelForm->m_bSelected)
  1839. {
  1840. delete pSelForm;
  1841. return;
  1842. }
  1843. TVmsFormObject *pObj = m_pEdtDesigner->AddObject(odtBmp);
  1844. if (!pObj) return;
  1845. int nNewObjSeq = m_pEdtDesigner->GetNewObjectSeq();
  1846. EdObjSeq->Text = String(nNewObjSeq);
  1847. pObj->ObjSeq = nNewObjSeq;
  1848. pObj->ObjKind = OBJKIND_IMAGEID; // "2"
  1849. pObj->ObjType = sObjType;
  1850. pObj->ObjSize = pSelForm->ImgPreView->Picture->Bitmap->Width * pSelForm->ImgPreView->Picture->Bitmap->Height;
  1851. pObj->BkColorCode = m_pEdtDesigner->BkColorCode;
  1852. pObj->Blink = false;
  1853. pObj->Tag = "N";
  1854. pObj->Text = sObjText;
  1855. pObj->ImageId = pSelForm->EdNmbr->Text;
  1856. pObj->SetBitmap(pSelForm->ImgPreView->Picture->Bitmap);
  1857. #ifdef IMAGE_RESIZE
  1858. //if (sSymbType == "SBT0")
  1859. {
  1860. //pObj->GetImage()->AutoSize= false;
  1861. //pObj->GetImage()->Stretch = true;
  1862. TNotifyEvent evtW = SeImgW->Properties->OnChange;
  1863. TNotifyEvent evtH = SeImgH->Properties->OnChange;
  1864. SeImgW->Properties->OnChange = NULL;
  1865. SeImgH->Properties->OnChange = NULL;
  1866. SeImgW->Value = pSelForm->ImgPreView->Picture->Bitmap->Width;
  1867. SeImgH->Value = pSelForm->ImgPreView->Picture->Bitmap->Height;
  1868. SeImgW->Properties->OnChange = evtW;
  1869. SeImgH->Properties->OnChange = evtH;
  1870. PnlImage->Visible = true;
  1871. }
  1872. #endif
  1873. pObj->SetPos(0, 0);
  1874. if (pObj->Left < 0) pObj->Left = 0;
  1875. if (pObj->Top < 0) pObj->Top = 0;
  1876. pObj->Show();
  1877. AddObjectToList(pObj, true);
  1878. delete pSelForm;
  1879. }
  1880. break;
  1881. case 2: //파일이미지
  1882. OpenBmp->FileName = "";
  1883. OpenBmp->Execute();
  1884. break;
  1885. #if 0
  1886. case 17: //@방향이미지1
  1887. case 27: //@방향이미지2
  1888. case 37: //@방향이미지3
  1889. case 47: //@방향이미지4
  1890. {
  1891. TVmsFormObject *pObj = m_pEdtDesigner->AddObject(odtBmp);
  1892. if (!pObj) return;
  1893. int nNewObjSeq = m_pEdtDesigner->GetNewObjectSeq();
  1894. EdObjSeq->Text = String(nNewObjSeq);
  1895. pObj->ObjSeq = nNewObjSeq;
  1896. pObj->ObjKind = OBJKIND_IMAGEID; // "2"
  1897. pObj->ObjType = sObjType;
  1898. pObj->ObjSize = ImgDir->Picture->Bitmap->Width * ImgDir->Picture->Bitmap->Height;
  1899. pObj->BkColorCode = m_pEdtDesigner->BkColorCode;
  1900. pObj->Blink = false;
  1901. //pObj->Text = CbVmsObjType->Text;
  1902. pObj->Text = sObjText;
  1903. pObj->ImageId = "0";
  1904. pObj->SetBitmap(ImgDir->Picture->Bitmap);
  1905. pObj->SetPos(0, 0);
  1906. pObj->Show();
  1907. AddObjectToList(pObj, true);
  1908. }
  1909. break;
  1910. #endif
  1911. default:
  1912. {
  1913. TVmsFormObject *pObj = m_pEdtDesigner->AddObject(odtText);
  1914. if (!pObj) return;
  1915. int nNewObjSeq = m_pEdtDesigner->GetNewObjectSeq();
  1916. EdObjSeq->Text = String(nNewObjSeq);
  1917. pObj->ObjSeq = nNewObjSeq;
  1918. pObj->ObjType = sObjType;
  1919. if (nObjType == 91 || nObjType == 92 ||
  1920. nObjType == 101 || nObjType == 102 || nObjType == 103 || nObjType == 104 ||
  1921. (nObjType >= 401 && nObjType <= 413)
  1922. )
  1923. {
  1924. pObj->Tag = "";
  1925. }
  1926. else
  1927. {
  1928. pObj->Tag = "N";
  1929. }
  1930. pObj->TextAlign = 0; // left
  1931. if (nObjType == 19) //소통정보(가변)
  1932. {
  1933. #ifdef ENG
  1934. sObjText = "@Traffic Fast About 0 Min.";
  1935. #else
  1936. sObjText = "@소통원활 약 0 분";
  1937. #endif
  1938. pObj->TextAlign = 2; // center
  1939. EdTextData->Properties->ReadOnly = true;
  1940. }
  1941. else if (nObjType == 102 || nObjType == 103) {
  1942. // 주차면수, 주차가능면수
  1943. sObjText = "000면";
  1944. pObj->TextAlign = 1; // right
  1945. }
  1946. else if (nObjType == 104) {
  1947. // 주차장혼잡도
  1948. sObjText = "@상황";
  1949. pObj->TextAlign = 2; // center
  1950. }
  1951. else
  1952. {
  1953. EdTextData->Properties->ReadOnly = false;
  1954. }
  1955. pObj->ObjSize = sObjText.Length();
  1956. pObj->BkColorCode = m_pEdtDesigner->BkColorCode;
  1957. pObj->Blink = false;
  1958. pObj->Text = sObjText;
  1959. pObj->EditMode = true;
  1960. pObj->ObjKind = OBJKIND_TEXT;
  1961. pObj->FontName = sFontName;
  1962. pObj->FontNameCode = sFontNameCode;
  1963. pObj->FontColorCode = sFontColorCode;
  1964. pObj->FontSize = nFontSize;
  1965. pObj->FontBold = bFontBold;
  1966. pObj->SetPos(0, 0);
  1967. pObj->Show();
  1968. AddObjectToList(pObj, true);
  1969. }
  1970. break;
  1971. }
  1972. }
  1973. //---------------------------------------------------------------------------
  1974. void __fastcall TVMSM500M::BtnObjDeleteClick(TObject *Sender)
  1975. {
  1976. if (m_pEdtDesigner->GetSelectedObjectCount() < 1) return;
  1977. String sMsgString;
  1978. sMsgString = lblText6->Caption;//"선택한 객체 정보를 모두 삭제하시겠습니까?";
  1979. if (Application->MessageBox(sMsgString.c_str(),
  1980. lblText7->Caption.c_str(),//L"객체 정보 삭제",
  1981. MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES)
  1982. {
  1983. return;
  1984. }
  1985. bool bUse = false;
  1986. TVmsFormObject *pObj;
  1987. int nObjCnt = m_pEdtDesigner->GetObjectCount();
  1988. for (int ii = nObjCnt-1; ii >= 0; ii--)
  1989. {
  1990. pObj = m_pEdtDesigner->GetObject(ii);
  1991. if (pObj->Selected)
  1992. {
  1993. TVmsObjUse*pObjUse = MyUseManager->FLists.Find(pObj->ObjSeq);
  1994. if (pObjUse)
  1995. {
  1996. bUse = true;
  1997. continue;
  1998. }
  1999. m_pEdtDesigner->DelObject(ii);
  2000. }
  2001. }
  2002. if (bUse)
  2003. {
  2004. Application->MessageBox(lblText8->Caption.c_str(),//L"VMS 폼 객체 삭제\r\nVMS 폼 객체 중 정보제공구간에 설정된 객체는 삭제할 수 없습니다.",
  2005. FTitle.c_str(),
  2006. MB_OK|MB_ICONERROR|MB_APPLMODAL);
  2007. }
  2008. SelObjectListData();
  2009. }
  2010. //---------------------------------------------------------------------------
  2011. void __fastcall TVMSM500M::ColXGetDataText(TcxCustomGridTableItem *Sender, int ARecordIndex,
  2012. UnicodeString &AText)
  2013. {
  2014. if (ARecordIndex < 0) return;
  2015. try
  2016. {
  2017. int nMemPtr = (int)(TvObjList->DataController->Values[ARecordIndex][ColMem->Index]);
  2018. TVmsFormObject *pObj = (TVmsFormObject*)nMemPtr;
  2019. if (pObj)
  2020. {
  2021. AText = pObj->GetLeft();
  2022. }
  2023. } catch(Exception &e) {}
  2024. }
  2025. //---------------------------------------------------------------------------
  2026. void __fastcall TVMSM500M::ColYGetDataText(TcxCustomGridTableItem *Sender, int ARecordIndex,
  2027. UnicodeString &AText)
  2028. {
  2029. if (ARecordIndex < 0) return;
  2030. try
  2031. {
  2032. int nMemPtr = (int)(TvObjList->DataController->Values[ARecordIndex][ColMem->Index]);
  2033. TVmsFormObject *pObj = (TVmsFormObject*)nMemPtr;
  2034. if (pObj)
  2035. {
  2036. AText = pObj->GetTop();
  2037. }
  2038. } catch(Exception &e) {}
  2039. }
  2040. //---------------------------------------------------------------------------
  2041. void __fastcall TVMSM500M::CbVmsObjTypeClick(TObject *Sender)
  2042. {
  2043. if (BtnAddText->CanFocus())
  2044. {
  2045. BtnAddText->SetFocus();
  2046. }
  2047. }
  2048. //---------------------------------------------------------------------------
  2049. void __fastcall TVMSM500M::EdIfscIdClick(TObject *Sender)
  2050. {
  2051. if (FSelObjType == eSelObjIfsc)
  2052. {
  2053. TVMSM530M *pSelForm = new TVMSM530M(this);
  2054. pSelForm->EdNmbr->Text = EdIfscId->Text.Trim();
  2055. pSelForm->ShowModal();
  2056. String sIfscId = pSelForm->EdNmbr->Text.Trim();
  2057. bool bSelected = pSelForm->m_bSelected;
  2058. delete pSelForm;
  2059. pSelForm = NULL;
  2060. if (!bSelected)
  2061. {
  2062. return;
  2063. }
  2064. if (sIfscId != "")
  2065. {
  2066. EdIfscId->Text = sIfscId;
  2067. }
  2068. UpdateObjectIfscId();
  2069. }
  2070. else
  2071. if (FSelObjType == eSelObjPark)
  2072. {
  2073. TVMSM540M *pSelForm = new TVMSM540M(this);
  2074. pSelForm->EdNmbr->Text = EdIfscId->Text.Trim();
  2075. pSelForm->ShowModal();
  2076. String sParkNmbr = pSelForm->EdNmbr->Text.Trim();
  2077. bool bSelected = pSelForm->m_bSelected;
  2078. delete pSelForm;
  2079. pSelForm = NULL;
  2080. if (!bSelected)
  2081. {
  2082. return;
  2083. }
  2084. if (sParkNmbr != "")
  2085. {
  2086. EdIfscId->Text = sParkNmbr;
  2087. }
  2088. UpdateObjectIfscId();
  2089. }
  2090. else
  2091. if (FSelObjType == eSelObjAtmp)
  2092. {
  2093. TVMSM550M *pSelForm = new TVMSM550M(this);
  2094. pSelForm->EdNmbr->Text = EdIfscId->Text.Trim();
  2095. pSelForm->ShowModal();
  2096. String sAtmpNmbr = pSelForm->EdNmbr->Text.Trim();
  2097. bool bSelected = pSelForm->m_bSelected;
  2098. delete pSelForm;
  2099. pSelForm = NULL;
  2100. if (!bSelected)
  2101. {
  2102. return;
  2103. }
  2104. if (sAtmpNmbr != "")
  2105. {
  2106. EdIfscId->Text = sAtmpNmbr;
  2107. }
  2108. UpdateObjectIfscId();
  2109. }
  2110. }
  2111. //---------------------------------------------------------------------------
  2112. void __fastcall TVMSM500M::BtnIfscEraseClick(TObject *Sender)
  2113. {
  2114. EdIfscId->Text = "";
  2115. UpdateObjectIfscId();
  2116. }
  2117. //---------------------------------------------------------------------------
  2118. void __fastcall TVMSM500M::UpdateObjectIfscId()
  2119. {
  2120. TVmsFormObject *pObj;
  2121. int nObjCnt = m_pEdtDesigner->GetObjectCount();
  2122. for (int ii = nObjCnt-1; ii >= 0; ii--)
  2123. {
  2124. pObj = m_pEdtDesigner->GetObject(ii);
  2125. if (pObj->Selected)
  2126. {
  2127. int nObjType = pObj->ObjType.ToIntDef(0);
  2128. if (nObjType == 91 || //@축통행시간(고정)
  2129. nObjType == 92 || //@축소통상황(고정)
  2130. nObjType == 101 || nObjType == 102 || nObjType == 103 || nObjType == 104 || //@주차장
  2131. (nObjType >= 401 && nObjType <= 413)
  2132. )
  2133. {
  2134. pObj->Tag = EdIfscId->Text.Trim();
  2135. }
  2136. }
  2137. }
  2138. }
  2139. //---------------------------------------------------------------------------
  2140. void __fastcall TVMSM500M::BtnCopyAddClick(TObject *Sender)
  2141. {
  2142. int nIdx = TvList->DataController->FocusedRecordIndex;
  2143. if (nIdx < 0) return;
  2144. #if 0
  2145. String sFormName = InputBox(lblText9->Caption,//"폼명칭",
  2146. lblText10->Caption,//"신규 폼명칭 입력하세요(60Byte).",
  2147. EdFormName->Text);//lblText9->Caption);//"폼명칭" );
  2148. sFormName = sFormName.Trim();
  2149. if (sFormName == lblText9->Caption//"폼명칭"
  2150. || sFormName == "")
  2151. #else
  2152. String sFormName = EdFormName->Text;
  2153. bool bInput = InputQuery(lblText9->Caption,//"폼명칭",
  2154. lblText10->Caption,//"신규 폼명칭 입력하세요(60Byte).",
  2155. sFormName);//lblText9->Caption);//"폼명칭" );
  2156. if (!bInput || sFormName == "")
  2157. #endif
  2158. {
  2159. return;
  2160. }
  2161. if (AnsiString(sFormName).Length() > 60)
  2162. {
  2163. Application->MessageBox(lblText11->Caption.c_str(),//L"폼명칭은 60Byte를 초과할 수 없습니다.",
  2164. FTitle.c_str(),
  2165. MB_OK|MB_ICONERROR|MB_APPLMODAL);
  2166. return;
  2167. }
  2168. String sFormId = EdFormId->Text;
  2169. if (sFormId.IsEmpty())
  2170. {
  2171. Application->MessageBox(lblText12->Caption.c_str(),//L"VMS 폼 복사 추가\r\n복사 추가할 VMS 폼을 목록에서 선택하세요.",
  2172. FTitle.c_str(),
  2173. MB_OK|MB_ICONERROR|MB_APPLMODAL);
  2174. return;
  2175. }
  2176. int nFormId;
  2177. if (!GetNextVmsFormId(nFormId))
  2178. {
  2179. Application->MessageBox(lblText1->Caption.c_str(),//L"새로운 VMS 폼정보를 생성하지 못하였습니다.\r\n프로그램 종료후에 다시 시도해 보세요.",
  2180. FTitle.c_str(),
  2181. MB_OK|MB_ICONERROR|MB_APPLMODAL);
  2182. return;
  2183. }
  2184. if (CopyFormAdd(sFormId, String(nFormId), sFormName))
  2185. {
  2186. Application->MessageBox(lblText13->Caption.c_str(),//L"VMS 폼 복사 추가\r\nVMS 폼 정보를 복사 추가 하였습니다.",
  2187. FTitle.c_str(),
  2188. MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  2189. FUpdate = true;
  2190. LoadVmsForm();
  2191. CMM_SetGridRow(CxList, TvList, String(nFormId), Col01->Index);
  2192. DisplayInfo();
  2193. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_14, 0);
  2194. CComm_VmsFormUpdate();
  2195. }
  2196. }
  2197. //---------------------------------------------------------------------------
  2198. bool __fastcall TVMSM500M::CopyFormAdd(String AOrgFormId, String ANewFormId, String AFormName)
  2199. {
  2200. bool bResult = false;
  2201. String sQry;
  2202. TADOQuery *pADO = NULL;
  2203. try
  2204. {
  2205. try
  2206. {
  2207. pADO = new TADOQuery(NULL);
  2208. pADO->Close();
  2209. pADO->Connection = ITSDb_GetConnection();
  2210. sQry = "INSERT INTO TB_VMS_FORM (VMS_FORM_ID, \r\n"
  2211. " VMS_TYPE_CD, \r\n"
  2212. " VMS_FORM_TYPE_CD, \r\n"
  2213. " VMS_FORM_COLR_CD, \r\n"
  2214. " VMS_FORM_NM, \r\n"
  2215. " VMS_FORM_EXPL, \r\n"
  2216. " VMS_FORM_DSPL_DRCT_CD, \r\n"
  2217. " VMS_FORM_DSPL_MTHD_CD, \r\n"
  2218. " SYMB_LIB_NMBR, \r\n"
  2219. " VMS_FORM_IMAG) \r\n"
  2220. "SELECT :p01, \r\n"
  2221. " VMS_TYPE_CD, \r\n"
  2222. " VMS_FORM_TYPE_CD, \r\n"
  2223. " VMS_FORM_COLR_CD, \r\n"
  2224. " :p02, \r\n"
  2225. " VMS_FORM_EXPL, \r\n"
  2226. " VMS_FORM_DSPL_DRCT_CD, \r\n"
  2227. " VMS_FORM_DSPL_MTHD_CD, \r\n"
  2228. " SYMB_LIB_NMBR, \r\n"
  2229. " VMS_FORM_IMAG \r\n"
  2230. " FROM TB_VMS_FORM \r\n"
  2231. " WHERE VMS_FORM_ID = :p03 \r\n";
  2232. ITSDb_GetConnection()->BeginTrans();
  2233. ITSDb_SQLText(pADO, sQry);
  2234. ITSDb_SQLBind(pADO, "p01", ANewFormId);
  2235. ITSDb_SQLBind(pADO, "p02", AFormName);
  2236. ITSDb_SQLBind(pADO, "p03", AOrgFormId);
  2237. pADO->ExecSQL();
  2238. sQry = "INSERT INTO TB_VMS_FORM_OBJECT ( \r\n"
  2239. " VMS_FORM_OBJECT_ID, \r\n"
  2240. " VMS_FORM_ID, \r\n"
  2241. " VMS_FORM_DSPL_ROW, \r\n"
  2242. " VMS_FORM_DSPL_CLMN, \r\n"
  2243. " VMS_FORM_OBJECT_TYPE_CD, \r\n"
  2244. " VMS_FONT_NAME_CD, \r\n"
  2245. " VMS_FONT_COLR_CD, \r\n"
  2246. " VMS_FONT_BOLD, \r\n"
  2247. " VMS_FONT_SIZE, \r\n"
  2248. " VMS_FONT_ALIGN, \r\n"
  2249. " VMS_DSPL_TXT, \r\n"
  2250. " VMS_DSPL_FIGR, \r\n"
  2251. " VMS_DSPL_XCRDN, \r\n"
  2252. " VMS_DSPL_YCRDN, \r\n"
  2253. " VMS_DSPL_WIDTH, \r\n"
  2254. " VMS_DSPL_HEIGHT, \r\n"
  2255. " VMS_DSPL_BLINKING, \r\n"
  2256. " VMS_DSPL_BKCOLOR, \r\n"
  2257. " VMS_DSPL_SIZE, \r\n"
  2258. " TRFC_FILL_CD, \r\n"
  2259. " SYMB_LIB_NMBR, \r\n"
  2260. " VMS_IFSC_ID \r\n"
  2261. " ) \r\n"
  2262. " SELECT \r\n"
  2263. " VMS_FORM_OBJECT_ID, \r\n"
  2264. " :p01, \r\n"
  2265. " VMS_FORM_DSPL_ROW, \r\n"
  2266. " VMS_FORM_DSPL_CLMN, \r\n"
  2267. " VMS_FORM_OBJECT_TYPE_CD, \r\n"
  2268. " VMS_FONT_NAME_CD, \r\n"
  2269. " VMS_FONT_COLR_CD, \r\n"
  2270. " VMS_FONT_BOLD, \r\n"
  2271. " VMS_FONT_SIZE, \r\n"
  2272. " VMS_FONT_ALIGN, \r\n"
  2273. " VMS_DSPL_TXT, \r\n"
  2274. " VMS_DSPL_FIGR, \r\n"
  2275. " VMS_DSPL_XCRDN, \r\n"
  2276. " VMS_DSPL_YCRDN, \r\n"
  2277. " VMS_DSPL_WIDTH, \r\n"
  2278. " VMS_DSPL_HEIGHT, \r\n"
  2279. " VMS_DSPL_BLINKING, \r\n"
  2280. " VMS_DSPL_BKCOLOR, \r\n"
  2281. " VMS_DSPL_SIZE, \r\n"
  2282. " TRFC_FILL_CD, \r\n"
  2283. " SYMB_LIB_NMBR, \r\n"
  2284. " VMS_IFSC_ID \r\n"
  2285. " FROM TB_VMS_FORM_OBJECT \r\n"
  2286. " WHERE VMS_FORM_ID = :p02 \r\n";
  2287. ITSDb_SQLText(pADO, sQry);
  2288. ITSDb_SQLBind(pADO, "p01", ANewFormId);
  2289. ITSDb_SQLBind(pADO, "p02", AOrgFormId);
  2290. pADO->ExecSQL();
  2291. ITSDb_GetConnection()->CommitTrans();
  2292. bResult = true;
  2293. }
  2294. catch(EDatabaseError &E)
  2295. {
  2296. ITSDb_GetConnection()->RollbackTrans();
  2297. DBERRORMSG("TVMSM500M::CopyFormAdd", String(E.ClassName()), E.Message, sQry);
  2298. throw Exception(String(E.ClassName()) + E.Message);
  2299. }
  2300. catch(Exception &e)
  2301. {
  2302. ITSDb_GetConnection()->RollbackTrans();
  2303. DBERRORMSG("TVMSM500M::CopyFormAdd", String(e.ClassName()), e.Message, sQry);
  2304. throw Exception(String(e.ClassName()) + e.Message);
  2305. }
  2306. }
  2307. __finally
  2308. {
  2309. if (pADO)
  2310. {
  2311. pADO->Close();
  2312. delete pADO;
  2313. }
  2314. }
  2315. return bResult;
  2316. }
  2317. //---------------------------------------------------------------------------
  2318. void __fastcall TVMSM500M::BtnUpClick(TObject *Sender)
  2319. {
  2320. try
  2321. {
  2322. TvObjList->BeginUpdate();
  2323. int nCurIdx = TvObjList->DataController->FocusedRowIndex;//FocusedRecordIndex;
  2324. if (nCurIdx <= 0)
  2325. {
  2326. return;
  2327. }
  2328. int nUpIdx = nCurIdx-1;
  2329. try
  2330. {
  2331. String sVal1 = VarToStr(TvObjList->DataController->Values[nCurIdx][ColSeq->Index]);
  2332. String sVal2 = VarToStr(TvObjList->DataController->Values[nCurIdx][ColId->Index]);
  2333. String sVal3 = VarToStr(TvObjList->DataController->Values[nCurIdx][ColType->Index]);
  2334. String sVal4 = VarToStr(TvObjList->DataController->Values[nCurIdx][ColData->Index]);
  2335. String sVal5 = VarToStr(TvObjList->DataController->Values[nCurIdx][ColIfscId->Index]);
  2336. int sVal6 = (TvObjList->DataController->Values[nCurIdx][ColMem->Index]);
  2337. TvObjList->DataController->Values[nCurIdx][ColSeq->Index] = TvObjList->DataController->Values[nUpIdx][ColSeq->Index];
  2338. TvObjList->DataController->Values[nCurIdx][ColId->Index] = TvObjList->DataController->Values[nUpIdx][ColId->Index];
  2339. TvObjList->DataController->Values[nCurIdx][ColType->Index] = TvObjList->DataController->Values[nUpIdx][ColType->Index];
  2340. TvObjList->DataController->Values[nCurIdx][ColData->Index] = TvObjList->DataController->Values[nUpIdx][ColData->Index];
  2341. TvObjList->DataController->Values[nCurIdx][ColIfscId->Index] = TvObjList->DataController->Values[nUpIdx][ColIfscId->Index];
  2342. TvObjList->DataController->Values[nCurIdx][ColMem->Index] = TvObjList->DataController->Values[nUpIdx][ColMem->Index];
  2343. TvObjList->DataController->Values[nUpIdx][ColSeq->Index] = sVal1;
  2344. TvObjList->DataController->Values[nUpIdx][ColId->Index] = sVal2;
  2345. TvObjList->DataController->Values[nUpIdx][ColType->Index] = sVal3;
  2346. TvObjList->DataController->Values[nUpIdx][ColData->Index] = sVal4;
  2347. TvObjList->DataController->Values[nUpIdx][ColIfscId->Index] = sVal5;
  2348. TvObjList->DataController->Values[nUpIdx][ColMem->Index] = sVal6;
  2349. TvObjList->Controller->ClearSelection();
  2350. TvObjList->Controller->FocusedRowIndex = nUpIdx;
  2351. //TvObjList->Controller->FocusedRecordIndex = nUpIdx;
  2352. TvObjList->ViewData->Records[nUpIdx]->Focused = true;
  2353. TvObjList->ViewData->Records[nUpIdx]->Selected = true;
  2354. CxObjList->SetFocus();
  2355. //TcxCustomGridRow* ARow = TvObjList->ViewData->Rows[TvObjList->DataController->FocusedRowIndex];
  2356. }
  2357. catch(...)
  2358. {
  2359. }
  2360. }
  2361. __finally
  2362. {
  2363. TvObjList->EndUpdate();
  2364. }
  2365. }
  2366. //---------------------------------------------------------------------------
  2367. void __fastcall TVMSM500M::BtnDownClick(TObject *Sender)
  2368. {
  2369. try
  2370. {
  2371. TvObjList->BeginUpdate();
  2372. int nCurIdx = TvObjList->DataController->FocusedRowIndex;//FocusedRecordIndex;
  2373. //int nCurIdx = TvObjList->DataController->FocusedRecordIndex;
  2374. if (nCurIdx < 0)
  2375. {
  2376. return;
  2377. }
  2378. if (nCurIdx == TvObjList->DataController->RecordCount-1)
  2379. {
  2380. return;
  2381. }
  2382. int nDnIdx = nCurIdx+1;
  2383. try
  2384. {
  2385. String sVal1 = VarToStr(TvObjList->DataController->Values[nCurIdx][ColSeq->Index]);
  2386. String sVal2 = VarToStr(TvObjList->DataController->Values[nCurIdx][ColId->Index]);
  2387. String sVal3 = VarToStr(TvObjList->DataController->Values[nCurIdx][ColType->Index]);
  2388. String sVal4 = VarToStr(TvObjList->DataController->Values[nCurIdx][ColData->Index]);
  2389. String sVal5 = VarToStr(TvObjList->DataController->Values[nCurIdx][ColIfscId->Index]);
  2390. int sVal6 = (TvObjList->DataController->Values[nCurIdx][ColMem->Index]);
  2391. TvObjList->DataController->Values[nCurIdx][ColSeq->Index] = TvObjList->DataController->Values[nDnIdx][ColSeq->Index];
  2392. TvObjList->DataController->Values[nCurIdx][ColId->Index] = TvObjList->DataController->Values[nDnIdx][ColId->Index];
  2393. TvObjList->DataController->Values[nCurIdx][ColType->Index] = TvObjList->DataController->Values[nDnIdx][ColType->Index];
  2394. TvObjList->DataController->Values[nCurIdx][ColData->Index] = TvObjList->DataController->Values[nDnIdx][ColData->Index];
  2395. TvObjList->DataController->Values[nCurIdx][ColIfscId->Index] = TvObjList->DataController->Values[nDnIdx][ColIfscId->Index];
  2396. TvObjList->DataController->Values[nCurIdx][ColMem->Index] = TvObjList->DataController->Values[nDnIdx][ColMem->Index];
  2397. TvObjList->DataController->Values[nDnIdx][ColSeq->Index] = sVal1;
  2398. TvObjList->DataController->Values[nDnIdx][ColId->Index] = sVal2;
  2399. TvObjList->DataController->Values[nDnIdx][ColType->Index] = sVal3;
  2400. TvObjList->DataController->Values[nDnIdx][ColData->Index] = sVal4;
  2401. TvObjList->DataController->Values[nDnIdx][ColIfscId->Index] = sVal5;
  2402. TvObjList->DataController->Values[nDnIdx][ColMem->Index] = sVal6;
  2403. TvObjList->Controller->ClearSelection();
  2404. TvObjList->Controller->FocusedRowIndex = nDnIdx;
  2405. //TvObjList->Controller->FocusedRecordIndex = nDnIdx;
  2406. TvObjList->ViewData->Records[nDnIdx]->Focused = true;
  2407. TvObjList->ViewData->Records[nDnIdx]->Selected = true;
  2408. CxObjList->SetFocus();
  2409. //TcxCustomGridRow* ARow = TvObjList->ViewData->Rows[TvObjList->DataController->FocusedRowIndex];
  2410. }
  2411. catch(...)
  2412. {
  2413. }
  2414. }
  2415. __finally
  2416. {
  2417. TvObjList->EndUpdate();
  2418. }
  2419. }
  2420. //---------------------------------------------------------------------------
  2421. void __fastcall TVMSM500M::BtnSaveClick(TObject *Sender)
  2422. {
  2423. if (EdFormId->Text.IsEmpty())
  2424. {
  2425. Application->MessageBox(lblText14->Caption.c_str(),//L"VMS 폼 저장\r\nVMS 폼 ID를 입력하세요.",
  2426. FTitle.c_str(),
  2427. MB_OK|MB_ICONERROR|MB_APPLMODAL);
  2428. return;
  2429. }
  2430. if (EdFormName->Text.Trim().IsEmpty())
  2431. {
  2432. Application->MessageBox(lblText15->Caption.c_str(),//L"VMS 폼 저장\r\nVMS 폼 이름을 입력하세요.",
  2433. FTitle.c_str(),
  2434. MB_OK|MB_ICONERROR|MB_APPLMODAL);
  2435. return;
  2436. }
  2437. int nObjType;
  2438. TVmsFormObject *pObj;
  2439. TcxGridDataController *pGDC = TvObjList->DataController;
  2440. int nObjCnt = pGDC->RecordCount;
  2441. String sFormId = EdFormId->Text;
  2442. //String sVmsType = FVmsTypeCd;
  2443. String sFormType = APP_GetCode(CbFormKind);
  2444. //String sFormColor = String(CbFormColor->ItemIndex);
  2445. //String sName = EdFormName->Text.Trim();
  2446. //String sExpl = EdFormDesc->Text.Trim();
  2447. //String sDispDir = APP_GetCode(CbFormDispDir);
  2448. //String sDispMode = APP_GetCode(CbFormDispMode);
  2449. String sVALID_YN = "Y";
  2450. if ( sFormType == String(eFormtp_figure)
  2451. || sFormType == String(eFormTp_atmp)
  2452. || sFormType == String(eFormTp_park)
  2453. )
  2454. {
  2455. for (int ii = 0; ii < nObjCnt; ii++)
  2456. {
  2457. String sObjSeq = VarToStr(pGDC->Values[ii][ColSeq->Index]);
  2458. pObj = m_pEdtDesigner->FindObject(sObjSeq.ToInt());
  2459. if (!pObj) continue;
  2460. String sObjId = pObj->Tag;
  2461. nObjType = pObj->ObjType.ToIntDef(0);
  2462. if (nObjType == 91 || nObjType == 92)
  2463. {
  2464. //@축통행시간(고정), @축소통상황(고정)
  2465. TVmsIfsc *pIfscObj = VmsIfscManager->FLists.Find(sObjId.ToIntDef(-1));
  2466. if (!pIfscObj)
  2467. {
  2468. sVALID_YN = "N";
  2469. break;
  2470. }
  2471. }
  2472. if (nObjType == 101 || nObjType == 102 || nObjType == 103 || nObjType == 104)
  2473. {
  2474. //@주차장명, @주차면수, @주차가능면수, @주차혼잡도
  2475. TCDSPark *pParkObj = CDSParkManager->FLists.Find(sObjId);
  2476. if (!pParkObj)
  2477. {
  2478. sVALID_YN = "N";
  2479. break;
  2480. }
  2481. }
  2482. if (pObj->ObjType.ToIntDef(0) >= 401 && pObj->ObjType.ToIntDef(0) <= 413)
  2483. {
  2484. //대기환경 관측소
  2485. TCDSAtmp *pAtmpObj = CDSAtmpManager->FLists.Find(sObjId);
  2486. if (pAtmpObj)
  2487. {
  2488. if (pAtmpObj->DEL_YN == "Y")
  2489. {
  2490. sVALID_YN = "N";
  2491. break;
  2492. }
  2493. }
  2494. else
  2495. {
  2496. sVALID_YN = "N";
  2497. break;
  2498. }
  2499. }
  2500. }
  2501. }
  2502. if (sVALID_YN != "Y")
  2503. {
  2504. String sMsg;
  2505. sMsg = " \r\n";
  2506. sMsg += "<<< VMS 폼 객체 중에 설정되지 않은 정보가 있습니다. >>>\r\n";
  2507. sMsg += " *** VMS 스케쥴 설정화면에 표출되지 않습니다.\r\n";
  2508. sMsg += " *** VMS 스케쥴 목록에 이미 등록되어 있는 경우 VMS 메시지가 표출되지 않습니다.\r\n";
  2509. sMsg += " VMS 폼 정보를 저장 하시겠습니까?";
  2510. sMsg += " \r\n";
  2511. if (Application->MessageBox(sMsg.c_str(), L"VMS 폼 유효성 확인", MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES) return;
  2512. }
  2513. bool bResult = false;
  2514. m_pEdtDesigner->GetVmsFormImage(ImgForm);
  2515. bResult = SaveVmsForm(sVALID_YN);
  2516. if (!bResult) return;
  2517. String sQry;
  2518. TADOQuery *pADO = NULL;
  2519. try
  2520. {
  2521. try
  2522. {
  2523. pADO = new TADOQuery(NULL);
  2524. pADO->Close();
  2525. pADO->Connection = ITSDb_GetConnection();
  2526. sQry = "DELETE TB_VMS_FORM_OBJECT \r\n"
  2527. " WHERE VMS_FORM_ID = :p01 \r\n";
  2528. ITSDb_SQLText(pADO, sQry);
  2529. ITSDb_SQLBind(pADO, "p01", sFormId);
  2530. pADO->ExecSQL();
  2531. sQry = "INSERT INTO TB_VMS_FORM_OBJECT ( \r\n"
  2532. " VMS_FORM_OBJECT_ID, \r\n" //N NUMBER(5) N FORM OBJECT ID
  2533. " VMS_FORM_ID, \r\n" //N NUMBER(5) N VMS FORM ID
  2534. " VMS_FORM_DSPL_ROW, \r\n" //N NUMBER(2) Y VMS FORM 표출 행
  2535. " VMS_FORM_DSPL_CLMN, \r\n" //N NUMBER(2) Y VMS FORM 표출 칼럼
  2536. " VMS_FORM_OBJECT_TYPE_CD, \r\n" //N NUMBER(3) N VMS FORM OBJECT 유형 코드
  2537. " VMS_FONT_NAME_CD, \r\n" //N NUMBER(3) N VMS 글꼴 유형 코드
  2538. " VMS_FONT_COLR_CD, \r\n" //N NUMBER(9) N VMS 글꼴 색상 코드
  2539. " VMS_FONT_BOLD, \r\n" //N NUMBER(3) Y VMS 글꼴 방식 코드
  2540. " VMS_FONT_SIZE, \r\n" //N NUMBER(3) Y 0 VMS 글꼴 크기
  2541. " VMS_FONT_ALIGN, \r\n" //N NUMBER(1) Y 0 VMS 표출 문자열정열방식(0:LEFT,1:RIGHT,2:CENTER)
  2542. " VMS_DSPL_TXT, \r\n" //N VARCHAR2(200) Y VMS 표출 텍스트
  2543. " VMS_DSPL_FIGR, \r\n" //N BLOB Y VMS 표출 도형
  2544. " VMS_DSPL_XCRDN, \r\n" //N NUMBER(5) Y VMS 표출 X좌표
  2545. " VMS_DSPL_YCRDN, \r\n" //N NUMBER(5) Y VMS 표출 Y좌표
  2546. " VMS_DSPL_WIDTH, \r\n" //N NUMBER(5) Y 0 VMS 표출 넓이
  2547. " VMS_DSPL_HEIGHT, \r\n" //N NUMBER(5) Y 0 VMS 표출 높이
  2548. " VMS_DSPL_BLINKING, \r\n" //N NUMBER(1) Y 0 VMS 표출 점멸 여부(0:지속, 1:점멸)
  2549. " VMS_DSPL_BKCOLOR, \r\n" //N NUMBER(1) Y 0 VMS 표출 배경색상코드
  2550. " VMS_DSPL_SIZE, \r\n" //N NUMBER(7) Y 0 VMS 표출 크기(문자:문자길이,이미지:이미지전체크기)
  2551. " TRFC_FILL_CD, \r\n" //N CHAR(1) Y 'N' FILL-IN 메시지 여부
  2552. " SYMB_LIB_NMBR, \r\n" //N NUMBER(4) N 0 심벌라이브러리 번호
  2553. " VMS_IFSC_ID \r\n" //N NUMBER(10) N 0 VMS 정보제공구간 ID
  2554. " ) \r\n"
  2555. " VALUES ( \r\n"
  2556. " :p01, \r\n" //N NUMBER(5) N FORM OBJECT ID
  2557. " :p02, \r\n" //N NUMBER(5) N VMS FORM ID
  2558. " 0, \r\n" //N NUMBER(2) Y VMS FORM 표출 행
  2559. " 0, \r\n" //N NUMBER(2) Y VMS FORM 표출 칼럼
  2560. " :p05, \r\n" //N NUMBER(3) N VMS FORM OBJECT 유형 코드
  2561. " :p06, \r\n" //N NUMBER(3) N VMS 글꼴 유형 코드
  2562. " :p07, \r\n" //N NUMBER(9) N VMS 글꼴 색상 코드
  2563. " :p08, \r\n" //N NUMBER(3) Y VMS 글꼴 방식 코드
  2564. " :p09, \r\n" //N NUMBER(3) Y 0 VMS 글꼴 크기
  2565. " :p10, \r\n" //N NUMBER(1) Y 0 VMS 표출 문자열정열방식(0:LEFT,1:RIGHT,2:CENTER)
  2566. " :p11, \r\n" //N VARCHAR2(200) Y VMS 표출 텍스트
  2567. " :p12, \r\n" //N BLOB Y VMS 표출 도형
  2568. " :p13, \r\n" //N NUMBER(5) Y VMS 표출 X좌표
  2569. " :p14, \r\n" //N NUMBER(5) Y VMS 표출 Y좌표
  2570. " :p15, \r\n" //N NUMBER(5) Y 0 VMS 표출 넓이
  2571. " :p16, \r\n" //N NUMBER(5) Y 0 VMS 표출 높이
  2572. " :p17, \r\n" //N NUMBER(1) Y 0 VMS 표출 점멸 여부(0:지속, 1:점멸)
  2573. " :p18, \r\n" //N NUMBER(1) Y 0 VMS 표출 배경색상코드
  2574. " :p19, \r\n" //N NUMBER(7) Y 0 VMS 표출 크기(문자:문자길이,이미지:이미지전체크기)
  2575. " :p23, \r\n" //N CHAR(1) Y 'N' FILL-IN 메시지 여부
  2576. " :p21, \r\n" //N NUMBER(4) N 0 심벌라이브러리 번호
  2577. " :p22 \r\n" //N NUMBER(10) N 0 VMS 정보제공구간 ID
  2578. " ) \r\n";
  2579. ITSDb_SQLText(pADO, sQry);
  2580. ITSDb_GetConnection()->BeginTrans();
  2581. for (int ii = 0; ii < nObjCnt; ii++)
  2582. {
  2583. String sObjSeq = VarToStr(pGDC->Values[ii][ColSeq->Index]);
  2584. pObj = m_pEdtDesigner->FindObject(sObjSeq.ToInt());
  2585. if (!pObj) continue;
  2586. //이력으로 조회하는곳에서 좌표를 0x02로 저장하는데 음수가 나오는 경우
  2587. //2자리로 처리가 되지 않기 때문에 여기서 막아준다.
  2588. if (pObj->Left < 0) pObj->Left = 0;
  2589. if (pObj->Top < 0) pObj->Top = 0;
  2590. nObjType = pObj->ObjType.ToIntDef(0);
  2591. ITSDb_SQLBind(pADO, "p01", String(ii+1));
  2592. ITSDb_SQLBind(pADO, "p02", sFormId);
  2593. //ITSDb_SQLBind(pADO, "p03", );
  2594. //ITSDb_SQLBind(pADO, "p04", );
  2595. ITSDb_SQLBind(pADO, "p05", pObj->ObjType);
  2596. ITSDb_SQLBind(pADO, "p06", pObj->FontNameCode);
  2597. ITSDb_SQLBind(pADO, "p07", pObj->FontColorCode);
  2598. if (pObj->FontBold)
  2599. ITSDb_SQLBind(pADO, "p08", "1");
  2600. else
  2601. ITSDb_SQLBind(pADO, "p08", "0");
  2602. ITSDb_SQLBind(pADO, "p09", String(pObj->FontSize));
  2603. ITSDb_SQLBind(pADO, "p10", String(pObj->TextAlign));
  2604. ITSDb_SQLBind(pADO, "p11", pObj->Text);
  2605. ITSDb_SQLBind(pADO, "p13", String(pObj->GetLeft()));
  2606. ITSDb_SQLBind(pADO, "p14", String(pObj->GetTop()));
  2607. ITSDb_SQLBind(pADO, "p15", String(pObj->GetWidth()));
  2608. ITSDb_SQLBind(pADO, "p16", String(pObj->GetHeight()));
  2609. if (pObj->Blink)
  2610. ITSDb_SQLBind(pADO, "p17", "1");
  2611. else
  2612. ITSDb_SQLBind(pADO, "p17", "0");
  2613. ITSDb_SQLBind(pADO, "p18", pObj->BkColorCode);
  2614. ITSDb_SQLBind(pADO, "p19", String(pObj->ObjSize));
  2615. //ITSDb_SQLBind(pADO, "p20", );
  2616. ITSDb_SQLBind(pADO, "p21", pObj->ImageId);
  2617. String sIfscId = "";
  2618. if (nObjType == 91 || nObjType == 92 ||
  2619. nObjType == 101 || nObjType == 102 || nObjType == 103 || nObjType == 104 ||
  2620. (nObjType >= 401 && nObjType <= 413)
  2621. )
  2622. {
  2623. sIfscId = pObj->Tag;
  2624. }
  2625. if (sIfscId.Trim() == "N")
  2626. {
  2627. sIfscId = "";
  2628. }
  2629. ITSDb_SQLBind(pADO, "p22", sIfscId);
  2630. String sFillIn = "N";
  2631. if (sFormType == "15")
  2632. {
  2633. if (nObjType == 0 || nObjType == 1 || nObjType == 2)
  2634. {
  2635. sFillIn = pObj->Tag;
  2636. }
  2637. }
  2638. ITSDb_SQLBind(pADO, "p23", sFillIn);
  2639. TMemoryStream *dataStream = NULL;
  2640. TImage *pImg = pObj->GetImage();
  2641. dataStream = new TMemoryStream();
  2642. if (!pImg)
  2643. {
  2644. ImgNull->Picture->Bitmap->SaveToStream(dataStream);
  2645. }
  2646. else
  2647. {
  2648. pImg->Picture->Bitmap->SaveToStream(dataStream);
  2649. }
  2650. pADO->Parameters->ParamByName("p12")->LoadFromStream(dataStream, ftBlob);
  2651. ITSDb_SQLExec(pADO);
  2652. if (dataStream) delete dataStream;
  2653. dataStream = NULL;
  2654. }
  2655. ITSDb_GetConnection()->CommitTrans();
  2656. bResult = true;
  2657. }
  2658. catch(EDatabaseError &E)
  2659. {
  2660. ITSDb_GetConnection()->RollbackTrans();
  2661. DBERRORMSG("TVMSM500M::BtnSaveClick", String(E.ClassName()), E.Message, sQry);
  2662. throw Exception(String(E.ClassName()) + E.Message);
  2663. }
  2664. catch(Exception &e)
  2665. {
  2666. ITSDb_GetConnection()->RollbackTrans();
  2667. DBERRORMSG("TVMSM500M::BtnSaveClick", String(e.ClassName()), e.Message, sQry);
  2668. throw Exception(String(e.ClassName()) + e.Message);
  2669. }
  2670. }
  2671. __finally
  2672. {
  2673. if (pADO)
  2674. {
  2675. pADO->Close();
  2676. delete pADO;
  2677. }
  2678. }
  2679. if (bResult)
  2680. {
  2681. Application->MessageBox(lblText16->Caption.c_str(),//L"VMS 폼 정보 저장\r\nVMS 폼 정보를 저장 하였습니다.",
  2682. FTitle.c_str(),
  2683. MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  2684. FUpdate = true;
  2685. LoadVmsForm();
  2686. CMM_SetGridRow(CxList, TvList, sFormId, Col01->Index);
  2687. DisplayInfo();
  2688. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_14, 0);
  2689. CComm_VmsFormUpdate();
  2690. }
  2691. //ReForm->Lines->Clear();
  2692. //ReFormTemp->Lines->Clear();
  2693. }
  2694. //---------------------------------------------------------------------------
  2695. void __fastcall TVMSM500M::Cb99PropertiesChange(TObject *Sender)
  2696. {
  2697. if (m_bEdit) return;
  2698. #if 1
  2699. String sFormType = APP_GetCode(CbFormKind);
  2700. if (sFormType == "15")
  2701. {
  2702. String sFillIn = APP_GetCode(Cb99);
  2703. if (sFillIn == "") sFillIn = "N";
  2704. TVmsFormObject *pObj = m_pEdtDesigner->FindObject(EdObjSeq->Text.ToIntDef(-1), false);
  2705. if (pObj)
  2706. {
  2707. int nObjType = pObj->ObjType.ToIntDef(-1);
  2708. if (nObjType == 0 || nObjType == 1 || nObjType == 2)
  2709. {
  2710. pObj->Tag = sFillIn;
  2711. }
  2712. }
  2713. }
  2714. #endif
  2715. }
  2716. //---------------------------------------------------------------------------
  2717. void __fastcall TVMSM500M::CheckImageSelected()
  2718. {
  2719. #ifdef IMAGE_RESIZE
  2720. bool selImage = false;
  2721. int nImgW = 0;
  2722. int nImgH = 0;
  2723. int nObjCnt = m_pEdtDesigner->GetObjectCount();
  2724. for(int ii = 0; ii < nObjCnt; ii++)
  2725. {
  2726. TVmsFormObject *pObj = m_pEdtDesigner->GetObject(ii);
  2727. if (!pObj) continue;
  2728. if (!pObj->Selected) continue;
  2729. #if 0
  2730. if (pObj->ObjType.ToIntDef(0) == 1 || pObj->ObjType.ToIntDef(0) == 2)
  2731. {
  2732. selImage = true;
  2733. nImgW = pObj->GetWidth();
  2734. nImgH = pObj->GetHeight();
  2735. }
  2736. else
  2737. {
  2738. selImage = false;
  2739. break;
  2740. }
  2741. #else
  2742. switch(pObj->ObjType.ToIntDef(0))
  2743. {
  2744. case 1: //심볼
  2745. case 2: //이미지
  2746. case 3: //소통정보배경이미지
  2747. case 17: //소통정보이미지1
  2748. case 27: //소통정보이미지2
  2749. case 37: //소통정보이미지3
  2750. case 47: //소통정보이미지4
  2751. case 167: //@우회소통정보이미지
  2752. case 200: //동영상이미지
  2753. case 300: //스트리밍영상이미지
  2754. case 406: //@통합대기등급 이미지
  2755. case 407: //@미세먼지등급 이미지
  2756. case 408: //@초미세먼지등급 이미지
  2757. case 413: //@오존등급이미지
  2758. selImage = true;
  2759. nImgW = pObj->GetWidth();
  2760. nImgH = pObj->GetHeight();
  2761. break;
  2762. default:
  2763. selImage = false;
  2764. break;
  2765. }
  2766. if (selImage == false)
  2767. {
  2768. break;
  2769. }
  2770. #endif
  2771. }
  2772. if (selImage)
  2773. {
  2774. TNotifyEvent evtW = SeImgW->Properties->OnChange;
  2775. TNotifyEvent evtH = SeImgH->Properties->OnChange;
  2776. SeImgW->Properties->OnChange = NULL;
  2777. SeImgH->Properties->OnChange = NULL;
  2778. SeImgW->Value = nImgW;
  2779. SeImgH->Value = nImgH;
  2780. SeImgW->Properties->OnChange = evtW;
  2781. SeImgH->Properties->OnChange = evtH;
  2782. PnlImage->Visible = true;
  2783. }
  2784. else
  2785. {
  2786. PnlImage->Visible = false;
  2787. }
  2788. #endif
  2789. }
  2790. //---------------------------------------------------------------------------
  2791. void __fastcall TVMSM500M::SeImgWHPropertiesChange(TObject *Sender)
  2792. {
  2793. if (m_bEdit) return;
  2794. if (((TcxSpinEdit*)Sender)->Value < ((TcxSpinEdit*)Sender)->Properties->MinValue)
  2795. ((TcxSpinEdit*)Sender)->Value = ((TcxSpinEdit*)Sender)->Properties->MinValue;
  2796. else if(((TcxSpinEdit*)Sender)->Value > ((TcxSpinEdit*)Sender)->Properties->MaxValue &&
  2797. ((TcxSpinEdit*)Sender)->Properties->MaxValue)
  2798. ((TcxSpinEdit*)Sender)->Value = ((TcxSpinEdit*)Sender)->Properties->MaxValue;
  2799. #ifdef IMAGE_RESIZE
  2800. int nImgW = SeImgW->Value;
  2801. int nImgH = SeImgH->Value;
  2802. int nObjCnt = m_pEdtDesigner->GetObjectCount();
  2803. for(int ii = 0; ii < nObjCnt; ii++)
  2804. {
  2805. TVmsFormObject *pObj = m_pEdtDesigner->GetObject(ii);
  2806. if (!pObj) continue;
  2807. if (!pObj->Selected) continue;
  2808. #if 0
  2809. if (pObj->ObjType.ToIntDef(0) == 1 || pObj->ObjType.ToIntDef(0) == 2)
  2810. {
  2811. pObj->GetImage()->AutoSize= false;
  2812. pObj->GetImage()->Stretch = true;
  2813. pObj->GetImage()->Width = nImgW;
  2814. pObj->GetImage()->Height = nImgH;
  2815. pObj->SetSize(nImgW, nImgH);
  2816. }
  2817. #else
  2818. switch(pObj->ObjType.ToIntDef(0))
  2819. {
  2820. case 1: //심볼
  2821. case 2: //이미지
  2822. case 3: //소통정보배경이미지
  2823. case 17: //소통정보이미지1
  2824. case 27: //소통정보이미지2
  2825. case 37: //소통정보이미지3
  2826. case 47: //소통정보이미지4
  2827. case 167: //@우회소통정보이미지
  2828. case 200: //동영상이미지
  2829. case 300: //스트리밍영상이미지
  2830. case 406: //@통합대기등급 이미지
  2831. case 407: //@미세먼지등급 이미지
  2832. case 408: //@초미세먼지등급 이미지
  2833. case 413: //@오존등급이미지
  2834. pObj->GetImage()->AutoSize= false;
  2835. pObj->GetImage()->Stretch = true;
  2836. pObj->GetImage()->Width = nImgW;
  2837. pObj->GetImage()->Height = nImgH;
  2838. pObj->SetSize(nImgW, nImgH);
  2839. break;
  2840. default:
  2841. break;
  2842. }
  2843. #endif
  2844. }
  2845. #endif
  2846. }
  2847. //---------------------------------------------------------------------------
  2848. void __fastcall TVMSM500M::BtnCopyAdd212Click(TObject *Sender)
  2849. {
  2850. int nIdx = TvList->DataController->FocusedRecordIndex;
  2851. if (nIdx < 0) return;
  2852. #if 0
  2853. String sFormName = InputBox(lblText9->Caption,//"폼명칭",
  2854. lblText10->Caption,//"신규 폼명칭 입력하세요(60Byte).",
  2855. EdFormName->Text);//lblText9->Caption);//"폼명칭" );
  2856. sFormName = sFormName.Trim();
  2857. if (sFormName == lblText9->Caption//"폼명칭"
  2858. || sFormName == "")
  2859. #else
  2860. String sFormName = EdFormName->Text;
  2861. bool bInput = InputQuery(lblText9->Caption,//"폼명칭",
  2862. lblText10->Caption,//"신규 폼명칭 입력하세요(60Byte).",
  2863. sFormName);//lblText9->Caption);//"폼명칭" );
  2864. if (!bInput || sFormName == "")
  2865. #endif
  2866. {
  2867. return;
  2868. }
  2869. if (AnsiString(sFormName).Length() > 60)
  2870. {
  2871. Application->MessageBox(lblText11->Caption.c_str(),//L"폼명칭은 60Byte를 초과할 수 없습니다.",
  2872. FTitle.c_str(),
  2873. MB_OK|MB_ICONERROR|MB_APPLMODAL);
  2874. return;
  2875. }
  2876. String sFormId = EdFormId->Text;
  2877. if (sFormId.IsEmpty())
  2878. {
  2879. Application->MessageBox(lblText12->Caption.c_str(),//L"VMS 폼 복사 추가\r\n복사 추가할 VMS 폼을 목록에서 선택하세요.",
  2880. FTitle.c_str(),
  2881. MB_OK|MB_ICONERROR|MB_APPLMODAL);
  2882. return;
  2883. }
  2884. int nFormId;
  2885. if (!GetNextVmsFormId(nFormId))
  2886. {
  2887. Application->MessageBox(lblText1->Caption.c_str(),//L"새로운 VMS 폼정보를 생성하지 못하였습니다.\r\n프로그램 종료후에 다시 시도해 보세요.",
  2888. FTitle.c_str(),
  2889. MB_OK|MB_ICONERROR|MB_APPLMODAL);
  2890. return;
  2891. }
  2892. if (CopyFormAdd212(sFormId, String(nFormId), sFormName))
  2893. {
  2894. Application->MessageBox(lblText13->Caption.c_str(),//L"VMS 폼 복사 추가\r\nVMS 폼 정보를 복사 추가 하였습니다.",
  2895. FTitle.c_str(),
  2896. MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  2897. FUpdate = true;
  2898. LoadVmsForm();
  2899. CMM_SetGridRow(CxList, TvList, String(nFormId), Col01->Index);
  2900. DisplayInfo();
  2901. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_14, 0);
  2902. CComm_VmsFormUpdate();
  2903. }
  2904. }
  2905. //---------------------------------------------------------------------------
  2906. bool __fastcall TVMSM500M::CopyFormAdd212(String AOrgFormId, String ANewFormId, String AFormName)
  2907. {
  2908. bool bResult = false;
  2909. String sQry;
  2910. TADOQuery *pADO = NULL;
  2911. //2*10 ==> 2*12(작은거->큰거로)
  2912. try
  2913. {
  2914. try
  2915. {
  2916. pADO = new TADOQuery(NULL);
  2917. pADO->Close();
  2918. pADO->Connection = ITSDb_GetConnection();
  2919. sQry = "INSERT INTO TB_VMS_FORM (VMS_FORM_ID, \r\n"
  2920. " VMS_TYPE_CD, \r\n"
  2921. " VMS_FORM_TYPE_CD, \r\n"
  2922. " VMS_FORM_COLR_CD, \r\n"
  2923. " VMS_FORM_NM, \r\n"
  2924. " VMS_FORM_EXPL, \r\n"
  2925. " VMS_FORM_DSPL_DRCT_CD, \r\n"
  2926. " VMS_FORM_DSPL_MTHD_CD, \r\n"
  2927. " SYMB_LIB_NMBR, \r\n"
  2928. " VMS_FORM_IMAG) \r\n"
  2929. "SELECT :p01, \r\n"
  2930. " 'VMP2', \r\n"
  2931. " VMS_FORM_TYPE_CD, \r\n"
  2932. " VMS_FORM_COLR_CD, \r\n"
  2933. " :p02, \r\n"
  2934. " VMS_FORM_EXPL, \r\n"
  2935. " VMS_FORM_DSPL_DRCT_CD, \r\n"
  2936. " VMS_FORM_DSPL_MTHD_CD, \r\n"
  2937. " SYMB_LIB_NMBR, \r\n"
  2938. " VMS_FORM_IMAG \r\n"
  2939. " FROM TB_VMS_FORM \r\n"
  2940. " WHERE VMS_FORM_ID = :p03 \r\n";
  2941. ITSDb_GetConnection()->BeginTrans();
  2942. ITSDb_SQLText(pADO, sQry);
  2943. ITSDb_SQLBind(pADO, "p01", ANewFormId);
  2944. ITSDb_SQLBind(pADO, "p02", AFormName);
  2945. ITSDb_SQLBind(pADO, "p03", AOrgFormId);
  2946. pADO->ExecSQL();
  2947. sQry = "INSERT INTO TB_VMS_FORM_OBJECT ( \r\n"
  2948. " VMS_FORM_OBJECT_ID, \r\n"
  2949. " VMS_FORM_ID, \r\n"
  2950. " VMS_FORM_DSPL_ROW, \r\n"
  2951. " VMS_FORM_DSPL_CLMN, \r\n"
  2952. " VMS_FORM_OBJECT_TYPE_CD, \r\n"
  2953. " VMS_FONT_NAME_CD, \r\n"
  2954. " VMS_FONT_COLR_CD, \r\n"
  2955. " VMS_FONT_BOLD, \r\n"
  2956. " VMS_FONT_SIZE, \r\n"
  2957. " VMS_FONT_ALIGN, \r\n"
  2958. " VMS_DSPL_TXT, \r\n"
  2959. " VMS_DSPL_FIGR, \r\n"
  2960. " VMS_DSPL_XCRDN, \r\n"
  2961. " VMS_DSPL_YCRDN, \r\n"
  2962. " VMS_DSPL_WIDTH, \r\n"
  2963. " VMS_DSPL_HEIGHT, \r\n"
  2964. " VMS_DSPL_BLINKING, \r\n"
  2965. " VMS_DSPL_BKCOLOR, \r\n"
  2966. " VMS_DSPL_SIZE, \r\n"
  2967. " TRFC_FILL_CD, \r\n"
  2968. " SYMB_LIB_NMBR, \r\n"
  2969. " VMS_IFSC_ID \r\n"
  2970. " ) \r\n"
  2971. " SELECT \r\n"
  2972. " VMS_FORM_OBJECT_ID, \r\n"
  2973. " :p01, \r\n"
  2974. " VMS_FORM_DSPL_ROW, \r\n"
  2975. " VMS_FORM_DSPL_CLMN, \r\n"
  2976. " VMS_FORM_OBJECT_TYPE_CD, \r\n"
  2977. " VMS_FONT_NAME_CD, \r\n"
  2978. " VMS_FONT_COLR_CD, \r\n"
  2979. " VMS_FONT_BOLD, \r\n"
  2980. " VMS_FONT_SIZE, \r\n"
  2981. " VMS_FONT_ALIGN, \r\n"
  2982. " VMS_DSPL_TXT, \r\n"
  2983. " VMS_DSPL_FIGR, \r\n"
  2984. " 32+VMS_DSPL_XCRDN, \r\n" //32픽셀 2개차이니까 32픽셀만큼 1개만큼 가로위치 이동
  2985. " VMS_DSPL_YCRDN, \r\n"
  2986. " VMS_DSPL_WIDTH, \r\n"
  2987. " VMS_DSPL_HEIGHT, \r\n"
  2988. " VMS_DSPL_BLINKING, \r\n"
  2989. " VMS_DSPL_BKCOLOR, \r\n"
  2990. " VMS_DSPL_SIZE, \r\n"
  2991. " TRFC_FILL_CD, \r\n"
  2992. " SYMB_LIB_NMBR, \r\n"
  2993. " VMS_IFSC_ID \r\n"
  2994. " FROM TB_VMS_FORM_OBJECT \r\n"
  2995. " WHERE VMS_FORM_ID = :p02 \r\n";
  2996. ITSDb_SQLText(pADO, sQry);
  2997. ITSDb_SQLBind(pADO, "p01", ANewFormId);
  2998. ITSDb_SQLBind(pADO, "p02", AOrgFormId);
  2999. pADO->ExecSQL();
  3000. ITSDb_GetConnection()->CommitTrans();
  3001. bResult = true;
  3002. }
  3003. catch(EDatabaseError &E)
  3004. {
  3005. ITSDb_GetConnection()->RollbackTrans();
  3006. DBERRORMSG("TVMSM500M::CopyFormAdd212", String(E.ClassName()), E.Message, sQry);
  3007. throw Exception(String(E.ClassName()) + E.Message);
  3008. }
  3009. catch(Exception &e)
  3010. {
  3011. ITSDb_GetConnection()->RollbackTrans();
  3012. DBERRORMSG("TVMSM500M::CopyFormAdd212", String(e.ClassName()), e.Message, sQry);
  3013. throw Exception(String(e.ClassName()) + e.Message);
  3014. }
  3015. }
  3016. __finally
  3017. {
  3018. if (pADO)
  3019. {
  3020. pADO->Close();
  3021. delete pADO;
  3022. }
  3023. }
  3024. return bResult;
  3025. }
  3026. void __fastcall TVMSM500M::PgEditClick(TObject *Sender)
  3027. {
  3028. try
  3029. {
  3030. if (PgEdit->Properties->ActivePage == TsDirect)
  3031. {
  3032. if (ReForm->Enabled) ReForm->SetFocus();
  3033. }
  3034. }
  3035. catch(Exception &e)
  3036. {
  3037. }
  3038. }
  3039. //---------------------------------------------------------------------------
  3040. void __fastcall TVMSM500M::BtrnReFormClearClick(TObject *Sender)
  3041. {
  3042. ReForm->Lines->Clear();
  3043. }
  3044. //---------------------------------------------------------------------------
  3045. void __fastcall TVMSM500M::BtnRedClick(TObject *Sender)
  3046. {
  3047. TcxButton *pClrBtn = (TcxButton*)Sender;
  3048. switch(pClrBtn->Tag)
  3049. {
  3050. case 0 : ReForm->SelAttributes->Color = clLime; break;
  3051. case 1 : ReForm->SelAttributes->Color = clYellow; break;
  3052. case 2 : ReForm->SelAttributes->Color = clRed; break;
  3053. }
  3054. }
  3055. //---------------------------------------------------------------------------
  3056. void __fastcall TVMSM500M::BtnObjLimeClick(TObject *Sender)
  3057. {
  3058. if (m_bEdit) return;
  3059. //if (m_pEdtDesigner->GetSelectedObjectCount() < 1) return;
  3060. TcxButton *pClrBtn = (TcxButton*)Sender;
  3061. m_pEdtDesigner->SetObejctFontColorCode(String(pClrBtn->Tag));
  3062. }
  3063. //---------------------------------------------------------------------------