VMSM410MF.cpp 44 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #include "ITSSkinF.h"
  4. #include "ITSUtilF.h"
  5. #include "AppGlobalF.h"
  6. #include "ITSLangTransF.h"
  7. #pragma hdrstop
  8. #include "VMSM410MF.h"
  9. //---------------------------------------------------------------------------
  10. #pragma package(smart_init)
  11. #pragma link "cxButtons"
  12. #pragma link "cxCalendar"
  13. #pragma link "cxContainer"
  14. #pragma link "cxControls"
  15. #pragma link "cxDropDownEdit"
  16. #pragma link "cxEdit"
  17. #pragma link "cxGraphics"
  18. #pragma link "cxGroupBox"
  19. #pragma link "cxLabel"
  20. #pragma link "cxLookAndFeelPainters"
  21. #pragma link "cxLookAndFeels"
  22. #pragma link "cxMaskEdit"
  23. #pragma link "cxPC"
  24. #pragma link "cxPCdxBarPopupMenu"
  25. #pragma link "cxSpinEdit"
  26. #pragma link "cxSplitter"
  27. #pragma link "cxTextEdit"
  28. #pragma link "cxTimeEdit"
  29. #pragma link "dxSkinBlack"
  30. #pragma link "dxSkinBlue"
  31. #pragma link "dxSkinCaramel"
  32. #pragma link "dxSkinCoffee"
  33. #pragma link "dxSkinDarkRoom"
  34. #pragma link "dxSkinDarkSide"
  35. #pragma link "dxSkinFoggy"
  36. #pragma link "dxSkinGlassOceans"
  37. #pragma link "dxSkiniMaginary"
  38. #pragma link "dxSkinLilian"
  39. #pragma link "dxSkinLiquidSky"
  40. #pragma link "dxSkinLondonLiquidSky"
  41. #pragma link "dxSkinMcSkin"
  42. #pragma link "dxSkinMoneyTwins"
  43. #pragma link "dxSkinOffice2007Black"
  44. #pragma link "dxSkinOffice2007Blue"
  45. #pragma link "dxSkinOffice2007Green"
  46. #pragma link "dxSkinOffice2007Pink"
  47. #pragma link "dxSkinOffice2007Silver"
  48. #pragma link "dxSkinOffice2010Black"
  49. #pragma link "dxSkinOffice2010Blue"
  50. #pragma link "dxSkinOffice2010Silver"
  51. #pragma link "dxSkinsCore"
  52. #pragma link "dxSkinscxPCPainter"
  53. #pragma link "dxSkinSeven"
  54. #pragma link "dxSkinSharp"
  55. #pragma link "dxSkinSilver"
  56. #pragma link "dxSkinStardust"
  57. #pragma link "cxRadioGroup"
  58. #pragma link "cxClasses"
  59. #pragma link "cxCustomData"
  60. #pragma link "cxData"
  61. #pragma link "cxDataStorage"
  62. #pragma link "cxDBData"
  63. #pragma link "cxFilter"
  64. #pragma link "cxGrid"
  65. #pragma link "cxGridCustomTableView"
  66. #pragma link "cxGridCustomView"
  67. #pragma link "cxGridDBTableView"
  68. #pragma link "cxGridLevel"
  69. #pragma link "cxGridTableView"
  70. #pragma link "cxStyles"
  71. #pragma link "cxCheckBox"
  72. #pragma link "cxImage"
  73. #pragma link "cxButtonEdit"
  74. #pragma link "cxBlobEdit"
  75. #pragma resource "*.dfm"
  76. TVMSM410M *VMSM410M = NULL;
  77. //---------------------------------------------------------------------------
  78. __fastcall TVMSM410M::TVMSM410M(TComponent* Owner)
  79. : TForm(Owner)
  80. {
  81. LangTrans->Translate(this, ITSDb_GetConnection());
  82. ITSSkin_Load(this);
  83. CMM_LoadForm(g_sFormsDir, this);
  84. FUpdate= false;
  85. FTitle = Caption;//"VMS 소통정보 배경이미지관리";
  86. FListSymb = new TList;
  87. EditMode = false;
  88. TvList->OptionsView->DataRowHeight = 0;
  89. TvList->OptionsView->CellAutoHeight = true;
  90. TvList->OptionsView->Indicator = false;
  91. TvList->OptionsCustomize->ColumnMoving = false;
  92. TvList->OptionsCustomize->ColumnSorting = false;
  93. TvList->Columns[0]->Width = 60;
  94. TvList->Columns[0]->Options->HorzSizing = false;
  95. //http://docwiki.embarcadero.com/RADStudio/Rio/en/Colors_in_the_VCL
  96. m_Color[ 0] =clWebDarkOrange;
  97. m_Color[ 1] =clWebRed;
  98. m_Color[ 2] =clWebDarkRed;
  99. m_Color[ 3] =clWebMaroon;
  100. m_Color[ 4] =clWebIndianRed;
  101. m_Color[ 5] =clWebSalmon;
  102. m_Color[ 6] =clWebCoral;
  103. m_Color[ 7] =clWebGold;
  104. m_Color[ 8] =clWebTomato;
  105. m_Color[ 9] =clWebCrimson;
  106. m_Color[10] =clWebBrown;
  107. m_Color[11] =clWebChocolate;
  108. m_Color[12] =clWebSandyBrown;
  109. m_Color[13] =clWebLightSalmon;
  110. m_Color[14] =clWebLightCoral;
  111. m_Color[15] =clWebOrange;
  112. m_Color[16] =clWebOrangeRed;
  113. m_Color[18] =clWebFirebrick;
  114. m_Color[19] =clWebSaddleBrown;
  115. m_Color[20] =clWebSienna;
  116. m_Color[21] =clWebPeru;
  117. m_Color[22] =clWebDarkSalmon;
  118. m_Color[23] =clWebRosyBrown;
  119. }
  120. //---------------------------------------------------------------------------
  121. TColor TVMSM410M::GetDisplayColor(int ASeq)
  122. {
  123. return g_DispColor[ASeq % MAX_DISPCOLOR];
  124. //return m_Color[ASeq % MAX_VMS_COLOR];
  125. }
  126. //---------------------------------------------------------------------------
  127. void __fastcall TVMSM410M::CommClose()
  128. {
  129. try
  130. {
  131. ClearSymbloList();
  132. SAFE_DELETE(FListSymb);
  133. CMM_SaveForm(g_sFormsDir, this);
  134. }
  135. catch(...)
  136. {
  137. }
  138. }
  139. //---------------------------------------------------------------------------
  140. void __fastcall TVMSM410M::FormShow(TObject *Sender)
  141. {
  142. lblImgSize->Caption = "";
  143. Refresh();
  144. FormInit();
  145. ChangeEditMode(1);
  146. TmrShow->Enabled = true;
  147. }
  148. //---------------------------------------------------------------------------
  149. void __fastcall TVMSM410M::FormInit()
  150. {
  151. EdNmbr->Text = "";
  152. EdExpl->Text = "";
  153. EdImageFileName->Text = "";
  154. lblImgSize->Caption = "";
  155. ImgPreView->Picture->Bitmap->FreeImage();
  156. ImgPreView->Picture->Bitmap = NULL;
  157. ImgTemp->Picture->Bitmap->FreeImage();
  158. ImgTemp->Picture->Bitmap = NULL;
  159. SePosX->Value = 0;
  160. SePosY->Value = 0;
  161. SeCellId->Value = 1;
  162. CMM_ClearGridTableView(TvImageCell);
  163. FNewDb = false;
  164. }
  165. //---------------------------------------------------------------------------
  166. void __fastcall TVMSM410M::TmrShowTimer(TObject *Sender)
  167. {
  168. TmrShow->Enabled = false;
  169. LoadVmsIfsc();
  170. LoadImageSymbol();
  171. }
  172. //---------------------------------------------------------------------------
  173. void __fastcall TVMSM410M::BtnCloseClick(TObject *Sender)
  174. {
  175. Close();
  176. }
  177. //---------------------------------------------------------------------------
  178. void __fastcall TVMSM410M::FormClose(TObject *Sender, TCloseAction &Action)
  179. {
  180. CommClose();
  181. VMSM410M = NULL;
  182. Action = caFree;
  183. }
  184. //---------------------------------------------------------------------------
  185. void __fastcall TVMSM410M::FormCloseQuery(TObject *Sender, bool &CanClose)
  186. {
  187. if (FUpdate)
  188. {
  189. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_14, 0);
  190. }
  191. }
  192. //---------------------------------------------------------------------------
  193. void __fastcall TVMSM410M::DisplayInfo()
  194. {
  195. FormInit();
  196. int nRow = TvList->DataController->FocusedRecordIndex;
  197. if( nRow <= -1 )
  198. return;
  199. TcxGridDataController *pDc = TvList->DataController;
  200. nRow = pDc->FocusedRecordIndex;
  201. if (nRow < FListSymb->Count)
  202. {
  203. Graphics::TBitmap *bitmap = (Graphics::TBitmap*)FListSymb->Items[nRow];
  204. ImgPreView->Picture->Bitmap->Assign(bitmap);
  205. ImgTemp->Picture->Bitmap->Assign(bitmap);
  206. FOldWidth = bitmap->Width;
  207. FOldHeight = bitmap->Height;
  208. lblImgSize->Caption = String(bitmap->Width) + " * " + String(bitmap->Height);
  209. }
  210. EdNmbr->Text = VarToStr(pDc->Values[nRow][ColLink1->Index]);
  211. EdExpl->Text = VarToStr(pDc->Values[nRow][ColLink3->Index]);
  212. EdVmsCd->Text = VarToStr(pDc->Values[nRow][ColLink4->Index]);
  213. //셀정보 업데이트
  214. LoadImageSymbolCell(EdNmbr->Text);
  215. UpdateCellColor();
  216. ChangeEditMode(3);
  217. }
  218. //---------------------------------------------------------------------------
  219. void __fastcall TVMSM410M::BtnEditClick(TObject *Sender)
  220. {
  221. if (BtnEdit->Caption == FrmLang->lblEdit->Caption)//"편집")
  222. {
  223. ChangeEditMode(0);
  224. FNewDb = false;
  225. }
  226. else
  227. {
  228. String sId = EdNmbr->Text;
  229. ChangeEditMode(1);
  230. if (CMM_FindGridData(TvList->DataController, sId, ColLink1->Index) >= 0)
  231. {
  232. CMM_SetGridRow(CxList, TvList, sId, ColLink1->Index);
  233. DisplayInfo();
  234. }
  235. }
  236. }
  237. //---------------------------------------------------------------------------
  238. void __fastcall TVMSM410M::ChangeEditMode(int AEdit)
  239. {
  240. //LblWarn->Visible = false;
  241. FImageUpdate = false;
  242. bool bEnabled = false;
  243. switch(AEdit)
  244. {
  245. case 0: //편집버튼클릭
  246. {
  247. BtnEdit->Enabled = true;
  248. BtnInsert->Enabled = false;
  249. BtnDelete->Enabled = false;
  250. BtnSave->Enabled = true;
  251. BtnEdit->Caption = FrmLang->lblCancel->Caption;//"취소";
  252. BtnEdit->Hint = FrmLang->lblCancel->Hint;//데이터 편집 취소";
  253. EditMode = true;
  254. //EdImageFileName->Enabled = false;
  255. EdImageFileName->Enabled = true;
  256. //LblWarn->Visible = true;
  257. }
  258. break;
  259. case 1: //편집[취소]버튼클릭
  260. {
  261. FormInit(); //화면을 모두 지운다.
  262. BtnEdit->Enabled = false;
  263. BtnInsert->Enabled = true;
  264. BtnDelete->Enabled = false;
  265. BtnSave->Enabled = false;
  266. BtnEdit->Caption = FrmLang->lblEdit->Caption;//"편집";
  267. BtnEdit->Hint = FrmLang->lblEdit->Hint;//데이터 편집";
  268. //bEnabled = true;
  269. EditMode = false;
  270. EdImageFileName->Enabled = false;
  271. }
  272. break;
  273. case 2: //추가
  274. {
  275. BtnEdit->Enabled = true;
  276. BtnInsert->Enabled = false;
  277. BtnDelete->Enabled = false;
  278. BtnSave->Enabled = true;
  279. BtnEdit->Caption = FrmLang->lblCancel->Caption;//"취소";
  280. BtnEdit->Hint = FrmLang->lblCancel->Hint;//데이터 편집 취소";
  281. EditMode = true;
  282. EdImageFileName->Enabled = true;
  283. }
  284. break;
  285. case 3: //수정모드
  286. {
  287. BtnEdit->Enabled = true;
  288. BtnInsert->Enabled = true;
  289. BtnDelete->Enabled = true;
  290. BtnSave->Enabled = false;
  291. BtnEdit->Caption = FrmLang->lblEdit->Caption;//"편집";
  292. BtnEdit->Hint = FrmLang->lblEdit->Hint;//데이터 편집";
  293. bEnabled = true;
  294. EditMode = false;
  295. //EdImageFileName->Enabled = false;
  296. EdImageFileName->Enabled = true;
  297. }
  298. break;
  299. }
  300. BtnSaveImgFile->Enabled = false;
  301. if (ImgPreView->Picture->Bitmap != NULL)
  302. {
  303. if (ImgPreView->Picture->Bitmap->Height != 0)
  304. {
  305. BtnSaveImgFile->Enabled = true;
  306. }
  307. }
  308. if (AEdit == 0 || AEdit == 2)
  309. {
  310. PnlCmd->Enabled = true;
  311. GrpList->Enabled = false;
  312. }
  313. else
  314. {
  315. PnlCmd->Enabled = false;
  316. GrpList->Enabled = true;
  317. }
  318. //PnlEdit->Enabled = EditMode;
  319. }
  320. //---------------------------------------------------------------------------
  321. bool __fastcall TVMSM410M::UpdateVmsImage(String ANmbr, String AExpl)
  322. {
  323. String sQry;
  324. TADOQuery *pADO = NULL;
  325. //if (!FrmLang->UpdateVmsImage(ANmbr, AExpl, ImgTemp))
  326. //{
  327. // return false;
  328. //}
  329. sQry = "UPDATE TB_VMS_SYMB_LIB \r\n"
  330. " SET RGST_DT = TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS'), \r\n"
  331. " SYMB_EXPL = :p02, \r\n"
  332. " IMAG_DATA = :p03, \r\n"
  333. " UPDT_DT = TO_CHAR(sysdate, 'YYYYMMDDHH24MISS') \r\n"
  334. " WHERE SYMB_LIB_NMBR = :p01 \r\n";
  335. TMemoryStream *dataStream = new TMemoryStream();
  336. //ImgPreView->Picture->Bitmap->SaveToStream(dataStream);
  337. ImgTemp->Picture->Bitmap->SaveToStream(dataStream);
  338. try
  339. {
  340. try
  341. {
  342. pADO = new TADOQuery(NULL);
  343. pADO->Close();
  344. pADO->Connection = ITSDb_GetConnection();
  345. ITSDb_SQLText(pADO, sQry);
  346. ITSDb_SQLBind(pADO, "p01", ANmbr);
  347. ITSDb_SQLBind(pADO, "p02", AExpl);
  348. pADO->Parameters->ParamByName("p03")->LoadFromStream(dataStream, ftBlob);
  349. pADO->ExecSQL();
  350. if (FImageUpdate)
  351. {
  352. sQry = "UPDATE TB_VMS_FORM_OBJECT \r\n"
  353. " SET VMS_DSPL_FIGR = :p03 \r\n"
  354. " WHERE SYMB_LIB_NMBR = :p01 \r\n";
  355. ITSDb_SQLText(pADO, sQry);
  356. ITSDb_SQLBind(pADO, "p01", ANmbr);
  357. pADO->Parameters->ParamByName("p03")->LoadFromStream(dataStream, ftBlob);
  358. pADO->ExecSQL();
  359. //통신서버가 항상 폼정보를 내려보내도록 업데이트시각을 업데이트한다.(소통정보폼은 항상 내려보내기 때문에 업데이트 하지 않아도 됌)
  360. sQry = "UPDATE TB_VMS_FORM \r\n"
  361. " SET UPDT_DT = TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS') \r\n"
  362. " WHERE VMS_FORM_ID IN (SELECT VMS_FORM_ID \r\n"
  363. " FROM TB_VMS_FORM_OBJECT \r\n"
  364. " WHERE SYMB_LIB_NMBR = :p01 \r\n"
  365. " GROUP BY VMS_FORM_ID) \r\n";
  366. ITSDb_SQLText(pADO, sQry);
  367. ITSDb_SQLBind(pADO, "p01", ANmbr);
  368. pADO->ExecSQL();
  369. //폼이미지를 새로생성
  370. FrmLang->UpdateVmsFormImage(ANmbr, FOldWidth, FOldHeight, FNewWidth, FNewHeight);
  371. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_14, 0);
  372. CComm_VmsFormUpdate();
  373. }
  374. return true;
  375. }
  376. catch(EDatabaseError &E)
  377. {
  378. DBERRORMSG("VMS image update", String(E.ClassName()), E.Message, sQry);
  379. throw Exception(String(E.ClassName()) + E.Message);
  380. }
  381. catch(Exception &e)
  382. {
  383. DBERRORMSG("VMS image update", String(e.ClassName()), e.Message, sQry);
  384. throw Exception(String(e.ClassName()) + e.Message);
  385. }
  386. }
  387. __finally
  388. {
  389. if (pADO)
  390. {
  391. pADO->Close();
  392. delete pADO;
  393. }
  394. if (dataStream) delete dataStream;
  395. dataStream = NULL;
  396. }
  397. return true;
  398. }
  399. //---------------------------------------------------------------------------
  400. bool __fastcall TVMSM410M::InsertVmsImage(String ANmbr, String AExpl, String AFileName, String ATypeCd)
  401. {
  402. String sQry;
  403. TADOQuery *pADO = NULL;
  404. 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"
  405. " VALUES(:p01, :p02, :p03, :p04, NULL, :p05, NULL, :p06, :p07, 'N' ) \r\n";
  406. TMemoryStream *dataStream = new TMemoryStream();
  407. //ImgPreView->Picture->Bitmap->SaveToStream(dataStream);
  408. ImgTemp->Picture->Bitmap->SaveToStream(dataStream);
  409. try
  410. {
  411. try
  412. {
  413. pADO = new TADOQuery(NULL);
  414. pADO->Close();
  415. pADO->Connection = ITSDb_GetConnection();
  416. ITSDb_SQLText(pADO, sQry);
  417. ITSDb_SQLBind(pADO, "p01", ANmbr);
  418. ITSDb_SQLBind(pADO, "p02", Now().FormatString("yyyymmddhhnnss"));
  419. ITSDb_SQLBind(pADO, "p03", AExpl);
  420. pADO->Parameters->ParamByName("p04")->LoadFromStream(dataStream, ftBlob);
  421. ITSDb_SQLBind(pADO, "p05", ATypeCd);
  422. ITSDb_SQLBind(pADO, "p06", FFileSize);
  423. ITSDb_SQLBind(pADO, "p07", Now().FormatString("yyyymmddhhnnss"));
  424. pADO->ExecSQL();
  425. return true;
  426. }
  427. catch(EDatabaseError &E)
  428. {
  429. DBERRORMSG("VMS image update", String(E.ClassName()), E.Message, sQry);
  430. throw Exception(String(E.ClassName()) + E.Message);
  431. }
  432. catch(Exception &e)
  433. {
  434. DBERRORMSG("VMS image update", String(e.ClassName()), e.Message, sQry);
  435. throw Exception(String(e.ClassName()) + e.Message);
  436. }
  437. }
  438. __finally
  439. {
  440. if (pADO)
  441. {
  442. pADO->Close();
  443. delete pADO;
  444. }
  445. if (dataStream) delete dataStream;
  446. dataStream = NULL;
  447. }
  448. return true;
  449. }
  450. //---------------------------------------------------------------------------
  451. void __fastcall TVMSM410M::BtnSaveClick(TObject *Sender)
  452. {
  453. if (EdNmbr->Text.IsEmpty())
  454. {
  455. Application->MessageBox(FrmLang->lblImage1->Caption.c_str(),//L"VMS 이미지정보 저장\r\n이미지 번호를 입력하세요.",
  456. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  457. return;
  458. }
  459. if (EdExpl->Text.Trim().IsEmpty())
  460. {
  461. Application->MessageBox(FrmLang->lblImage2->Caption.c_str(),//L"VMS 이미지정보 저장\r\n이미지 설명을 입력하세요.",
  462. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  463. return;
  464. }
  465. String sNmbr = EdNmbr->Text;
  466. String sExpl = EdExpl->Text.Trim();
  467. if (TvImageCell->DataController->RecordCount == 0)
  468. {
  469. String sMsg;
  470. sMsg = FrmLang->lblImage7->Caption + ": " + sNmbr;//"VMS이미지번호: " + sNmbr;
  471. sMsg+= "\r\n" + lblText1->Caption;//"이미지 셀 정보가 없습니다.\r\n소통정보 배경이미지 정보를 저장하시겠습니까?";
  472. if (Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES) return;
  473. }
  474. bool bIfscSet = true;
  475. TcxGridDataController *pGDC = TvImageCell->DataController;
  476. int nRows = pGDC->RecordCount;
  477. for (int ii = 0; ii < nRows; ii++)
  478. {
  479. String sIfscId = VarToStr(pGDC->Values[ii][ColIfscId->Index]);
  480. if (sIfscId == "")
  481. {
  482. bIfscSet = false;
  483. break;
  484. }
  485. }
  486. if (!bIfscSet)
  487. {
  488. String sMsg;
  489. sMsg = FrmLang->lblImage7->Caption + ": " + sNmbr;//"VMS이미지번호: " + sNmbr;
  490. sMsg+= "\r\n" + lblText2->Caption;//"이미지 셀 정보에 VMS 정보제공구간이 설정되어 있지 않습니다.\r\n소통정보 배경이미지 정보를 저장하시겠습니까?";
  491. if (Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES) return;
  492. }
  493. bool bResult = false;
  494. if (!FNewDb)
  495. {
  496. bResult = UpdateVmsImage(sNmbr, sExpl);
  497. }
  498. else
  499. {
  500. if (EdImageFileName->Text.Trim().IsEmpty())
  501. {
  502. Application->MessageBox(FrmLang->lblImage3->Caption.c_str(),//L"VMS 이미지정보 저장\r\n이미지를 선택하셔야 합니다.",
  503. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  504. return;
  505. }
  506. bResult = InsertVmsImage(sNmbr, sExpl, "", "SBT1");
  507. }
  508. if (!bResult) return;
  509. String ANmbr = sNmbr;
  510. String sQry;
  511. TADOQuery *pADO = NULL;
  512. try
  513. {
  514. try
  515. {
  516. pADO = new TADOQuery(NULL);
  517. pADO->Close();
  518. pADO->Connection = ITSDb_GetConnection();
  519. sQry = "DELETE TB_VMS_SYMB_IFSC \r\n"
  520. " WHERE SYMB_LIB_NMBR = :p01 \r\n";
  521. ITSDb_SQLText(pADO, sQry);
  522. ITSDb_SQLBind(pADO, "p01", ANmbr);
  523. pADO->ExecSQL();
  524. sQry = "INSERT INTO TB_VMS_SYMB_IFSC ( \r\n"
  525. " SYMB_LIB_NMBR, \r\n"
  526. " CELL_ID, \r\n"
  527. " POSX, \r\n"
  528. " POSY, \r\n"
  529. " VMS_IFSC_ID) \r\n"
  530. " VALUES ( \r\n"
  531. " :p01, \r\n"
  532. " :p02, \r\n"
  533. " :p03, \r\n"
  534. " :p04, \r\n"
  535. " :p05 ) \r\n";
  536. ITSDb_SQLText(pADO, sQry);
  537. ITSDb_GetConnection()->BeginTrans();
  538. TcxGridDataController *pGDC = TvImageCell->DataController;
  539. int nRows = pGDC->RecordCount;
  540. for (int ii = 0; ii < nRows; ii++)
  541. {
  542. String sCellId = VarToStr(pGDC->Values[ii][ColCellId->Index]);
  543. String sPosX = VarToStr(pGDC->Values[ii][ColCellPosX->Index]);
  544. String sPosY = VarToStr(pGDC->Values[ii][ColCellPosY->Index]);
  545. String sIfscId = VarToStr(pGDC->Values[ii][ColIfscId->Index]);
  546. ITSDb_SQLBind(pADO, "p01", ANmbr);
  547. ITSDb_SQLBind(pADO, "p02", sCellId);
  548. ITSDb_SQLBind(pADO, "p03", sPosX);
  549. ITSDb_SQLBind(pADO, "p04", sPosY);
  550. ITSDb_SQLBind(pADO, "p05", sIfscId);
  551. ITSDb_SQLExec(pADO);
  552. }
  553. ITSDb_GetConnection()->CommitTrans();
  554. bResult = true;
  555. }
  556. catch(EDatabaseError &E)
  557. {
  558. ITSDb_GetConnection()->RollbackTrans();
  559. DBERRORMSG("VMS image cell save", String(E.ClassName()), E.Message, sQry);
  560. throw Exception(String(E.ClassName()) + E.Message);
  561. }
  562. catch(Exception &e)
  563. {
  564. ITSDb_GetConnection()->RollbackTrans();
  565. DBERRORMSG("VMS image cell save", String(e.ClassName()), e.Message, sQry);
  566. throw Exception(String(e.ClassName()) + e.Message);
  567. }
  568. }
  569. __finally
  570. {
  571. if (pADO)
  572. {
  573. pADO->Close();
  574. delete pADO;
  575. }
  576. }
  577. if (bResult)
  578. {
  579. Application->MessageBox(lblText3->Caption.c_str(),//L"VMS 소통정보 배경이미지정보 저장\r\nVMS 소통정보 배경이미지정보를 저장 하였습니다.",
  580. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  581. FUpdate = true;
  582. LoadImageSymbol();
  583. CMM_SetGridRow(CxList, TvList, sNmbr, ColLink1->Index);
  584. DisplayInfo();
  585. CComm_VmsImageTrafficUpdate(); // VMS서버로 이미지가 업데이트 되었음을 알린다.
  586. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_14, 0);
  587. }
  588. }
  589. //---------------------------------------------------------------------------
  590. void __fastcall TVMSM410M::BtnInsertClick(TObject *Sender)
  591. {
  592. FormInit();
  593. //신규아이디를 얻어와서 화면을 초기화한다.
  594. int nNmbr;
  595. if (!FrmLang->GetNextVmsImgeId(nNmbr, 7000, 7999))
  596. {
  597. Application->MessageBox(FrmLang->lblImage4->Caption.c_str(),//L"새로운 VMS 이미지정보를 생성하지 못하였습니다.\r\n프로그램 종료후에 다시 시도해 보세요.",
  598. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  599. return;
  600. }
  601. EdNmbr->Text = String(nNmbr);
  602. ChangeEditMode(2);
  603. FNewDb = true;
  604. EdImageFileNameClick((TObject *)EdImageFileName);
  605. }
  606. //---------------------------------------------------------------------------
  607. void __fastcall TVMSM410M::BtnDeleteClick(TObject *Sender)
  608. {
  609. int nIdx = TvList->DataController->FocusedRecordIndex;
  610. if (nIdx < 0) return;
  611. String sId = EdNmbr->Text;
  612. if (sId.IsEmpty())
  613. {
  614. Application->MessageBox(FrmLang->lblImage6->Caption.c_str(),//L"삭제할 VMS 이미지를 목록에서 선택하세요.\r\n목록에서 더블클릭하여 선택합니다.",
  615. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  616. return;
  617. }
  618. if (FrmLang->CheckImageUseCount(sId) > 0)
  619. {
  620. Application->MessageBox(FrmLang->lblImage5->Caption.c_str(),//L"삭제할 이미지가 VMS 폼에서 사용되고 있습니다.\r\n먼저 해당 폼에서 삭제해주시기 바랍니다.",
  621. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  622. return;
  623. }
  624. String sMsg;
  625. sMsg = FrmLang->lblImage7->Caption + ": " + sId;//"VMS이미지번호: " + sId;
  626. sMsg+= "\r\n" + FrmLang->lblImage8->Caption;//"선택하신 VMS 이미지 정보를 삭제하시겠습니까?";
  627. if (Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES) return;
  628. if (FrmLang->DelVmsImage(sId, true))
  629. {
  630. FUpdate = true;
  631. Application->MessageBox(FrmLang->lblImage9->Caption.c_str(),//L"VMS 이미지정보삭제\r\nVMS 이미지정보를 삭제 하였습니다.",
  632. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  633. FormInit();
  634. ChangeEditMode(1);
  635. LoadImageSymbol();
  636. CComm_VmsImageTrafficUpdate(); // VMS서버로 이미지가 업데이트 되었음을 알린다.
  637. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_14, 0);
  638. }
  639. }
  640. //---------------------------------------------------------------------------
  641. void __fastcall TVMSM410M::BtnSaveImgFileClick(TObject *Sender)
  642. {
  643. SaveDialog->Title = FTitle;
  644. SaveDialog->InitialDir = ExtractFilePath(Application->ExeName);
  645. SaveDialog->Filter = "Bitmap image Files (*.bmp)|*.bmp";
  646. SaveDialog->FileName = EdNmbr->Text + ".bmp";
  647. if (SaveDialog->Execute())
  648. {
  649. try {
  650. String sFileName = SaveDialog->FileName;
  651. int iRet = sFileName.Pos(".bmp");
  652. if (iRet == 0)
  653. {
  654. sFileName = SaveDialog->FileName + ".bmp";
  655. }
  656. //ImgPreView->Picture->SaveToFile(sFileName);
  657. ImgTemp->Picture->SaveToFile(sFileName);
  658. }
  659. catch (Exception &exception)
  660. {
  661. Application->ShowException(&exception);
  662. }
  663. }
  664. }
  665. //---------------------------------------------------------------------------
  666. void __fastcall TVMSM410M::EdImageFileNameClick(TObject *Sender)
  667. {
  668. OpenBmp->Title = FTitle;
  669. OpenBmp->FileName = "";
  670. OpenBmp->Execute();
  671. }
  672. //---------------------------------------------------------------------------
  673. void __fastcall TVMSM410M::OpenBmpCanClose(TObject *Sender, bool &CanClose)
  674. {
  675. String sFName = OpenBmp->FileName;
  676. sFName = sFName.UpperCase();
  677. String sMsgTitle, sMsgString;
  678. sMsgTitle = FrmLang->lblImage10->Caption;//"VMS 이미지 선택";
  679. if (sFName.SubString(sFName.Length()-2, 3) != "BMP")
  680. {
  681. sMsgString = FrmLang->lblImage11->Caption;//"BMP 파일만 적용 가능합니다.";
  682. Application->MessageBox(sMsgString.c_str(), sMsgTitle.c_str(), MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  683. return;
  684. }
  685. try
  686. {
  687. FFileSize = ITSUtil_GetFileSize(sFName);
  688. if (FFileSize <= 0)
  689. {
  690. sMsgString = FrmLang->lblImage12->Caption;//"이미지 파일을 읽어 오는데 실패하였습니다.";
  691. Application->MessageBox(sMsgString.c_str(), sMsgTitle.c_str(), MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  692. return;
  693. }
  694. #if 0
  695. if (FFileSize > (1024 * 32)) // Max 32Kbytes
  696. {
  697. sMsgString = FrmLang->lblImage13->Caption;//"이미지 파일의 최대 크기는 32KBytes를 넘을 수 없습니다.\r\n이미지 파일의 용량을 줄여 주세요.";
  698. Application->MessageBox(sMsgString.c_str(), sMsgTitle.c_str(), MB_OK|MB_ICONWARNING|MB_APPLMODAL);
  699. return;
  700. }
  701. #endif
  702. //EdImageSize->Text = String(dwFileSize);//GetFileSize(sFName));
  703. EdImageFileName->Text = sFName;
  704. ImgPreView->Picture->Bitmap->FreeImage();
  705. ImgPreView->Picture->Bitmap = NULL;
  706. ImgPreView->Picture->Bitmap->LoadFromFile(sFName);
  707. lblImgSize->Caption = String(ImgPreView->Picture->Bitmap->Width) + " * " + String(ImgPreView->Picture->Bitmap->Height);
  708. ImgTemp->Picture->Bitmap->FreeImage();
  709. ImgTemp->Picture->Bitmap = NULL;
  710. ImgTemp->Picture->Bitmap->LoadFromFile(sFName);
  711. FNewWidth = ImgTemp->Picture->Bitmap->Width;
  712. FNewHeight = ImgTemp->Picture->Bitmap->Height;
  713. FImageUpdate = true;
  714. }
  715. catch(...)
  716. {
  717. }
  718. }
  719. //---------------------------------------------------------------------------
  720. void __fastcall TVMSM410M::ClearSymbloList()
  721. {
  722. for(int ii = 0; ii < FListSymb->Count; ii++)
  723. {
  724. Graphics::TBitmap *bitmap = (Graphics::TBitmap *)FListSymb->Items[ii];
  725. delete bitmap;
  726. }
  727. FListSymb->Clear();
  728. }
  729. //---------------------------------------------------------------------------
  730. void __fastcall TVMSM410M::LoadImageSymbol()
  731. {
  732. FormInit();
  733. CMM_ClearGridTableView(TvList);
  734. ClearSymbloList();
  735. String sQry;
  736. TADOQuery *pADO = NULL;
  737. sQry = "SELECT SYMB_LIB_NMBR, \r\n"
  738. " IMAG_DATA, \r\n"
  739. " SYMB_EXPL, SYMB_FILE_NM, SYMB_TYPE \r\n"
  740. " FROM TB_VMS_SYMB_LIB \r\n"
  741. " WHERE SYMB_LIB_NMBR BETWEEN 7000 AND 7999 \r\n"
  742. " AND DEL_YN = 'N' \r\n"
  743. " ORDER BY SYMB_LIB_NMBR \r\n";
  744. int nRowHeight = 0;
  745. try
  746. {
  747. int nRow;
  748. TcxDataController *pGDC = TvList->DataController;
  749. TvList->BeginUpdate();
  750. try
  751. {
  752. pADO = new TADOQuery(NULL);
  753. pADO->Close();
  754. pADO->Connection = ITSDb_GetConnection();
  755. ITSDb_SQLText(pADO, sQry);
  756. ITSDb_SQLOpen(pADO);
  757. for( ; !pADO->Eof; pADO->Next())
  758. {
  759. nRow = pGDC->AppendRecord();
  760. pGDC->Values[nRow][ColLink1->Index] = pADO->FieldByName("SYMB_LIB_NMBR")->AsString;
  761. pGDC->Values[nRow][ColLink2->Index] = pADO->FieldByName("IMAG_DATA")->AsVariant;
  762. pGDC->Values[nRow][ColLink3->Index] = pADO->FieldByName("SYMB_EXPL")->AsString;
  763. pGDC->Values[nRow][ColLink4->Index] = pADO->FieldByName("SYMB_TYPE")->AsString;
  764. Graphics::TBitmap *bitmap = new Graphics::TBitmap;
  765. bitmap->LoadFromStream(pADO->CreateBlobStream(pADO->FieldByName("IMAG_DATA"), bmRead));
  766. FListSymb->Add(bitmap);
  767. if (bitmap->Height+2 > nRowHeight) nRowHeight = bitmap->Height+3;
  768. }
  769. }
  770. catch(EDatabaseError &E)
  771. {
  772. DBERRORMSG("TVMSM410M::LoadImageSymbol", String(E.ClassName()), E.Message, sQry);
  773. throw Exception(String(E.ClassName()) + E.Message);
  774. }
  775. catch(Exception &e)
  776. {
  777. DBERRORMSG("TVMSM410M::LoadImageSymbol", String(e.ClassName()), e.Message, sQry);
  778. throw Exception(String(e.ClassName()) + e.Message);
  779. }
  780. }
  781. __finally
  782. {
  783. if (pADO)
  784. {
  785. pADO->Close();
  786. delete pADO;
  787. }
  788. TvList->OptionsView->DataRowHeight = nRowHeight;
  789. TvList->EndUpdate();
  790. }
  791. }
  792. //---------------------------------------------------------------------------
  793. void __fastcall TVMSM410M::LoadVmsIfsc()
  794. {
  795. CMM_ClearGridTableView(TvAxis);
  796. String sQry;
  797. TADOQuery *pADO = NULL;
  798. sQry = "SELECT C.VMS_CTLR_NMBR, C.VMS_CTLR_ID, C.VMS_NM, \r\n"
  799. " A.VMS_IFSC_ID, A.VMS_IFSC_NM, \r\n"
  800. " A.DSPL_STRT_NODE_NM, A.DSPL_END_NODE_NM, \r\n"
  801. " A.AXIS_YN \r\n"
  802. " FROM TB_VMS_IFSC A, \r\n"
  803. " TB_VMS_RLTN_IFSC B, \r\n"
  804. " (SELECT VMS_CTLR_NMBR, \r\n"
  805. " VMS_CTLR_ID, \r\n"
  806. " VMS_NM \r\n"
  807. " FROM TB_VMS_CTLR ) C \r\n"
  808. " WHERE A.USE_YN = 'Y' \r\n"
  809. " AND A.VMS_IFSC_ID = B.VMS_IFSC_ID \r\n"
  810. " AND B.VMS_CTLR_NMBR = C.VMS_CTLR_NMBR \r\n";
  811. try
  812. {
  813. int nRow;
  814. TcxDataController *pGDC = TvAxis->DataController;
  815. TvAxis->BeginUpdate();
  816. try
  817. {
  818. pADO = new TADOQuery(NULL);
  819. pADO->Close();
  820. pADO->Connection = ITSDb_GetConnection();
  821. ITSDb_SQLText(pADO, sQry);
  822. ITSDb_SQLOpen(pADO);
  823. for( ; !pADO->Eof; pADO->Next())
  824. {
  825. nRow = pGDC->AppendRecord();
  826. pGDC->Values[nRow][Col00->Index] = pADO->FieldByName("VMS_CTLR_ID")->AsString;
  827. pGDC->Values[nRow][Col01->Index] = pADO->FieldByName("VMS_IFSC_ID")->AsString;
  828. pGDC->Values[nRow][Col02->Index] = pADO->FieldByName("VMS_IFSC_NM")->AsString;
  829. pGDC->Values[nRow][Col03->Index] = pADO->FieldByName("DSPL_STRT_NODE_NM")->AsString;
  830. pGDC->Values[nRow][Col04->Index] = pADO->FieldByName("DSPL_END_NODE_NM")->AsString;
  831. pGDC->Values[nRow][Col05->Index] = pADO->FieldByName("AXIS_YN")->AsString;
  832. }
  833. }
  834. catch(EDatabaseError &E)
  835. {
  836. DBERRORMSG("TVMSM410M::LoadVmsIfsc", String(E.ClassName()), E.Message, sQry);
  837. throw Exception(String(E.ClassName()) + E.Message);
  838. }
  839. catch(Exception &e)
  840. {
  841. DBERRORMSG("TVMSM410M::LoadVmsIfsc", String(e.ClassName()), e.Message, sQry);
  842. throw Exception(String(e.ClassName()) + e.Message);
  843. }
  844. }
  845. __finally
  846. {
  847. if (pADO)
  848. {
  849. pADO->Close();
  850. delete pADO;
  851. }
  852. TvAxis->EndUpdate();
  853. CMM_ExpandCollapseChk(TvAxis, ChkExpand->Checked);
  854. }
  855. }
  856. //---------------------------------------------------------------------------
  857. void __fastcall TVMSM410M::LoadImageSymbolCell(String ANmbr)
  858. {
  859. CMM_ClearGridTableView(TvImageCell);
  860. String sQry;
  861. TADOQuery *pADO = NULL;
  862. sQry = "SELECT A.SYMB_LIB_NMBR, \r\n"
  863. " A.CELL_ID, \r\n"
  864. " A.POSX, POSY, \r\n"
  865. " A.VMS_IFSC_ID, \r\n"
  866. " B.VMS_IFSC_NM, \r\n"
  867. " B.DSPL_STRT_NODE_NM, \r\n"
  868. " B.DSPL_END_NODE_NM \r\n"
  869. " FROM TB_VMS_SYMB_IFSC A, \r\n"
  870. " TB_VMS_IFSC B \r\n"
  871. " WHERE A.SYMB_LIB_NMBR = :p01 \r\n"
  872. " AND A.VMS_IFSC_ID = B.VMS_IFSC_ID(+) \r\n"
  873. " ORDER BY CELL_ID \r\n";
  874. try
  875. {
  876. int nRow;
  877. TcxDataController *pGDC = TvImageCell->DataController;
  878. TvImageCell->BeginUpdate();
  879. try
  880. {
  881. pADO = new TADOQuery(NULL);
  882. pADO->Close();
  883. pADO->Connection = ITSDb_GetConnection();
  884. ITSDb_SQLText(pADO, sQry);
  885. ITSDb_SQLBind(pADO, "p01", ANmbr);
  886. ITSDb_SQLOpen(pADO);
  887. for( ; !pADO->Eof; pADO->Next())
  888. {
  889. nRow = pGDC->AppendRecord();
  890. pGDC->Values[nRow][ColCellId->Index] = pADO->FieldByName("CELL_ID")->AsString;
  891. pGDC->Values[nRow][ColCellPosX->Index] = pADO->FieldByName("POSX")->AsString;
  892. pGDC->Values[nRow][ColCellPosY->Index] = pADO->FieldByName("POSY")->AsString;
  893. pGDC->Values[nRow][ColIfscId->Index] = pADO->FieldByName("VMS_IFSC_ID")->AsString;
  894. pGDC->Values[nRow][ColIfscNm->Index] = pADO->FieldByName("VMS_IFSC_NM")->AsString;
  895. pGDC->Values[nRow][ColStrNm->Index] = pADO->FieldByName("DSPL_STRT_NODE_NM")->AsString;
  896. pGDC->Values[nRow][ColEndNm->Index] = pADO->FieldByName("DSPL_END_NODE_NM")->AsString;
  897. }
  898. }
  899. catch(EDatabaseError &E)
  900. {
  901. DBERRORMSG("VMS image query", String(E.ClassName()), E.Message, sQry);
  902. throw Exception(String(E.ClassName()) + E.Message);
  903. }
  904. catch(Exception &e)
  905. {
  906. DBERRORMSG("VMS image query", String(e.ClassName()), e.Message, sQry);
  907. throw Exception(String(e.ClassName()) + e.Message);
  908. }
  909. }
  910. __finally
  911. {
  912. if (pADO)
  913. {
  914. pADO->Close();
  915. delete pADO;
  916. }
  917. TvImageCell->EndUpdate();
  918. }
  919. }
  920. //---------------------------------------------------------------------------
  921. void __fastcall TVMSM410M::TvListCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo,
  922. TMouseButton AButton, TShiftState AShift,
  923. bool &AHandled)
  924. {
  925. if (!ACellViewInfo) return;
  926. DisplayInfo();
  927. }
  928. //---------------------------------------------------------------------------
  929. void __fastcall TVMSM410M::ColLink2CustomDrawCell(TcxCustomGridTableView *Sender,
  930. TcxCanvas *ACanvas, TcxGridTableDataCellViewInfo *AViewInfo,
  931. bool &ADone)
  932. {
  933. #if 0
  934. int nRow = AViewInfo->GridRecord->RecordIndex;
  935. if (nRow < 0) return;
  936. if (nRow >= FListSymb->Count)
  937. {
  938. return;
  939. }
  940. try
  941. {
  942. Graphics::TBitmap *pBmp = (Graphics::TBitmap*)FListSymb->Items[nRow];
  943. TRect rc;
  944. TRect rcOrg = AViewInfo->Bounds;
  945. int nH = ( (rcOrg.Bottom - rcOrg.Top) - pBmp->Height ) / 2;
  946. rc.Top = rcOrg.Top + nH+1;
  947. rc.Bottom = rcOrg.Bottom - nH+1;
  948. rc.Left = rcOrg.Left + 1;
  949. rc.Right = rc.Left + pBmp->Width;
  950. ACanvas->Canvas->StretchDraw(rc, pBmp);
  951. ADone = true;
  952. }
  953. catch(Exception &e)
  954. {
  955. }
  956. #endif
  957. }
  958. //---------------------------------------------------------------------------
  959. void __fastcall TVMSM410M::BtnCellDeleteClick(TObject *Sender)
  960. {
  961. TcxGridDataController *pGDC = TvImageCell->DataController;
  962. int nSelIdx = pGDC->FocusedRecordIndex;
  963. if (nSelIdx < 0) return;
  964. pGDC->BeginUpdate();
  965. pGDC->DeleteRecord(nSelIdx);
  966. pGDC->EndUpdate();
  967. UpdateCellColor();
  968. }
  969. //---------------------------------------------------------------------------
  970. void __fastcall TVMSM410M::BtnCellApplyClick(TObject *Sender)
  971. {
  972. TcxGridDataController *pGDC = TvImageCell->DataController;
  973. String sCellId;
  974. String sPosX;
  975. String sPosY;
  976. int nCellId = SeCellId->Value;
  977. int nPosX = SePosX->Value;
  978. int nPosY = SePosY->Value;
  979. int nMaxCellId = 0;
  980. bool bFound = false;
  981. sCellId = String(nCellId);
  982. sPosX = String(nPosX);
  983. sPosY = String(nPosY);
  984. int nFocusedIndex = 0;
  985. try
  986. {
  987. int nRows = pGDC->RecordCount;
  988. TvImageCell->BeginUpdate();
  989. pGDC->BeginUpdate();
  990. for (int ii = 0; ii < nRows; ii++)
  991. {
  992. String sTmpId = pGDC->Values[ii][ColCellId->Index];
  993. if (sTmpId == sCellId)
  994. {
  995. nFocusedIndex = ii;
  996. bFound = true;
  997. }
  998. }
  999. if (!bFound)
  1000. {
  1001. nFocusedIndex = pGDC->AppendRecord();
  1002. //SeCellId->Value = nRows+1;
  1003. pGDC->Values[nFocusedIndex][ColCellId->Index] = String(nRows+1);
  1004. }
  1005. pGDC->Values[nFocusedIndex][ColCellPosX->Index] = sPosX;
  1006. pGDC->Values[nFocusedIndex][ColCellPosY->Index] = sPosY;
  1007. }
  1008. __finally
  1009. {
  1010. pGDC->EndUpdate();
  1011. TvImageCell->EndUpdate();
  1012. //if (pGDC->RecordCount > 0) pGDC->FocusedRecordIndex = nFocusedIndex;
  1013. SeCellId->Value = pGDC->RecordCount+1;
  1014. }
  1015. UpdateCellColor();
  1016. }
  1017. //---------------------------------------------------------------------------
  1018. void __fastcall TVMSM410M::ImgPreViewMouseDown(TObject *Sender, TMouseButton Button,
  1019. TShiftState Shift, int X, int Y)
  1020. {
  1021. try {
  1022. SePosX->Value = X;
  1023. SePosY->Value = Y;
  1024. UpdateCellColor();
  1025. TColor FOldColor = ImgPreView->Picture->Bitmap->Canvas->Pixels[SePosX->Value][SePosY->Value];
  1026. ImgPreView->Picture->Bitmap->Canvas->Brush->Style = bsSolid;
  1027. ImgPreView->Picture->Bitmap->Canvas->Brush->Color = clWhite;
  1028. ImgPreView->Picture->Bitmap->Canvas->FloodFill(SePosX->Value, SePosY->Value, FOldColor, fsSurface);
  1029. } catch(...) {}
  1030. }
  1031. //---------------------------------------------------------------------------
  1032. void __fastcall TVMSM410M::ColAreaCustomDrawCell(TcxCustomGridTableView *Sender,
  1033. TcxCanvas *ACanvas, TcxGridTableDataCellViewInfo *AViewInfo,
  1034. bool &ADone)
  1035. {
  1036. int nIdx = AViewInfo->GridRecord->RecordIndex;
  1037. if (nIdx < 0)
  1038. return;
  1039. try
  1040. {
  1041. String sCellId = VarToStr(TvImageCell->DataController->Values[nIdx][ColCellId->Index]);
  1042. nIdx = sCellId.ToIntDef(0);
  1043. ACanvas->Brush->Color = GetDisplayColor(nIdx-1);
  1044. ACanvas->Font->Color = ACanvas->Brush->Color;
  1045. }
  1046. catch(...)
  1047. {
  1048. }
  1049. }
  1050. //---------------------------------------------------------------------------
  1051. void __fastcall TVMSM410M::TvImageCellFocusedRecordChanged(TcxCustomGridTableView *Sender,
  1052. TcxCustomGridRecord *APrevFocusedRecord, TcxCustomGridRecord *AFocusedRecord,
  1053. bool ANewItemRecordFocusingChanged)
  1054. {
  1055. TcxGridDataController *pGDC = TvImageCell->DataController;
  1056. int nSelIdx = pGDC->FocusedRecordIndex;
  1057. if (nSelIdx < 0) return;
  1058. String sCellId = VarToStr(pGDC->Values[nSelIdx][ColCellId->Index]);
  1059. String sPosX = VarToStr(pGDC->Values[nSelIdx][ColCellPosX->Index]);
  1060. String sPosY = VarToStr(pGDC->Values[nSelIdx][ColCellPosY->Index]);
  1061. SeCellId->Value = sCellId.ToIntDef(0);
  1062. SePosX->Value = sPosX.ToIntDef(0);
  1063. SePosY->Value = sPosY.ToIntDef(0);
  1064. UpdateCellColor();
  1065. #if 1
  1066. try {
  1067. TColor FOldColor = ImgPreView->Picture->Bitmap->Canvas->Pixels[SePosX->Value][SePosY->Value];
  1068. if (FOldColor == clYellow) return;
  1069. ImgPreView->Picture->Bitmap->Canvas->Brush->Color = clYellow;
  1070. ImgPreView->Picture->Bitmap->Canvas->FloodFill(SePosX->Value, SePosY->Value, FOldColor, fsSurface);
  1071. } catch(...) {}
  1072. #endif
  1073. }
  1074. //---------------------------------------------------------------------------
  1075. void __fastcall TVMSM410M::UpdateCellColor()
  1076. {
  1077. ImgPreView->Picture->Bitmap->FreeImage();
  1078. ImgPreView->Picture->Bitmap = NULL;
  1079. ImgPreView->Picture->Bitmap->Assign(ImgTemp->Picture->Bitmap);
  1080. ImgPreView->Width = ImgPreView->Picture->Bitmap->Width;
  1081. ImgPreView->Height = ImgPreView->Picture->Bitmap->Height;
  1082. TcxGridDataController *pGDC = TvImageCell->DataController;
  1083. int nRows = pGDC->RecordCount;
  1084. try
  1085. {
  1086. TvImageCell->BeginUpdate();
  1087. pGDC->BeginUpdate();
  1088. for (int ii = 0; ii < nRows; ii++)
  1089. {
  1090. String sCellId = VarToStr(pGDC->Values[ii][ColCellId->Index]);
  1091. String sPosX = VarToStr(pGDC->Values[ii][ColCellPosX->Index]);
  1092. String sPosY = VarToStr(pGDC->Values[ii][ColCellPosY->Index]);
  1093. int X = sPosX.ToIntDef(0);
  1094. int Y = sPosY.ToIntDef(0);
  1095. TColor FOldColor = ImgPreView->Picture->Bitmap->Canvas->Pixels[X][Y];
  1096. int nIdx = sCellId.ToIntDef(0);
  1097. ImgPreView->Picture->Bitmap->Canvas->Brush->Style = bsSolid;
  1098. ImgPreView->Picture->Bitmap->Canvas->Brush->Color = GetDisplayColor(nIdx-1);
  1099. ImgPreView->Picture->Bitmap->Canvas->FloodFill(X, Y, FOldColor, fsSurface);
  1100. }
  1101. }
  1102. __finally
  1103. {
  1104. pGDC->EndUpdate();
  1105. TvImageCell->EndUpdate();
  1106. }
  1107. }
  1108. //---------------------------------------------------------------------------
  1109. void __fastcall TVMSM410M::SeCellIdPropertiesChange(TObject *Sender)
  1110. {
  1111. if (((TcxSpinEdit*)Sender)->Value < ((TcxSpinEdit*)Sender)->Properties->MinValue)
  1112. ((TcxSpinEdit*)Sender)->Value = ((TcxSpinEdit*)Sender)->Properties->MinValue;
  1113. else if(((TcxSpinEdit*)Sender)->Value > ((TcxSpinEdit*)Sender)->Properties->MaxValue &&
  1114. ((TcxSpinEdit*)Sender)->Properties->MaxValue)
  1115. ((TcxSpinEdit*)Sender)->Value = ((TcxSpinEdit*)Sender)->Properties->MaxValue;
  1116. }
  1117. //---------------------------------------------------------------------------
  1118. void __fastcall TVMSM410M::TvListFocusedRecordChanged(TcxCustomGridTableView *Sender,
  1119. TcxCustomGridRecord *APrevFocusedRecord, TcxCustomGridRecord *AFocusedRecord,
  1120. bool ANewItemRecordFocusingChanged)
  1121. {
  1122. if (!AFocusedRecord) return;
  1123. DisplayInfo();
  1124. }
  1125. //---------------------------------------------------------------------------
  1126. void __fastcall TVMSM410M::BtnListAddClick(TObject *Sender)
  1127. {
  1128. int nCellIdx = CMM_GetRecordIndex(TvImageCell);
  1129. if (nCellIdx < 0) return;
  1130. int nIfscIdx = CMM_GetRecordIndex(TvAxis);
  1131. if (nIfscIdx < 0) return;
  1132. TcxGridDataController *pDcCell = TvImageCell->DataController;
  1133. TcxGridDataController *pDcIfsc = TvAxis->DataController;
  1134. pDcCell->Values[nCellIdx][ColIfscId->Index] = pDcIfsc->Values[nIfscIdx][Col01->Index];
  1135. pDcCell->Values[nCellIdx][ColIfscNm->Index] = pDcIfsc->Values[nIfscIdx][Col02->Index];
  1136. pDcCell->Values[nCellIdx][ColStrNm->Index] = pDcIfsc->Values[nIfscIdx][Col03->Index];
  1137. pDcCell->Values[nCellIdx][ColEndNm->Index] = pDcIfsc->Values[nIfscIdx][Col04->Index];
  1138. }
  1139. //---------------------------------------------------------------------------
  1140. void __fastcall TVMSM410M::BtnListDeleteClick(TObject *Sender)
  1141. {
  1142. int nCellIdx = CMM_GetRecordIndex(TvImageCell);
  1143. if (nCellIdx < 0) return;
  1144. TcxGridDataController *pDcCell = TvImageCell->DataController;
  1145. pDcCell->Values[nCellIdx][ColIfscId->Index] = "";
  1146. pDcCell->Values[nCellIdx][ColIfscNm->Index] = "";
  1147. pDcCell->Values[nCellIdx][ColStrNm->Index] = "";
  1148. pDcCell->Values[nCellIdx][ColEndNm->Index] = "";
  1149. }
  1150. //---------------------------------------------------------------------------
  1151. void __fastcall TVMSM410M::ChkExpandClick(TObject *Sender)
  1152. {
  1153. CMM_ExpandCollapseChk(TvAxis, ChkExpand->Checked);
  1154. }
  1155. //---------------------------------------------------------------------------
  1156. void __fastcall TVMSM410M::Col05CustomDrawCell(TcxCustomGridTableView *Sender, TcxCanvas *ACanvas, TcxGridTableDataCellViewInfo *AViewInfo,
  1157. bool &ADone)
  1158. {
  1159. int nRecordIdx = AViewInfo->GridRecord->RecordIndex;
  1160. if (nRecordIdx < 0)
  1161. {
  1162. return;
  1163. }
  1164. try
  1165. {
  1166. int nItemIdx = AViewInfo->Item->Index;
  1167. if (VarIsNull(AViewInfo->GridRecord->DisplayTexts[nItemIdx])) return;
  1168. String sData = AViewInfo->GridRecord->DisplayTexts[nItemIdx];
  1169. if (sData == "Y")
  1170. {
  1171. ACanvas->Canvas->Brush->Color = clLime;
  1172. }
  1173. }
  1174. catch(Exception &e)
  1175. {
  1176. }
  1177. }
  1178. //---------------------------------------------------------------------------