VMSM900MF.cpp 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637
  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 "VMSM900MF.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 "cxCalc"
  73. #pragma resource "*.dfm"
  74. TVMSM900M *VMSM900M = NULL;
  75. //---------------------------------------------------------------------------
  76. __fastcall TVMSM900M::TVMSM900M(TComponent* Owner)
  77. : TForm(Owner)
  78. {
  79. LangTrans->Translate(this, ITSDb_GetConnection());
  80. ITSSkin_Load(this);
  81. CMM_LoadForm(g_sFormsDir, this);
  82. FUpdate= false;
  83. FTitle = Caption;//"VMS 휘도설정 스케줄 관리";
  84. EditMode = false;
  85. FillVmsList();
  86. }
  87. //---------------------------------------------------------------------------
  88. void __fastcall TVMSM900M::CommClose()
  89. {
  90. try
  91. {
  92. CMM_SaveForm(g_sFormsDir, this);
  93. }
  94. catch(...)
  95. {
  96. }
  97. }
  98. //---------------------------------------------------------------------------
  99. void __fastcall TVMSM900M::FormShow(TObject *Sender)
  100. {
  101. Refresh();
  102. FormInit();
  103. ChangeEditMode(1);
  104. TmrShow->Enabled = true;
  105. }
  106. //---------------------------------------------------------------------------
  107. void __fastcall TVMSM900M::FormInit()
  108. {
  109. EdNmbr->Text = "";
  110. EdTime->Text = "";
  111. CbVms->ItemIndex = 0;
  112. SeLuminance->Value = 0;
  113. CbUseYn->ItemIndex = 0;
  114. CxSchTime->Clear();
  115. CxSchTime->EditValue = Now().FormatString("hh:nn");
  116. CxSchTime->EditValue = "00:00";
  117. FNewDb = false;
  118. }
  119. //---------------------------------------------------------------------------
  120. void __fastcall TVMSM900M::TmrShowTimer(TObject *Sender)
  121. {
  122. TmrShow->Enabled = false;
  123. UpdateList();
  124. }
  125. //---------------------------------------------------------------------------
  126. void __fastcall TVMSM900M::BtnCloseClick(TObject *Sender)
  127. {
  128. Close();
  129. }
  130. //---------------------------------------------------------------------------
  131. void __fastcall TVMSM900M::FormClose(TObject *Sender, TCloseAction &Action)
  132. {
  133. CommClose();
  134. VMSM900M = NULL;
  135. Action = caFree;
  136. }
  137. //---------------------------------------------------------------------------
  138. void __fastcall TVMSM900M::FormCloseQuery(TObject *Sender, bool &CanClose)
  139. {
  140. if (FUpdate)
  141. {
  142. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_14, 0);
  143. }
  144. }
  145. //---------------------------------------------------------------------------
  146. void __fastcall TVMSM900M::DisplayInfo()
  147. {
  148. FormInit();
  149. int nRow = TvList->DataController->FocusedRecordIndex;
  150. if( nRow <= -1 )
  151. return;
  152. String VmsNo = TvList->DataController->Values[nRow][Column01->Index];
  153. String SchTm = TvList->DataController->Values[nRow][Column07->Index];
  154. int Lumin = TvList->DataController->Values[nRow][Column08->Index];
  155. String UseYn = TvList->DataController->Values[nRow][Column09->Index];
  156. APP_SetCode(CbVms, VmsNo);
  157. APP_SetCode(CbUseYn, UseYn);
  158. SeLuminance->Value = Lumin;
  159. EdNmbr->Text = VmsNo;
  160. EdTime->Text = SchTm;
  161. try
  162. {
  163. if (SchTm.Length() == 4) // 전팡관ON시각
  164. {
  165. SchTm.Insert(":", 3);
  166. CxSchTime->EditValue = SchTm;
  167. }
  168. }
  169. catch(Exception &e)
  170. {
  171. }
  172. ChangeEditMode(3);
  173. }
  174. //---------------------------------------------------------------------------
  175. void __fastcall TVMSM900M::BtnEditClick(TObject *Sender)
  176. {
  177. if (BtnEdit->Caption == FrmLang->lblEdit->Caption)//"편집")
  178. {
  179. ChangeEditMode(0);
  180. FNewDb = false;
  181. }
  182. else
  183. {
  184. String VmsNo = EdNmbr->Text;
  185. String SchTm = EdTime->Text;
  186. ChangeEditMode(1);
  187. CMM_SetGridDataFocus2(TvList->DataController, VmsNo, Column01->Index, SchTm, Column07->Index);
  188. DisplayInfo();
  189. }
  190. }
  191. //---------------------------------------------------------------------------
  192. void __fastcall TVMSM900M::ChangeEditMode(int AEdit)
  193. {
  194. bool bEnabled = false;
  195. switch(AEdit)
  196. {
  197. case 0: //편집버튼클릭
  198. {
  199. BtnEdit->Enabled = true;
  200. BtnInsert->Enabled = false;
  201. BtnDelete->Enabled = false;
  202. BtnSave->Enabled = true;
  203. BtnEdit->Caption = FrmLang->lblCancel->Caption;//"취소";
  204. BtnEdit->Hint = FrmLang->lblCancel->Hint;//데이터 편집 취소";
  205. EditMode = true;
  206. }
  207. break;
  208. case 1: //편집[취소]버튼클릭
  209. {
  210. FormInit(); //화면을 모두 지운다.
  211. BtnEdit->Enabled = false;
  212. BtnInsert->Enabled = true;
  213. BtnDelete->Enabled = false;
  214. BtnSave->Enabled = false;
  215. BtnEdit->Caption = FrmLang->lblEdit->Caption;//"편집";
  216. BtnEdit->Hint = FrmLang->lblEdit->Hint;//데이터 편집";
  217. //bEnabled = true;
  218. EditMode = false;
  219. }
  220. break;
  221. case 2: //추가
  222. {
  223. BtnEdit->Enabled = true;
  224. BtnInsert->Enabled = false;
  225. BtnDelete->Enabled = false;
  226. BtnSave->Enabled = true;
  227. BtnEdit->Caption = FrmLang->lblCancel->Caption;//"취소";
  228. BtnEdit->Hint = FrmLang->lblCancel->Hint;//데이터 편집 취소";
  229. EditMode = true;
  230. }
  231. break;
  232. case 3: //수정모드
  233. {
  234. BtnEdit->Enabled = true;
  235. BtnInsert->Enabled = true;
  236. BtnDelete->Enabled = true;
  237. BtnSave->Enabled = false;
  238. BtnEdit->Caption = FrmLang->lblEdit->Caption;//"편집";
  239. BtnEdit->Hint = FrmLang->lblEdit->Hint;//데이터 편집";
  240. bEnabled = true;
  241. EditMode = false;
  242. }
  243. break;
  244. }
  245. if (AEdit == 2)
  246. {
  247. CbVms->Enabled = true;
  248. CxSchTime->Enabled = true;
  249. }
  250. else
  251. {
  252. CbVms->Enabled = false;
  253. CxSchTime->Enabled = false;
  254. }
  255. if (AEdit == 0 || AEdit == 2)
  256. {
  257. CxList->Enabled = false;
  258. }
  259. else
  260. {
  261. CxList->Enabled = true;
  262. }
  263. PnlEdit->Enabled = EditMode;
  264. }
  265. //---------------------------------------------------------------------------
  266. void __fastcall TVMSM900M::BtnInsertClick(TObject *Sender)
  267. {
  268. FormInit();
  269. //신규아이디를 얻어와서 화면을 초기화한다.
  270. ChangeEditMode(2);
  271. FNewDb = true;
  272. }
  273. //---------------------------------------------------------------------------
  274. void __fastcall TVMSM900M::BtnDeleteClick(TObject *Sender)
  275. {
  276. int nRow = TvList->DataController->FocusedRecordIndex;
  277. if (nRow < 0) return;
  278. String VmsNo = TvList->DataController->Values[nRow][Column01->Index];
  279. String SchTm = TvList->DataController->Values[nRow][Column07->Index];
  280. String sMsg;
  281. sMsg = lblText1->Caption + ": " + VmsNo;//"VMS번호: " + VmsNo;
  282. sMsg+= "\r\n" +lblText2->Caption + ": " + SchTm;
  283. sMsg+= "\r\n" + lblText3->Caption;//"선택하신 휘도제어 스케줄 정보를 삭제하시겠습니까?";
  284. if (Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES) return;
  285. if (DeleteInfo(VmsNo, SchTm))
  286. {
  287. UpdateList();
  288. }
  289. FUpdate = true;
  290. Application->MessageBox(lblText4->Caption.c_str(),//L"휘도제어 스케줄 정보삭제\r\휘도제어 스케줄 정보를 삭제 하였습니다.",
  291. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  292. FormInit();
  293. ChangeEditMode(1);
  294. }
  295. //---------------------------------------------------------------------------
  296. void __fastcall TVMSM900M::BtnSaveClick(TObject *Sender)
  297. {
  298. String VmsNo = APP_GetCode(CbVms);
  299. String SchTm = CxSchTime->Time.FormatString("HHNN");
  300. if (VmsNo.IsEmpty() || SchTm.IsEmpty())
  301. {
  302. Application->MessageBox(FrmLang->lblNecessary->Caption.c_str(),//L"★항목은 필수 입력 항목입니다.\r\n모두 입력후 진행해 주세요.",
  303. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  304. return;
  305. }
  306. String Lumin = SeLuminance->Value;
  307. String UseYn = APP_GetCode(CbUseYn);
  308. if (MergeInfo(VmsNo, SchTm, Lumin, UseYn))
  309. {
  310. Application->MessageBox(lblText4->Caption.c_str(),//L"휘도제어 스케줄 정보저장\r\n휘도제어 스케줄 정보를 저장 하였습니다.",
  311. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  312. FUpdate = true;
  313. UpdateList();
  314. CMM_SetGridDataFocus2(TvList->DataController, VmsNo, Column01->Index, SchTm, Column07->Index);
  315. DisplayInfo();
  316. }
  317. }
  318. //---------------------------------------------------------------------------
  319. void __fastcall TVMSM900M::SeLuminancePropertiesChange(TObject *Sender)
  320. {
  321. if (((TcxSpinEdit*)Sender)->Value < ((TcxSpinEdit*)Sender)->Properties->MinValue)
  322. ((TcxSpinEdit*)Sender)->Value = ((TcxSpinEdit*)Sender)->Properties->MinValue;
  323. else if(((TcxSpinEdit*)Sender)->Value > ((TcxSpinEdit*)Sender)->Properties->MaxValue &&
  324. ((TcxSpinEdit*)Sender)->Properties->MaxValue)
  325. ((TcxSpinEdit*)Sender)->Value = ((TcxSpinEdit*)Sender)->Properties->MaxValue;
  326. }
  327. //---------------------------------------------------------------------------
  328. void __fastcall TVMSM900M::FillVmsList()
  329. {
  330. CbVms->Properties->Items->Clear();
  331. VmsCtlrManager->FLists.Lock();
  332. try
  333. {
  334. FOR_STL(TVmsCtlr*, pObj, VmsCtlrManager->FLists)
  335. {
  336. if (pObj->DEL_YN == "Y") continue;
  337. String NO = String(pObj->VMS_CTLR_NMBR);
  338. String ID = pObj->VMS_CTLR_ID;
  339. String NM = pObj->VMS_NM;
  340. CbVms->Properties->Items->Add(" [" + NO + "] (" + ID + ") " + NM);
  341. }
  342. }
  343. __finally
  344. {
  345. VmsCtlrManager->FLists.UnLock();
  346. }
  347. }
  348. //---------------------------------------------------------------------------
  349. bool __fastcall TVMSM900M::MergeInfo(String AVmsNo, String ASchTm, String ALuminance, String AUseYn)
  350. {
  351. String sQry;
  352. TADOQuery *pADO = NULL;
  353. sQry = "MERGE INTO TB_VMS_LUM_SET_SCH L \r\n"
  354. "USING (SELECT :p01 AS VMS_CTLR_NMBR, \r\n"
  355. " :p02 AS SCH_TIME, \r\n"
  356. " :p03 AS LUMINANCE, \r\n"
  357. " :p04 AS USE_YN \r\n"
  358. " FROM DUAL) M \r\n"
  359. " ON (L.VMS_CTLR_NMBR = M.VMS_CTLR_NMBR \r\n"
  360. " AND L.SCH_TIME = M.SCH_TIME) \r\n"
  361. "WHEN MATCHED \r\n"
  362. "THEN \r\n"
  363. " UPDATE SET L.LUMINANCE = M.LUMINANCE, \r\n"
  364. " L.USE_YN = M.USE_YN \r\n"
  365. "WHEN NOT MATCHED \r\n"
  366. "THEN \r\n"
  367. " INSERT (VMS_CTLR_NMBR, \r\n"
  368. " SCH_TIME, \r\n"
  369. " LUMINANCE, \r\n"
  370. " USE_YN ) \r\n"
  371. " VALUES (M.VMS_CTLR_NMBR, \r\n"
  372. " M.SCH_TIME, \r\n"
  373. " M.LUMINANCE, \r\n"
  374. " M.USE_YN ) \r\n";
  375. try
  376. {
  377. try
  378. {
  379. pADO = new TADOQuery(NULL);
  380. pADO->Close();
  381. pADO->Connection = ITSDb_GetConnection();
  382. pADO->SQL->Clear();
  383. pADO->SQL->Text = sQry;
  384. pADO->Parameters->ParamByName("p01")->Value = AVmsNo;
  385. pADO->Parameters->ParamByName("p02")->Value = ASchTm;
  386. pADO->Parameters->ParamByName("p03")->Value = ALuminance;
  387. pADO->Parameters->ParamByName("p04")->Value = AUseYn;
  388. pADO->ExecSQL();
  389. return true;
  390. }
  391. catch(EDatabaseError &E)
  392. {
  393. throw Exception(String(E.ClassName()) + E.Message);
  394. }
  395. catch(Exception &exception)
  396. {
  397. throw Exception(String(exception.ClassName()) + exception.Message);
  398. }
  399. }
  400. __finally
  401. {
  402. if (pADO)
  403. {
  404. pADO->Close();
  405. delete pADO;
  406. }
  407. }
  408. return false;
  409. }
  410. //---------------------------------------------------------------------------
  411. bool __fastcall TVMSM900M::DeleteInfo(String AVmsNo, String ASchTm)
  412. {
  413. String sQry;
  414. TADOQuery *pADO = NULL;
  415. sQry = "DELETE TB_VMS_LUM_SET_SCH \r\n"
  416. " WHERE VMS_CTLR_NMBR = :p01 \r\n"
  417. " AND SCH_TIME = :p02 \r\n";
  418. try
  419. {
  420. try
  421. {
  422. pADO = new TADOQuery(NULL);
  423. pADO->Close();
  424. pADO->Connection = ITSDb_GetConnection();
  425. pADO->SQL->Clear();
  426. pADO->SQL->Text = sQry;
  427. pADO->Parameters->ParamByName("p01")->Value = AVmsNo;
  428. pADO->Parameters->ParamByName("p02")->Value = ASchTm;
  429. pADO->ExecSQL();
  430. return true;
  431. }
  432. catch(EDatabaseError &E)
  433. {
  434. throw Exception(String(E.ClassName()) + E.Message);
  435. }
  436. catch(Exception &exception)
  437. {
  438. throw Exception(String(exception.ClassName()) + exception.Message);
  439. }
  440. }
  441. __finally
  442. {
  443. if (pADO)
  444. {
  445. pADO->Close();
  446. delete pADO;
  447. }
  448. }
  449. return false;
  450. }
  451. //---------------------------------------------------------------------------
  452. void __fastcall TVMSM900M::UpdateList()
  453. {
  454. CMM_ClearGridTableView(TvList);
  455. TcxDataController *pGDC = TvList->DataController;
  456. String sQry;
  457. TADOQuery *pADO = NULL;
  458. sQry = "SELECT A.VMS_CTLR_NMBR, A.SCH_TIME, A.LUMINANCE, A.USE_YN, \r\n"
  459. " B.VMS_CTLR_ID, B.VMS_NM \r\n"
  460. " FROM TB_VMS_LUM_SET_SCH A, \r\n"
  461. " TB_VMS_CTLR B \r\n"
  462. " WHERE A.VMS_CTLR_NMBR = B.VMS_CTLR_NMBR \r\n"
  463. " AND B.DEL_YN = 'N' \r\n";
  464. int nRowHeight = 0;
  465. try
  466. {
  467. int nRow;
  468. TvList->BeginUpdate();
  469. pGDC->BeginUpdate();
  470. try
  471. {
  472. pADO = new TADOQuery(NULL);
  473. pADO->Close();
  474. pADO->Connection = ITSDb_GetConnection();
  475. ITSDb_SQLText(pADO, sQry);
  476. ITSDb_SQLOpen(pADO);
  477. for( ; !pADO->Eof; pADO->Next())
  478. {
  479. nRow = pGDC->AppendRecord();
  480. String VmsNo = pADO->FieldByName("VMS_CTLR_NMBR")->AsString;
  481. String VmsId = pADO->FieldByName("VMS_CTLR_ID")->AsString;
  482. String VmsNm = pADO->FieldByName("VMS_NM")->AsString;
  483. String SchTm = pADO->FieldByName("SCH_TIME")->AsString;
  484. String Lumin = pADO->FieldByName("LUMINANCE")->AsString;
  485. String UseYn = pADO->FieldByName("USE_YN")->AsString;
  486. pGDC->Values[nRow][Column01->Index] = VmsNo;
  487. pGDC->Values[nRow][Column02->Index] = VmsId;
  488. pGDC->Values[nRow][Column03->Index] = VmsNm;
  489. pGDC->Values[nRow][Column04->Index] = SchTm;
  490. pGDC->Values[nRow][Column05->Index] = Lumin;
  491. if (UseYn == "Y")
  492. pGDC->Values[nRow][Column06->Index] = "사용";
  493. else
  494. pGDC->Values[nRow][Column06->Index] = "사용안함";
  495. pGDC->Values[nRow][Column07->Index] = SchTm;
  496. pGDC->Values[nRow][Column08->Index] = Lumin.ToIntDef(0);
  497. pGDC->Values[nRow][Column09->Index] = UseYn;
  498. }
  499. }
  500. catch(EDatabaseError &E)
  501. {
  502. throw Exception(String(E.ClassName()) + E.Message);
  503. }
  504. catch(Exception &e)
  505. {
  506. throw Exception(String(e.ClassName()) + e.Message);
  507. }
  508. }
  509. __finally
  510. {
  511. if (pADO)
  512. {
  513. pADO->Close();
  514. delete pADO;
  515. }
  516. pGDC->EndUpdate();
  517. TvList->EndUpdate();
  518. }
  519. CMM_ExpandCollapseChk(TvList, ChkExpand->Checked);
  520. }
  521. //---------------------------------------------------------------------------
  522. void __fastcall TVMSM900M::TvListCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo,
  523. TMouseButton AButton, TShiftState AShift,
  524. bool &AHandled)
  525. {
  526. if (!ACellViewInfo) return;
  527. int nRow = TvList->DataController->FocusedRecordIndex;
  528. if( nRow <= -1 )
  529. return;
  530. //DisplayInfo();
  531. }
  532. //---------------------------------------------------------------------------
  533. void __fastcall TVMSM900M::TvListFocusedRecordChanged(TcxCustomGridTableView *Sender,
  534. TcxCustomGridRecord *APrevFocusedRecord, TcxCustomGridRecord *AFocusedRecord,
  535. bool ANewItemRecordFocusingChanged)
  536. {
  537. if (TvList->ViewData->RecordCount <= 0) return;
  538. if (TvList->DataController->FocusedRowIndex < 0) return;
  539. TcxDataController *pGDC = TvList->DataController;
  540. int nRow = pGDC->FocusedRecordIndex;
  541. if( nRow <= -1 )
  542. return;
  543. DisplayInfo();
  544. }
  545. //---------------------------------------------------------------------------
  546. void __fastcall TVMSM900M::ChkExpandClick(TObject *Sender)
  547. {
  548. CMM_ExpandCollapseChk(TvList, ChkExpand->Checked);
  549. }
  550. //---------------------------------------------------------------------------