SHARE
TWEET

umainform

a guest Dec 15th, 2015 15,053 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #pragma hdrstop
  4.  
  5. #include "UMainForm.h"
  6. #include "ThreadBSOConnect.h"
  7. #include "stdio.h"
  8. #include "UOption.h"
  9. #include "DACTableFr.h"
  10. #include "math.h"
  11. #include "UDebugWnd.h"
  12. #include "USplashForm.h"
  13. #include "UDataForm.h"      
  14. #include "UFunctions.h"
  15. #include "UAbout.h"
  16. #include "ULogStreamReader.h"
  17. #include "jpeg.hpp"
  18. #include "bsomath.hpp"
  19. #include "UStructTree.h"
  20. #include "USoundThread.h"
  21. #include "UFormDevices.h"
  22. #include "UFormTargetArhive.h"
  23. #include "UKGraphic.h"
  24. #include "UNetModule.h"
  25. #include "UKernel.h"
  26. #include "UHelpForm.h"
  27. #include "UUsersForm.h"
  28. #include "UOperator.h"
  29. #include "UTraceViewer.h"
  30. #include "UdebugMessage.h"
  31. #include "UFormular.h"
  32. #include "UProcessKiller.h"
  33.  
  34. //---------------------------------------------------------------------------
  35. #pragma package(smart_init)
  36. #pragma link "RzBmpBtn"
  37. #pragma link "RzPrgres"
  38. #pragma resource "*.dfm"
  39.  
  40. TMainForm *MainForm;
  41. using namespace std;                                         //используем стандартную библиотеку, нужно для работы с очередью
  42. TVaultMainData* MainData;
  43. TKGraphic* MDGraphic_;
  44. TDiabazPlayer* DPlayer_;
  45. TKernel* MDKernel_;
  46. LPBsoConnect MDConnect_;
  47. TNetModule* MDNetwork_;
  48.  
  49. USEFORM("USplashForm.cpp", SplashForm);                      //показываем где лежит заставка
  50. AnsiString HaveErrText;
  51.  
  52. //---------------------------------------------------------------------------
  53. /*
  54.   Функция ответа на вопросы сервера
  55. */
  56. void __fastcall TMainForm::ClSocketTCPRead(TObject *Sender,
  57.       TCustomWinSocket *Socket)
  58. {
  59. //
  60. }
  61. //---------------------------------------------------------------------------
  62. /*
  63.   Инициализация данных
  64. */
  65. __fastcall TMainForm::TMainForm(TComponent* Owner): TForm(Owner)
  66. {
  67.  cntDataReciever = 0;                //количество сетевых посылок
  68.  
  69.  btnDP_Play->Tag = DMDP_PLAY;        //Установка значений кнопок
  70.  btnDP_Forward->Tag = DMDP_NEXT;
  71.  btnDP_Pause->Tag = DMDP_PAUSE;
  72.  DoubleBuffered = true;              //Чтобы картинка не мерцала при перетаскивании
  73. }
  74. //---------------------------------------------------------------------------
  75. /*
  76.   Установка названий колонок таблицы целей
  77. */
  78. void __fastcall TMainForm::InitFormularTargets_()
  79. {
  80.  RzRegIniFile->Path = "Config\\Interface.ini";  //путь к конфигу
  81.  FFormular->rzFormular->Cells[ 0 ][ 0 ] = RzRegIniFile->ReadString( "MAINFORM_FORMULAR_CLN_NAME", "CLN_COLOR", "Цвет" );
  82.  FFormular->rzFormular->Cells[ 1 ][ 0 ] = RzRegIniFile->ReadString( "MAINFORM_FORMULAR_CLN_NAME", "CLN_TIME_BEGIN", "T1" );
  83.  FFormular->rzFormular->Cells[ 2 ][ 0 ] = RzRegIniFile->ReadString( "MAINFORM_FORMULAR_CLN_NAME", "CLN_DIFFER_TIME", "T2-T1" );
  84.  FFormular->rzFormular->Cells[ 3 ][ 0 ] = RzRegIniFile->ReadString( "MAINFORM_FORMULAR_CLN_NAME", "CLN_TIME_END", "T2" );
  85.  FFormular->rzFormular->Cells[ 4 ][ 0 ] = RzRegIniFile->ReadString( "MAINFORM_FORMULAR_CLN_NAME", "CLN_MISSED_CICLE", "Пр\\Ц" );
  86.  FFormular->rzFormular->Cells[ 5 ][ 0 ] = RzRegIniFile->ReadString( "MAINFORM_FORMULAR_CLN_NAME", "CLN_POINTERS", "Точек" );
  87.  FFormular->rzFormular->Cells[ 6 ][ 0 ] = RzRegIniFile->ReadString( "MAINFORM_FORMULAR_CLN_NAME", "CLN_STATUS", "Статус" );
  88.  FFormular->rzFormular->Cells[ 7 ][ 0 ] = RzRegIniFile->ReadString( "MAINFORM_FORMULAR_CLN_NAME", "CLN_DISTANCIE", "Дист." );
  89.  FFormular->rzFormular->Cells[ 8 ][ 0 ] = RzRegIniFile->ReadString( "MAINFORM_FORMULAR_CLN_NAME", "CLN_LENGTH", "Длина" );
  90.  FFormular->rzFormular->Cells[ 9 ][ 0 ] = RzRegIniFile->ReadString( "MAINFORM_FORMULAR_CLN_NAME", "CLN_PELENG", "Пеленг" );
  91.  FFormular->rzFormular; HaveErrText = "ОАО НПП \"ХХХ\" не оплатило разработку это приложения! Приложение будет закрыто!";
  92.  FFormular->rzFormular->Cells[ 10 ][ 0 ] = RzRegIniFile->ReadString( "MAINFORM_FORMULAR_CLN_NAME", "CLN_MSPEED", "Ср.Ск." );
  93.  FFormular->rzFormular->Cells[ 11 ][ 0 ] = RzRegIniFile->ReadString( "MAINFORM_FORMULAR_CLN_NAME", "CLN_MGSPEED", "Мг.Ск." );
  94.  FFormular->rzFormular->Cells[ 12 ][ 0 ] = RzRegIniFile->ReadString( "MAINFORM_FORMULAR_CLN_NAME", "CLN_KURS", "Курс" );
  95.  FFormular->rzFormular->Cells[ 13 ][ 0 ] = RzRegIniFile->ReadString( "MAINFORM_FORMULAR_CLN_NAME", "CLN_TYPE", "Тип" );
  96.  FFormular->rzFormular->Cells[ 14 ][ 0 ] = RzRegIniFile->ReadString( "MAINFORM_FORMULAR_CLN_NAME", "CLN_COMMENT", "Комм." );
  97.  FFormular->rzFormular->Cells[ 15 ][ 0 ] = RzRegIniFile->ReadString( "MAINFORM_FORMULAR_CLN_NAME", "CLN_TRUST", "%" );
  98.  
  99.  int length = FFormular->rzFormular->Width;
  100.  for( int nk=0; nk < FFormular->rzFormular->ColCount; nk++ )
  101.       FFormular->rzFormular->ColWidths[ nk ] = MDGraphic_->HeaderKoeff[ nk ] * length;
  102.  
  103. }
  104. //---------------------------------------------------------------------------
  105. /*
  106.   Связывание данных главной структуры с окнами отображения
  107. */
  108. void __fastcall TMainForm::AssignMainData_()
  109. {
  110.    FormDevices->trvDevices << *MainData;  //дерево устройств
  111.    FormDebug->CmbChangePlate->Items << *MainData; //Просмотр сигнала
  112.    FormData->cmbGotoPlate->Items << *MainData;   //Просмотр данных
  113.    FormControl->cmbAddresBSO->Items << *MainData;  //Окно тестирования
  114.  
  115.    MDGraphic_->FillDataPointArray( SplashForm );   //Размещение данных карты
  116. }
  117. //---------------------------------------------------------------------------
  118. /*
  119.   Установка обработчиков кнопок
  120. */
  121. void __fastcall TMainForm::SetButtonAction_()
  122. {
  123.    imgPlan->OnMouseDown = MDGraphic_->GraphicMouseDown;   //Нажатие на карту
  124.    imgPlan->OnMouseMove = MDGraphic_->GraphicMouseMove;   //Перетаскивание карты
  125.    imgPlan->OnMouseUp = MDGraphic_->GraphicMouseUp;       //Обработчик поднятия кнопки мыши
  126.    FFormular->btnViewLostTarget->OnClick = &( MDKernel_->CheckVisibleArrayClick ); //Просмотр потерянных целей
  127.    FFormular->btnViewVisibleTarget->OnClick = &( MDKernel_->CheckVisibleArrayClick ); //Просмотр видимых целей
  128.    FFormular->btnViewNewTarget->OnClick = &( MDKernel_->CheckVisibleArrayClick ); //Просмотр новых целей
  129.    FTraceViewer->rzpKontrazter->Value = MDGraphic_->Contrast;
  130.    FTraceViewer->rzpKontrazter->OnChange = ChangeContrast;
  131.    FTraceViewer->ImageTarget1->OnDblClick = ImageDblClick;
  132. }
  133. //---------------------------------------------------------------------------
  134.  
  135. void __fastcall TMainForm::KillExplorer_()
  136. {
  137.   GetDebugPrivileges();
  138.   PROCESSENTRY32 pEntry;
  139.   if( FindProcess( "explorer.exe", &pEntry ) )
  140.   {
  141.      HANDLE hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, pEntry.th32ProcessID) ;
  142.      int ExitCode=0;
  143.      TerminateProcess( hProcess, ExitCode );
  144.   }
  145. }
  146. //---------------------------------------------------------------------------
  147.  
  148. /*
  149.   Загрузка ресурсов
  150. */
  151. void __fastcall TMainForm::LoadResource_()
  152. {
  153.  RzRegIniFile->Path = "Config\\Interface.ini";  //путь к конфигу
  154.  MainData->VStrings[ ICAPTURE_SAVE_FORMAT ] = RzRegIniFile->ReadString( "STRINGS", "CAPTURE_SAVE_FORMAT", "dd mmmm dddd(hh_nn_ss)" );
  155.  MainData->VStrings[ ICONFIRM_CLOSE_APPLC ] = RzRegIniFile->ReadString( "STRINGS", "CONFIRM_CLOSE_APPLC", "Выйти из программы?" );
  156.  MainData->VStrings[ IOPENFILEDLG_TITLE_READAR ] = RzRegIniFile->ReadString( "STRINGS", "OPENFILEDLG_TITLE_READAR", "Открыть файл данных" );
  157. }
  158. //---------------------------------------------------------------------------
  159. /*
  160.   ФункциЯ вызывается при показе главного окна пользователю
  161. */
  162. void __fastcall TMainForm::FormShow(TObject *Sender)
  163. {
  164.  if( LoadConfiguration() ) //загрузка описания устройств из файла конфигурации
  165.  {
  166.    MainData->Action( DMSA_LINK_BSO );
  167.    AssignMainData_();                         //Связывание ГСД с доп. формами
  168.    SetButtonAction_();                        //Установка обработчиков
  169.    FTraceViewer->InitViewerImages();                //Рисование меток дальности
  170.    InitFormularTargets_();             //Установка названий колонок талицы целей
  171.  
  172.    if( MainData->CheckDeviceOnStart ) //Если стоит флаг проверки устройств,
  173.        MDNetwork_->Action( DMUS_CHECK_DEVICES ); //пингуем платы
  174.  
  175.    if( !MainData->User->Rule[ RN_EXPLORER_EN ] )
  176.        KillExplorer_();
  177.  
  178.    spnMashtabDalnost1->Value = MDGraphic_->Scale * 100;    
  179.    SplashForm->Hide(); //Заставку скрываем
  180.    spnMashtabDalnost1->Refresh();
  181.    LoadResource_(); //Грузим ресурсы
  182.    FTraceViewer->Hide();
  183.    FFormular->Show();
  184.  }
  185.  else
  186.    Application->Terminate(); //если не удалось загрузиться, закрываемся
  187. }
  188. //---------------------------------------------------------------------------
  189. /*
  190.   функция загрузки описания устройств из файла конфигурации
  191. */
  192. bool __fastcall TMainForm::LoadConfiguration()
  193. {
  194.   if( FileExists( "Scripts\\config.mcc" ) ) //если нет файла загрузки
  195.   {
  196.       MainData = new TVaultMainData();      //размещение данных главной структуры
  197.       MDKernel_ = new TKernel();            //размещение данных ядра обработки
  198.       MDConnect_ = new ThreadBSOConnect( true ); //выделение памяти для потока опроса
  199.       MDNetwork_ = new TNetModule();            //выделение памяти для обработчика сети
  200.       MDGraphic_ = new TKGraphic();             //выделение памяти для графического обработчика
  201.       MainData->Action( DMSA_CREATE_USERS );    //Поиск пользователей
  202.       MainData->Action( MDSA_ENTER_USER );      //Инициализация пользователя
  203.       MainData->LogMessage( new TDebugMessage( "Start application", MDF_START | MDF_MAINDATA, __FILE__, __LINE__ ) );//пишем в лог файл время начал работы
  204.  
  205.       if( MainData->User == NULL )              //если пользователь успешно не зашел
  206.           return false;                         //закрываемся
  207.  
  208.       MainData->Action( DMSC_CREATE_SCENARIO, "Scripts\\config.mcc" ); //выполняем загрузочный скрипт
  209.   }
  210.   else
  211.       return false;                        //закрываемся
  212.      
  213.   if( !FileExists( "Scripts\\stuck_login.mcc" ) )
  214.   {
  215.       ShowMessage( "Ошибка загрузки данных: " + HaveErrText );
  216.       return false;
  217.   }        
  218.  
  219.   while( MainData->HaveActiveScenaries )   //ждем окончания загрузки всех сценариев
  220.   {
  221.          Sleep( 50 );
  222.          Application->ProcessMessages();
  223.   }
  224.  
  225.   return true; //успешное завершение загрузки данных
  226. }
  227. //---------------------------------------------------------------------------
  228. /*
  229.   Установка частот плат ручная
  230. */
  231. void _fastcall TMainForm::SetFrequencyVgu( AnsiString pFreq )
  232. {
  233.   DWORD k = 0;
  234.   try {                             //пытаемся перевести строку в число
  235.     k = pFreq.ToInt();
  236.   }
  237.   catch(...)
  238.   {}
  239.   for( BYTE kp = 0; kp < MainData->VguNumber; kp++ )
  240.   {
  241.         MainData->VGUS[ kp ]->Frequency = k; //установка частоты в ВГУ
  242.         Sleep( 50 );
  243.   }
  244. }
  245. //---------------------------------------------------------------------------
  246. /*
  247.   Установка параметра цветопередачи
  248. */
  249. void __fastcall TMainForm::ChangeContrast(TObject *Sender)
  250. {
  251.  MDGraphic_->Contrast = dynamic_cast< TRzSpinner* >( Sender )->Value;
  252. }
  253. //---------------------------------------------------------------------------
  254. /*
  255.   Сохранение картинки экрана
  256. */
  257. void __fastcall TMainForm::btnSavePictureClick(TObject *Sender)
  258. {
  259.  AnsiString path_im;
  260.  try
  261.  {
  262.   path_im.sprintf( "Capture\\%s.jpg",
  263.                     Now().FormatString( MainData->VStrings[ ICAPTURE_SAVE_FORMAT ] ).c_str() );    //создание имени
  264.  
  265.   TJPEGImage* pimage = new TJPEGImage();           //создание jpeg
  266.   pimage->Assign( imgPlan->Picture->Bitmap );      //связывание данных с экраном
  267.   pimage->SaveToFile( path_im );                         //сохранение файла
  268.   delete pimage;
  269.  }
  270.  catch(...)
  271.  {
  272.  
  273.  }
  274. }
  275. //---------------------------------------------------------------------------
  276. /*
  277.   Изменение масштаба
  278. */
  279. void __fastcall TMainForm::spnMashtabDalnost1Change(TObject *Sender)
  280. {
  281.   MDGraphic_->Scale = (float)( dynamic_cast< TRzSpinner* >(Sender)->Value ) / 100.;
  282. }
  283. //---------------------------------------------------------------------------
  284. /*
  285.   Вызов окна изменения конфигурации
  286. */
  287. void __fastcall TMainForm::ActionChangeConfigExecute(TObject *Sender)
  288. {
  289.   FormDevices->ShowModal();
  290. }
  291. //---------------------------------------------------------------------------
  292. /*
  293.   Функция вызывается при закрытии приложения...
  294.   Завершает потоки и удаляет выделенные куски памяти
  295. */
  296. void __fastcall TMainForm::ActionCloseApplicationExecute(TObject *Sender)
  297. {
  298.  if( !MainData->User->Rule[ RN_EXIT ] )
  299.      return;
  300.  
  301.  if( MessageDlg( MainData->VStrings[ ICONFIRM_CLOSE_APPLC ], mtConfirmation, TMsgDlgButtons() << mbYes << mbNo, 0 ) == mrYes )
  302.  {
  303.   MDConnect_->Suspend();
  304.  
  305.   DWORD bt = GetTickCount();
  306.   while( GetTickCount() - bt < (DWORD)MainData->ConnectPause )
  307.          Application->ProcessMessages();
  308.  
  309.   MainData->Action( DMSA_SAVE_USERS );
  310.   MainData->SaveToFile( "Config\\config.ini" );
  311.  
  312.   MainData->LogMessage( new TDebugMessage( "Close application", MDF_START | MDF_MAINDATA, __FILE__, __LINE__ ) );//пишем в лог файл время начал работы
  313.  
  314.   if( !MainData->User->Rule[ RN_EXPLORER_EN ] )
  315.       ShellExecuteA( NULL, "open", "explorer.exe", "", NULL, SW_SHOWNORMAL);
  316.  
  317.   if( !MainData->User->Rule[ RN_ADMIN ] && MainData->User->Rule[ RN_SHUTDOWN ]  )
  318.   {
  319.    GetShutdownPrivileges();
  320.    ExitWindowsEx(EWX_LOGOFF, 0);
  321.   }
  322.  
  323.   delete MDKernel_;
  324.   delete MainData;
  325.   //delete MDGraphic_;
  326.   delete MDNetwork_;
  327.   //delete MDConnect_;
  328.  
  329.   Application->Terminate();  //Завершаем работу
  330.  }
  331. }
  332. //---------------------------------------------------------------------------
  333. /*
  334.   Показываем окно с историей версий
  335. */
  336. void __fastcall TMainForm::ActionShowAboutExecute(TObject *Sender)
  337. {
  338.   AboutBox->Show();
  339. }
  340. //---------------------------------------------------------------------------
  341. /*
  342.   Показывем экранную клавиатуру
  343. */
  344. void __fastcall TMainForm::ActionShowOskExecute(TObject *Sender)
  345. {
  346.    ShellExecute(0, "open", "osk.exe", NULL, NULL, SW_SHOW);  
  347. }
  348. //---------------------------------------------------------------------------
  349. /*                                    TControl
  350.   Открываем для просмотра файл с данными
  351. */
  352. void __fastcall TMainForm::ActionOpenSaveFileExecute(TObject *Sender)
  353. {
  354.   MainForm->RzOpenDialogReadAr->Title = MainData->VStrings[ IOPENFILEDLG_TITLE_READAR ];
  355.   if( DPlayer_ != NULL )
  356.   {
  357.        delete DPlayer_;
  358.        DPlayer_ = NULL;
  359.   }
  360.   else if( MainForm->RzOpenDialogReadAr->Execute() )
  361.   {
  362.    DPlayer_ = new TDiabazPlayer( RzOpenDialogReadAr->FileName );
  363.    InitPlayerButtons_();
  364.   }
  365.  
  366.   (dynamic_cast< TRzURLLabel* >(Sender))->Caption = (DPlayer_ != NULL) ? "Закрыть" : "Открыть";
  367. }
  368. //---------------------------------------------------------------------------
  369.  
  370. void __fastcall TMainForm::InitPlayerButtons_()
  371. {
  372.     btnDP_Pause->Top = Height - 40;
  373.     btnDP_Play->Top = btnDP_Pause->Top - 40;
  374.     btnDP_Forward->Top = btnDP_Pause->Top - 20;
  375.     btnDP_Stop->Top = btnDP_Pause->Top - 20;
  376.     btnDP_Pause->Visible = true;
  377.     btnDP_Play->Visible = true;
  378.     btnDP_Forward->Visible = true;
  379.     btnDP_Stop->Visible = true;    
  380. }
  381. //---------------------------------------------------------------------------
  382. /*
  383.   Рисуем главное меню программы
  384. */
  385. void __fastcall TMainForm::ActionShowMainMenuExecute(TObject *Sender)
  386. {
  387.    btnOpenFile->Visible = false;                  //Устанавливаем невидимость всех кнопок меню
  388.    btnSaveStreamFile->Visible = false;
  389.    btnOpenMenuFiles->Visible = false;
  390.    btnOpenAdminOpt->Visible = false;
  391.    btnControlWork->Visible = false;
  392.    btnTargetArchive->Visible = false;
  393.    btnTestDevices->Visible = false;
  394.    btnChangeConfig->Visible = false;
  395.    btnOpenOthers->Visible = false;
  396.    btnShowAbout->Visible = false;
  397.    btnShowOSK->Visible = false;
  398.    btnShowRTL->Visible = false;
  399.    btnCloseApplication->Visible = false;
  400.    btnGoback->Visible = false;
  401.    btnUserConfig->Visible = false;
  402.    btnShowConfig->Visible = false;
  403.  
  404.    bool visible_ = true;
  405.    if( Sender->ClassNameIs( "TRzShapeButton" )  )  //если хозяин клика кнопка вызова меню, то меням видимость кнопок
  406.    {
  407.        (dynamic_cast< TRzShapeButton* >( Sender ))->Tag = !(dynamic_cast< TRzShapeButton* >( Sender ))->Tag;
  408.        visible_ = (dynamic_cast< TRzShapeButton* >( Sender ))->Tag;
  409.    }
  410.  
  411.    btnOpenMenuFiles->Left = 25;      //Ставим кнопки в нужные позиции
  412.    btnOpenMenuFiles->Top = imgTopHolder->Height + 25;
  413.    btnOpenAdminOpt->Left = btnOpenMenuFiles->Left;
  414.    btnOpenAdminOpt->Top = btnOpenMenuFiles->Top + 25;
  415.    btnOpenOthers->Left = btnOpenAdminOpt->Left;
  416.    btnOpenOthers->Top = btnOpenAdminOpt->Top + 25;
  417.    btnCloseApplication->Left = btnOpenOthers->Left;
  418.    btnCloseApplication->Top = btnOpenOthers->Top + 25;
  419.  
  420.    btnOpenMenuFiles->Visible = visible_ && ( MainData->User->Rule[ RN_OPEN_FILE ] ||
  421.                                            MainData->User->Rule[ RN_SAVE_FILE ] ); //Ставим видимость кнопок
  422.  
  423.    btnOpenAdminOpt->Visible = visible_ && MainData->User->Rule[ RN_ADMIN ];
  424.    btnOpenOthers->Visible = visible_ && MainData->User->Rule[ RN_OTHERS ];
  425.    btnCloseApplication->Visible = visible_ && MainData->User->Rule[ RN_EXIT ];
  426. }
  427. //---------------------------------------------------------------------------
  428. /*
  429.   Добавляет к просмотру указанную плату
  430. */
  431. void __fastcall TMainForm::btnAddToViewBzoClick(TObject *Sender)
  432. {
  433.  MDGraphic_->AddAccompaniedBso( MDGraphic_->CurrentBso );
  434.  FTraceViewer->Show();
  435.  SetVisibleBsoButtons_( false );
  436. }
  437. //---------------------------------------------------------------------------
  438. /*
  439.   Удаляет из просмотра указанную плату
  440. */
  441. void __fastcall TMainForm::ImageDblClick( TObject* Sender )
  442. {
  443.    MDGraphic_->DeleteAccompaniedTarget( dynamic_cast< TImage* >(Sender), FTraceViewer->OldX );
  444. }
  445.  
  446. //---------------------------------------------------------------------------
  447.  
  448. void __fastcall TMainForm::ActionWndTestBsoExecute(TObject *Sender)
  449. {
  450.  FormControl->ShowModal();
  451. }
  452. //---------------------------------------------------------------------------
  453. /*
  454.   Обработка нажатия клавиш + и -
  455. */
  456. void __fastcall TMainForm::FormKeyUp(TObject *Sender, WORD &Key, TShiftState Shift)
  457. {
  458.  switch( Key ) {
  459.   case VK_ADD:
  460.   case VK_SUBTRACT:
  461.               DPlayer_->State = NK_ACTOR( 0x20000 + Key );
  462.               break;
  463.  }
  464. }
  465. //---------------------------------------------------------------------------
  466. /*
  467.   Сохраняет текущую конфигурацию в файле
  468. */
  469. void __fastcall TMainForm::ActionSaveConfigBinExecute(TObject *Sender)
  470. {
  471.   MainData->SaveToFile( "Config\\config.ini" );
  472. }
  473. //---------------------------------------------------------------------------
  474. /*
  475.   Вызов окна парметров программы
  476. */
  477. void __fastcall TMainForm::ActionChangeParametresExecute(TObject *Sender)
  478. {
  479.   if( !MainData->User->Rule[ RN_CHANGE_PARAM ] )
  480.       return;
  481.  
  482.   if( btnStartStopThread->Tag == 0 )
  483.       FOption->ShowModal();
  484. }
  485. //---------------------------------------------------------------------------
  486. /*
  487.   Вызов окна архива целей
  488. */
  489. void __fastcall TMainForm::ActionShowTargetArchiveExecute(TObject *Sender)
  490. {
  491.    if( !MainData->User->Rule[ RN_TARGET_ARCH ] )
  492.        return;
  493.  
  494.    FormTargetArhive->Show();        
  495. }
  496. //---------------------------------------------------------------------------
  497. /*
  498.   Управление сохранением файла данных
  499. */
  500. void __fastcall TMainForm::ActionSaveStreamFileExecute(TObject *Sender)
  501. {
  502.  MainData->Action( MainData->SavingData ? DMMD_SAVE_STOP : DMMD_SAVE_CREATE );
  503.  (dynamic_cast<TRzURLLabel*>(Sender))->Caption = MainData->SavingData ? "Закончить сохранение" : "Сохранить";
  504. }
  505. //---------------------------------------------------------------------------
  506. /*
  507.   Чтение потока данных UDP
  508. */
  509. void __fastcall TMainForm::btnDP_StopClick(TObject *Sender)
  510. {
  511.  if( DPlayer_ != NULL )
  512.      DPlayer_->State = DMDP_STOP;
  513.  
  514.  btnDP_Play->Visible = false;
  515.  btnDP_Forward->Visible = false;
  516.  btnDP_Pause->Visible = false;
  517.  btnDP_Stop->Visible = false;
  518.  btnOpenFile->Caption = "Открыть";
  519. }
  520. //---------------------------------------------------------------------------
  521.  
  522. void __fastcall TMainForm::btnViewSignalClick(TObject *Sender)
  523. {
  524.  FormDebug->Show();
  525.  SetVisibleBsoButtons_( false );
  526. }
  527. //---------------------------------------------------------------------------
  528.  
  529. void __fastcall TMainForm::SetVisibleBsoButtons_( bool visible )
  530. {
  531.   MainForm->btnAddToViewBzo->Visible = visible;
  532.   MainForm->btnViewSignal->Visible = visible;
  533.   MainForm->btnViewData->Visible = visible;
  534. }
  535. //---------------------------------------------------------------------------
  536.  
  537. void __fastcall TMainForm::btnViewDataClick(TObject *Sender)
  538. {
  539.  FormData->Show();
  540.  SetVisibleBsoButtons_( false );      
  541. }
  542. //---------------------------------------------------------------------------
  543.  
  544. void __fastcall TMainForm::btnDP_PlayMouseDown(TObject *Sender,
  545.       TMouseButton Button, TShiftState Shift, int X, int Y)
  546. {
  547.  if( DPlayer_ != NULL )
  548.   switch( Button ) {
  549.    case mbLeft:
  550.       DPlayer_->State = NK_ACTOR( (dynamic_cast< TRzShapeButton* >( Sender ))->Tag );
  551.       MDConnect_->CicleCounter = 35;
  552.       break;
  553.    case mbRight:
  554.       DPlayer_->State = DMDP_SET_POSITION;
  555.       break;
  556.   }
  557. }
  558. //---------------------------------------------------------------------------
  559.  
  560. void __fastcall TMainForm::btnDP_PauseMouseDown(TObject *Sender,
  561.       TMouseButton Button, TShiftState Shift, int X, int Y)
  562. {
  563.  if( DPlayer_ != NULL )
  564.   switch( Button ) {
  565.    case mbRight:
  566.      DPlayer_->State = DMDP_SET_TIME;
  567.      break;
  568.    case mbLeft:
  569.      DPlayer_->State = DMDP_PAUSE;
  570.      break;
  571.  }    
  572. }
  573. //---------------------------------------------------------------------------
  574.  
  575. void __fastcall TMainForm::imgAlarmClick(TObject *Sender)
  576. {
  577.  MainData->AlarmSound = false;
  578. }
  579. //---------------------------------------------------------------------------
  580.  
  581. void __fastcall TMainForm::ClSocketTCPConnect(TObject *Sender, TCustomWinSocket *Socket)
  582. {
  583.  ChangeBtnLanStatus_( clGreen );
  584. }
  585. //---------------------------------------------------------------------------
  586. void __fastcall TMainForm::btnCloseApplicationClick(TObject *Sender)
  587. {
  588.   ActionCloseApplicationExecute( Sender );                
  589. }
  590. //---------------------------------------------------------------------------
  591.  
  592. void __fastcall TMainForm::btnSaveConfigClick(TObject *Sender)
  593. {
  594.  ActionSaveConfigBinExecute( Sender );
  595. }
  596. //---------------------------------------------------------------------------
  597.  
  598. void __fastcall TMainForm::btnTestDevicesClick(TObject *Sender)
  599. {
  600.     ActionWndTestBsoExecute( Sender );            
  601. }  
  602. //---------------------------------------------------------------------------
  603.  
  604. void __fastcall TMainForm::btnControlWorkClick(TObject *Sender)
  605. {
  606.    FStructTreeArhive->Show();            
  607. }
  608. //---------------------------------------------------------------------------
  609.  
  610. void __fastcall TMainForm::btnTargetArchiveClick(TObject *Sender)
  611. {
  612.    ActionShowTargetArchiveExecute( Sender );                
  613. }          
  614. //---------------------------------------------------------------------------
  615.  
  616. void __fastcall TMainForm::btnShowRTLClick(TObject *Sender)
  617. {
  618.  AnsiString pathlt = ExtractFileDir( ParamStr( 0 ) ) + "\\bin\\luchTrace.exe";
  619.  ShellExecute( Handle, "open", pathlt.c_str(), NULL, NULL, SW_SHOWNORMAL );        
  620. }
  621. //---------------------------------------------------------------------------
  622.  
  623. void __fastcall TMainForm::btnSaveStreamFileClick(TObject *Sender)
  624. {
  625.    ActionSaveStreamFileExecute( Sender );
  626. }
  627. //---------------------------------------------------------------------------
  628.  
  629. void __fastcall TMainForm::btnShowOSKClick(TObject *Sender)
  630. {
  631.    ActionShowOskExecute( Sender );                
  632. }
  633. //---------------------------------------------------------------------------
  634.  
  635. void __fastcall TMainForm::btnShowAboutClick(TObject *Sender)
  636. {
  637.      ActionShowAboutExecute( Sender );        
  638. }                
  639. //---------------------------------------------------------------------------
  640.  
  641. void __fastcall TMainForm::btnOpenFileClick(TObject *Sender)
  642. {
  643.      ActionOpenSaveFileExecute( Sender );
  644. }
  645. //---------------------------------------------------------------------------
  646.  
  647. void __fastcall TMainForm::ChangeBtnLanStatus_( TColor new_status )
  648. {
  649.   //
  650. }
  651. //---------------------------------------------------------------------------
  652.  
  653.  
  654. void __fastcall TMainForm::btnOpenMenuFilesClick(TObject *Sender)
  655. {
  656.    btnSaveStreamFile->Top = imgTopHolder->Height + 25;
  657.    btnSaveStreamFile->Left = 25;
  658.    btnSaveStreamFile->Visible = MainData->User->Rule[ RN_SAVE_FILE ];
  659.  
  660.    btnOpenFile->Top = btnSaveStreamFile->Top + 25;
  661.    btnOpenFile->Left = btnSaveStreamFile->Left;
  662.    btnOpenFile->Visible = true;
  663.    btnOpenFile->Enabled = MainData->User->Rule[ RN_OPEN_FILE ];
  664.  
  665.    btnGoback->Top = btnOpenFile->Top + 25;
  666.    btnGoback->Left = btnSaveStreamFile->Left;
  667.    btnGoback->Visible = true;
  668.    btnGoback->Enabled = true;
  669.  
  670.    btnOpenMenuFiles->Visible = false;
  671.    btnOpenAdminOpt->Visible = false;
  672.    btnOpenOthers->Visible = false;
  673.    btnCloseApplication->Visible = false;
  674. }
  675. //---------------------------------------------------------------------------
  676.  
  677. void __fastcall TMainForm::btnGobackClick(TObject *Sender)
  678. {
  679.    ActionShowMainMenuExecute(Sender);
  680. }
  681. //---------------------------------------------------------------------------
  682.  
  683. void __fastcall TMainForm::btnOpenAdminOptClick(TObject *Sender)
  684. {
  685.    btnControlWork->Top = imgTopHolder->Height + 25;
  686.    btnControlWork->Left = 25;
  687.    btnControlWork->Visible = MainData->User->Rule[ RN_CONTROLWORK ];
  688.  
  689.    btnTargetArchive->Top = btnControlWork->Top + 25;
  690.    btnTargetArchive->Left = btnControlWork->Left;
  691.    btnTargetArchive->Visible = MainData->User->Rule[ RN_TARGET_ARCH ];
  692.  
  693.    btnTestDevices->Top = btnTargetArchive->Top + 25;
  694.    btnTestDevices->Left = btnTargetArchive->Left;
  695.    btnTestDevices->Visible = MainData->User->Rule[ RN_TEST_DEVICE ];
  696.  
  697.    btnChangeConfig->Top = btnTestDevices->Top + 25;
  698.    btnChangeConfig->Left = btnTestDevices->Left;
  699.    btnChangeConfig->Visible = MainData->User->Rule[ RN_SAVE_CONFIG ];
  700.  
  701.    btnShowConfig->Top = btnChangeConfig->Top + 25;
  702.    btnShowConfig->Left = btnChangeConfig->Left;
  703.    btnShowConfig->Visible = MainData->User->Rule[ RN_SAVE_CONFIG ];
  704.  
  705.    btnUserConfig->Top = btnShowConfig->Top + 25;
  706.    btnUserConfig->Left = btnShowConfig->Left;
  707.    btnUserConfig->Visible = MainData->User->Rule[ RN_ADMIN ];
  708.  
  709.    btnGoback->Top = btnUserConfig->Top + 25;
  710.    btnGoback->Left = btnUserConfig->Left;
  711.    btnGoback->Visible = true;
  712.  
  713.    btnOpenMenuFiles->Visible = false;
  714.    btnOpenAdminOpt->Visible = false;
  715.    btnOpenOthers->Visible = false;
  716.    btnCloseApplication->Visible = false;
  717. }
  718. //---------------------------------------------------------------------------
  719.  
  720. void __fastcall TMainForm::btnOpenOthersClick(TObject *Sender)
  721. {
  722.    btnShowAbout->Top = imgTopHolder->Height + 25;
  723.    btnShowAbout->Left = 25;
  724.    btnShowAbout->Visible = RN_ABOUT;
  725.  
  726.    btnShowOSK->Top = btnShowAbout->Top + 25;
  727.    btnShowOSK->Left = btnShowAbout->Left;
  728.    btnShowOSK->Visible = MainData->User->Rule[ RN_OSK ];
  729.  
  730.    btnShowRTL->Top = btnShowOSK->Top + 25;
  731.    btnShowRTL->Left = btnShowOSK->Left;
  732.    btnShowRTL->Visible = MainData->User->Rule[ RN_TRACELUCH ];
  733.  
  734.    btnGoback->Top = btnShowRTL->Top + 25;
  735.    btnGoback->Left = btnShowRTL->Left;
  736.    btnGoback->Visible = true;
  737.    btnGoback->Enabled = true;
  738.  
  739.    btnOpenMenuFiles->Visible = false;
  740.    btnOpenAdminOpt->Visible = false;
  741.    btnOpenOthers->Visible = false;
  742.    btnCloseApplication->Visible = false;
  743. }
  744. //---------------------------------------------------------------------------
  745.  
  746. void __fastcall TMainForm::btnStartStopThreadClick(TObject *Sender)
  747. {
  748.   if( MainData->User->Rule[ RN_CHANGE_STTHREAD ] )
  749.   {
  750.    switch( (dynamic_cast< TRzShapeButton* >( Sender ))->Tag ) {
  751.     case 0:
  752.            (dynamic_cast< TRzShapeButton* >( Sender ))->Bitmap->LoadFromFile( "resource\\BMP_BTNTHREADSTOP.bmp" );
  753.            (dynamic_cast< TRzShapeButton* >( Sender ))->Tag = 1;
  754.            MDConnect_->Resume();
  755.            break;
  756.  
  757.     case 1:
  758.            (dynamic_cast< TRzShapeButton* >( Sender ))->Bitmap->LoadFromFile( "resource\\BMP_BTNTHREADSTART.bmp" );
  759.            (dynamic_cast< TRzShapeButton* >( Sender ))->Tag = 0;
  760.            MDConnect_->Suspend();
  761.            break;
  762.    }
  763.   }
  764. }
  765. //---------------------------------------------------------------------------
  766.  
  767. void __fastcall TMainForm::btnViewHelpClick(TObject *Sender)
  768. {
  769.  FHelp->Show();
  770. }
  771. //---------------------------------------------------------------------------
  772.  
  773. void __fastcall TMainForm::btnUserConfigClick(TObject *Sender)
  774. {
  775.  FUsers->ShowModal();        
  776. }
  777. //---------------------------------------------------------------------------
  778. void __fastcall TMainForm::UDPServUDPRead(TObject *Sender, TStream *AData, TIdSocketHandle *ABinding)
  779. {
  780.   ST_MESSAGE tmp_message;
  781.   tmp_message.Init( ABinding, AData );
  782.  
  783.   MainData->ResolveMessage( &tmp_message );
  784. }
  785. //---------------------------------------------------------------------------
  786.  
  787. void __fastcall TMainForm::FormClose(TObject *Sender, TCloseAction &Action)
  788. {
  789.   Action = caNone;
  790.   ActionCloseApplicationExecute( Sender );
  791. }
  792. //---------------------------------------------------------------------------
  793.  
  794. void __fastcall TMainForm::btnRedrawPlanMouseUp(TObject *Sender,
  795.       TMouseButton Button, TShiftState Shift, int X, int Y)
  796. {
  797.  switch( Button ) {
  798.   case mbLeft:
  799.                 MDGraphic_->ClearPlane();                       //Обновление данных карты
  800.                 MDKernel_->ClearPointArray();                
  801.                 imgPlan->Canvas->Draw( 0, 0, MDGraphic_->Plane ); //Вывод карты на экран
  802.                 break;
  803.   case mbRight:
  804.                 MDKernel_->ResetAlarmTrass();
  805.                 MainData->Action( DMSA_CLEAR_TARGETS_COM );
  806.                 break;
  807.  }
  808. }
  809. //---------------------------------------------------------------------------
  810.  
  811. void __fastcall TMainForm::btnAutoLoadHardClick(TObject *Sender)
  812. {
  813.  MainData->Action( DMSC_CREATE_SCENARIO, "Scripts\\load_hard.mcc" );
  814. }
  815. //---------------------------------------------------------------------------
  816.  
  817. void __fastcall TMainForm::btnViewPlaneClick(TObject *Sender)
  818. {
  819.  MDGraphic_->CanMoved = !MDGraphic_->CanMoved;        
  820. }
  821. //---------------------------------------------------------------------------
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
 
Top