//---------------------------------------------------------------------------

#ifndef SelectProfilSectH
#define SelectProfilSectH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Buttons.hpp>
#include <Grids.hpp>
#include <ComCtrls.hpp>
#include <ExtCtrls.hpp>
#include <jpeg.hpp>
#include <Menus.hpp>
#include <ImgList.hpp>
#include <ToolWin.hpp>
#include <CheckLst.hpp>
//#include "Sect_Param.h"
#include <Dialogs.hpp>
//#include "SectCom_Param.h"
#include "SectSelectCom_Param.h"
#include <Graphics.hpp>
#include <System.ImageList.hpp>
#include "SectSelectCom_Param.h"
#include "SHDocVw_OCX.h"
#include <Vcl.OleCtrls.hpp>
#include "Sect_Param_Weld.h"
#include "Dvutavr_Choice_Alg.h"
#include "Draw_RSU_F.h"
#include "BalkaLoad.h"
#include "Weld_Param.h"
#include "RackLoad.h"



#define UNTITLED "Untitled"
#define PATHLEN  1000
#define FUNC_2019     5

#define CENTR_TENSION       0
#define CENTR_COMPRESSION   1
#define COMPRESSION_BENDING 2
#define BENDING             3
#define TENSION_BENDING     4

#define NUMBER_CHECK       5   // Количество проверок

#define DVUTAVR_STAND      0
#define TRUBA              1
#define DVUTAVR_WELD       2
#define PERFOR_BEAM        3
#define COMPOSED_BEAM      4

#define L_PERFOR  {6,  9,  12,  15,  18,  21}
#define T_PERFOR  {5,  8,  10,  12,  14,  16}

#define G1_NULL 0
#define G1_TWO_MORE 1
#define G1_ONE 2

#define MAX_TEMP_FILE  100

#define TAVR_PLATE_DOWN      0
#define TAVR_PLATE_UP        1
#define DVUTAVR_PLATE_DOWN   2



typedef struct _param_data_select {  // параметры подбора сечений
		int N_plane; // Количество элементов
		int N_dummy;
		int N_RSU[100];   // Количество РСУ на участках
		double gamma_c;
		double Length[100];
		double length_XZ[100]; // В плоскости стенки
		double length_XY[100]; // В плоскости поясов
		double koeff_length_XZ[100]; // В плоскости стенки
		double koeff_length_XY[100]; // В плоскости поясов
		double RSU[100][50][5];
		double q_bal[100][50];    // распределенная нагрузка qy
		double step_comp[100];    // Шаг раскрепления сжатого пояса
		double Strela;            // Строительный подъем
		double Delta_lim;         // относительный предельный прогиб
		double Step_edge;         // шаг ребер
		double perfor_attit;      // степень развития прокатного профиля
		double perfor_alfa;       // угол перфорации
		int index_Qy;
		int index_constr;         // 0 - балка; 1 - консоль; 2 - стойка
		int index_weld_param;
		int index_vid_svarki;
		int N_check_weld;
		int index_GOST_or_TU;   // typeGOST_G57837_B - ГОСТ; typeTU_U - ТУ
		int    index_TAVR_GOST_or_TU;
		int    index_same_material;  // 0 - одинаковый материал; 1 - различный материал
		double dum3[36];
		double Izz_RSU;         // момент инерции профиля, для которой были получены РСУ
		double FRo_RSU;             // погонная масса профиля, для которой были получены РСУ
		double X_sect[100][50];   // X сечений для РСУ
		double RSU_W[50][5];      // РСУ от собственного веса для погонной массы FRo_W
		double step_up;         // Шаг раскрепления верхнего пояса балки
		double step_down;       // Шаг раскрепления нижнего пояса балки или сжатого пояса
		int index_G1_count;     // индекс первого столбца табл. Ж1
		int index_G1_load;      // индекс второго столбца табл. Ж1
		double MaxV0;
		double MaxV;
		double MaxV_W;
		double Span;
		int   index_1_or_2;     // -1 - не подбирать ребра; 0 - односторонние; 2 - двусторонние
		int   index_composed;   // 0 - тавр с пластиной внизу; 1 - тавр с листом вверху; 2 - двутавр с листом
		double plate_thick;
		double plate_width;
		double kf_comp;
		double Rwf;             // Допускаемое напряжение в сварном шве
		double q_down_max;      // максимальная распределенная нагрузка в комбинации, приложенная к нижнему поясу балки
		double q_down_LR_max;   // максимальная распределенная нагрузка в комбинации от сил с плечом, приложенная к нижнему поясу балки
		double M_down_LR_max;   // максимальный момент от распределенной нагрузки на плече width - dist
		int    index_loads;     // 0 - задание в форме РСУ; 1 - из расчетной модели балки; 2 - из расчетной модели стойки;
		int    index_dum;
		int index_GOST_plate;   // Для сварных двутавров: 0 - материал по ГОСТ 27772,   1 - материал по СП 16.13330-2017
		char title_material_plate[8];       // Название материала пластины/стенки
		MATER  MaterProp_prof;
		MATER  MaterProp_plate;
		double dum1[20013];
		double dum2[66][25][2];
		int dum_int;
		int index_otvetstv;     // Уровень ответственности 0 - повышенный, 1 - нормальный, 2 - пониженный (табл. 2 ГОСТ 27751)
		int index_GOST;         // Для прокатных двутавров: 0 - материал по ГОСТ 27772, 1 - материал по ГОСТ Р 57, 2 - материал по СП
								// Для сварных двутавров: 0 - материал по ГОСТ 27772,   1 - материал по СП 16.13330-2017
		int index_edge;         // 1 - ребра жесткости устанавливаются; 0 - не устанавливаются
		int index_razrez;       // 1 - разрезная балка; 0 - неразрезная балка
		double Krn;    // Коэффициент перехода от расчетной к нормативной нагрузке
		short dum_short[100][100];
		double Limit_lambda1;
		double Limit_lambda2;
		double Limit_lambda_plus;
		double max_width;  // максимальная ширина полки двутавра или размер по X трубы, или диаметр
		double max_height;  // максимальная высота стенки или размер по Y трубы
		int N_check[6];       // Количество проверок каждого типа
		int form_profil;   // 0 - двутавр, 1 - труба, 2 - сварное сечение, 3 - перфорированное сечение, 4 - составная балка
		int type_profil;     // тип трубы: typeSQUARE | typeRECT | typeCIRC  или двутавра
		int index_profil;  // индекс профиля двутавра или тавра - индекс сортамента (балочный, широкополочный и.т.п
		int index_type;    // Тип конструктивного элемента (вид нагружения)
		int index_group;   // Группа конструкций (не используется)
		short index_class;
		char title_material[10];       // Название материала
		double Ry;                 // Нормативные сопротивления для толщины от t_cur
		double Run;
		double t0;
		double t1;
		double gamma_m;  // Коэффициент надежности по материалу
		double gamma_n;  // Коэффициент надежности по ответственности
		bool   flag_add_limit;
} DATA_SELECT;

typedef struct _param_data_beam {  // параметры балки
	int n_zagr; // число загружений
	double Length_beam;
	int Len_v;               // текущай размер депозитария
	int constr_length;      // Количество точек задания закреплений
	int n_comb;
	double  Len_XY;
	double  Step_up;
	double Step_down;
	double dummy[9];
} DATA_BEAM;

typedef struct _param_data_rack {  // параметры стойки
	int n_zagr; // число загружений
	double Length_rack;
	int Len_v;               // текущай размер депозитария
	int constr_length;      // Количество точек задания закреплений
	int n_comb;
	int     N_part;
	double  Length_part[MAX_BEAM_DATA]; // Длины участков
	double  Koeff_length_XZ[MAX_BEAM_DATA]; // Коэффициенты расчетной длины участков
	double  Koeff_length_XY[MAX_BEAM_DATA]; // Коэффициенты расчетной длины участков
	int     index_raskr;
	double  Step_comp_rack;
	int     index_TY_up;
	double  dummy[7];
} DATA_RACK;

typedef struct _param_data_region {  // параметры балки
	// Депозитарий
	BeamRegion* EI_v;  // Регионы поперечной жесткости
	BeamRegion* q_v;  // Регионы погонной поперечной нагрузки
	BeamRegion* N_v;  // Регионы эпюры продольных сил
	Load*    loads_v;         // Точки задания сосредоточенных нагрузок
	int  *index_place_v;  // место приложения поперечной нагрузки 0 - верхний пояс; 1 - ось нижнего пояса; 2 - слева от оси внизу; 3 - справа от оси внизу
	double  *dist_LRv;     // дистанция приложения нагрузки (от оси)
	Constraint* constr;     // Точки задания связей (опор)
	int *type_zagr;  // массив типов загружения
	bool *flag_weight;  // флаг загружения Собственный вес
	double *Koeff_gamma_f;  // Коэффициенты надежности
	double *Koeff_low;  // Понижающий коэффициент
	int  *index_beam; // начало регионов загружения в депозитарии
	double **Combin_zagr;
	double  *dist_eLv;     // эксцентриситеты сосредоточенных нагрузок (от оси)
	double  *dist_eNv;     // эксцентриситеты распределенных продольных нагрузок (от оси)
	double *dummy[8];
} DATA_REGION;

void Point_square(TPoint *vertices, double zero, double zero1, double s_c, double r_c, double r2_c);
void Point_rect(TPoint *vertices, double zero, double zero1, double h_c, double b_c, double r_c, double r2_c);


//---------------------------------------------------------------------------
class TSelectProfilSectForm : public TForm
{
__published:	// IDE-managed Components
		TBitBtn *BitBtnExit;
		TBitBtn *BitBtnExec;
        TGroupBox *GroupBoxComb;
		TRichEdit *RichEditOut;
        TMainMenu *MainMenu1;
        TMenuItem *NFile;
        TMenuItem *NSaveAs;
        TMenuItem *NOpen;
        TMenuItem *NSave;
        TMenuItem *NRef;
		TMenuItem *NRefProg;
        TImageList *ImageList1;
		TToolBar *ToolBar1;
        TToolButton *ToolButtonSave;
        TToolButton *ToolButtonSaveAs;
        TToolButton *ToolButtonOutReport;
        TToolButton *ToolButtonOpen;
        TOpenDialog *OpenDialog_Model;
        TSaveDialog *SaveDialog_Model;
        TBitBtn *BitBtnCheck;
	TMenuItem *NPreferences;
	TLabel *Label6;
	TLabel *Label8;
	TMenuItem *NNew;
	TToolButton *ToolButtonNew;
	TBitBtn *BitBtn_OutWord;
	TMenuItem *NHelpCapt;
	TMenuItem *N1;
	TPageControl *PageControl_Data;
	TTabSheet *TabSheet_Common;
	TLabel *Label_plane;
	TGroupBox *GroupBox2;
	TRadioButton *RadioButton_Dvutavr;
	TRadioButton *RadioButton_Tube;
	TComboBox *ComboBox_Tube;
	TRadioButton *RadioButton_Weld;
	TGroupBox *GroupBox_AddLimit;
	TLabel *Label_width;
	TLabel *Label_height;
	TLabel *Label1;
	TEdit *Edit_width;
	TEdit *Edit_height;
	TGroupBox *GroupBox3;
	TLabel *Label_strela;
	TLabel *Label2;
	TEdit *Edit_strela;
	TComboBox *ComboBox_Delta_lim;
	TTabSheet *TabSheet_Part;
	TLabel *Label_GridLen;
	TLabel *Label_step_prim;
	TStringGrid *StringGrid_Length;
	TTabSheet *TabSheet_sect_prof;
	TLabel *Label_mass;
	TLabel *Label_conditions;
	TLabel *Label_add_conditions;
	TLabel *Label_edge;
	TTabSheet *TabSheet_KI;
	TPageControl *PageControl_KI;
	TTabSheet *TabSheet_KI_CT;
	TRichEdit *RichEdit_KI_CT;
	TListBox *ListBox_KI_CT;
	TTabSheet *TabSheet_KI_CC;
	TRichEdit *RichEdit_KI_CC;
	TListBox *ListBox_KI_CC;
	TTabSheet *TabSheet_KI_CB;
	TRichEdit *RichEdit_KI_CB;
	TListBox *ListBox_KI_CB;
	TTabSheet *TabSheet_KI_B;
	TRichEdit *RichEdit_KI_B;
	TListBox *ListBox_KI_B;
	TTabSheet *TabSheet_KI_TB;
	TRichEdit *RichEdit_KI_TB;
	TListBox *ListBox_KI_TB;
	TTabSheet *TabSheet_Weld;
	TGroupBox *GroupBox9;
	TLabel *Label_min_bpol;
	TLabel *Label_max_bpol;
	TLabel *Label_min_tpol;
	TLabel *Label_max_tpol;
	TLabel *Label_min_tsten;
	TLabel *Label_max_tsten;
	TLabel *Label_min_hsten;
	TEdit *Edit_min_tpol;
	TEdit *Edit_max_tpol;
	TEdit *Edit_min_tsten;
	TEdit *Edit_max_tsten;
	TEdit *Edit_min_bpol;
	TEdit *Edit_max_bpol;
	TEdit *Edit_min_hsten;
	TGroupBox *GroupBox10;
	TLabel *Label_h;
	TLabel *Label12;
	TEdit *Edit_round_h;
	TEdit *Edit_round_width;
	TRadioGroup *RadioGroup_sort;
	TCheckBox *CheckBox_ind_minimax;
	TLabel *Label_mass_weld;
	TLabel *Label_max_hsten;
	TEdit *Edit_max_hsten;
	TRadioButton *RadioButtonPerfor;
	TTabSheet *TabSheetPerfor;
	TLabel *Label_attit;
	TComboBox *ComboBox_attit;
	TLabel *Label_alfa;
	TEdit *Edit_alfa;
	TImage *Image_perfor;
	TImage *Image_Balka;
	TMenuItem *NMRUSeparator;
	TMenuItem *NExit;
	TMenuItem *NMRU1;
	TMenuItem *NMRU3;
	TMenuItem *NMRU2;
	TMenuItem *NMRU5;
	TMenuItem *NMRU4;
	TMenuItem *N2;
	TComboBox *ComboBox_Alg;
	TLabel *Label13;
	TGroupBox *GroupBox_Set_1;
	TLabeledEdit *LabeledEdit_lambda0;
	TLabel *Label11;
	TLabel *Label9;
	TLabel *Label7;
	TLabel *Label3;
	TLabel *Label_delta;
	TCheckBox *CheckBox_gib;
	TEdit *Edit_d_f;
	TEdit *Edit_d_w;
	TEdit *Edit_d_lambda;
	TCheckBox *CheckBox_equWidth;
	TRadioGroup *RadioGroup_SimmSect;
	TCheckBox *CheckBox_Draft;
	TBitBtn *BitBtn1;
	TBitBtn *BitBtn2;
	TTabSheet *TabSheet_KonstrParam;
	TLabel *Label_koeff_uslovij;
	TLabel *Label_gamma_n;
	TComboBox *ComboBox_gamma_c;
	TBitBtn *BitBtn_Advance_gamma_c;
	TComboBox *ComboBox_gamma_n;
	TBitBtn *BitBtn_Advance_gamma_n;
	//TDraw_RSU_Frame *Draw_RSU_Frame1;
	TBitBtn *BitBtnAddLimit;
	TRadioGroup *RadioGroup_gruppa;
	TGroupBox *GroupBox1;
	TGroupBox *GroupBox_Compression;
	TLabel *Label5;
	TLabel *Label4;
	TBitBtn *BitBtn_flex_tens;
	TEdit *Edit1;
	TEdit *Edit2;
	TGroupBox *GroupBox_Tension;
	TBitBtn *BitBtn_flex_comp;
	TEdit *Edit_Tens;
	TGroupBox *GroupBox_bend;
	TRadioGroup *RadioGroup_class;
	TBitBtn *BitBtn4;
	TCheckBox *CheckBox_razrez;
	TLabeledEdit *LabeledEdit_a;
	TMenuItem *N3;
	TMenuItem *NUndo;
	TMenuItem *NRedo;
	TMenuItem *N6;
	TToolButton *ToolButton1;
	TToolButton *ToolButtonUndo;
	TToolButton *ToolButtonRedo;
	TMenuItem *NOutReport;
	TCheckBox *CheckBoxAddLimit;
	TRadioGroup *RadioGroup_Loads;
	TTabSheet *TabSheet_BeamModel;
	TGroupBox *GroupBox8;
	TComboBox *ComboBox_G1_Count;
	TLabel *Label_G1_Count;
	TLabel *Label_G1_Load;
	TComboBox *ComboBox_G1_Load;
	TRadioGroup *RadioGroup_Schema_constr;
	TLabel *Label_span;
	TEdit *Edit_span;
	TLabel *Label16;
	TLabel *Label_edge_weld;
	TLabel *Label_edge_param_weld;
	TLabel *Label_edge_step;
	TGroupBox *GroupBox_Edge;
	TCheckBox *CheckBox_edge_choose;
	TRadioGroup *RadioGroup_1_or_2;
	TLabel *Label_edge_param;
	TComboBox *ComboBox_index_Qy;
	TRadioButton *RadioButton_ComposedBeam;
	TComboBox *ComboBox_ComposedBeam;
	TSectSelectCom_ParamFrame *SectSelectCom_ParamFrame1;
	TBalkaLoadFrame *BalkaLoadFrame1;
	TDraw_RSU_Frame *Draw_RSU_Frame1;
	TTabSheet *TabSheet_sect_comp;
	TLabel *Label_mass_c;
	TLabel *Label_conditions_c;
	TLabel *Label_add_conditions_c;
	TLabel *Label_edge_c;
	TLabel *Label_edge_step_c;
	TLabel *Label_edge_param_c;
	TSectSelectCom_ParamFrame *SectSelectCom_ParamFrame2;
	TLabel *Label_thick_comp;
	TEdit *Edit_thick_comp;
	TLabel *Label_width_comp;
	TEdit *Edit_width_comp;
	TGroupBox *GroupBox11;
	TComboBox *ComboBox_Dvutavr_comp;
	TComboBox *ComboBox_Tavr_comp;
	TTabSheet *TabSheet_Kolonn;
	TLabel *Label_kf_comp;
	TEdit *Edit_kf_comp;
	TTabSheet *TabSheet_WeldCheck;
	TRichEdit *RichEdit_KI_Weld;
	TListBox *ListBox_KI_Weld;
	TSect_Param_WeldFrame *Sect_Param_WeldFrame1;
	TStringGrid *StringGrid_Comp;
	TLabel *Label_CompDvut;
	TPageControl *PageControl_Dvutavr;
	TTabSheet *TabSheet_GOST;
	TTabSheet *TabSheet_TU;
	TComboBox *ComboBox_Dvutavr;
	TComboBox *ComboBox_Dvutavr_TU;
	TTabSheet *TabSheet_RackModel;
	TRackLoadFrame *RackLoadFrame1;
	TCheckBox *CheckBox_same_material;
	TPageControl *PageControl_material;
	TTabSheet *TabSheet_profil;
	TLabel *Label_steel;
	TBitBtn *BitBtnMaterial;
	TPanel *Panel_mater;
	TTabSheet *TabSheet_plate;
	TLabel *Label_steel_plate;
	TBitBtn *BitBtnMaterial_plate;
	TPanel *Panel_mater_plate;
	TSpeedButton *SpeedButton_WeldParam;
	TMenuItem *NExample;
	TRadioGroup *RadioGroup_CheckEdge;
	TLabel *Label15;
	TBitBtn *BitBtn_ApplyLen;
	TGroupBox *GroupBox_RSU;
	TStringGrid *StringGrid_RSU;
	TBitBtn *BitBtn_ApplyRSU;
	TBitBtn *BitBtn_Draw;
	TBitBtn *BitBtn_Epur;
	TLabel *Label_message_length;
	TGroupBox *GroupBox_Button_Len;
	TBitBtn *BitBtn3;
	TRadioGroup *RadioGroup_mu;
	TBitBtn *BitBtn_AddElem;
	TBitBtn *BitBtn_DelElem;
	TSpeedButton *SpeedButtonPaste_Length;
	TLabel *Label_Krn;
	TEdit *Edit_Krn;
	TGroupBox *GroupBox_Button_RSU;
	TBitBtn *BitBtn_Add_RSU;
	TBitBtn *BitBtn_Del_RSU;
	TSpeedButton *SpeedButtonPaste_RSU;
		void __fastcall BitBtnExitClick(TObject *Sender);
		void __fastcall BitBtnExecClick(TObject *Sender);
		int __fastcall Executive(int index, int n_thick, double *mass_prof, int *num_prof, TObject *Sender);
        void __fastcall RadioButton_DvutavrClick(TObject *Sender);
        void __fastcall RadioButton_TubeClick(TObject *Sender);
        void __fastcall FormShow(TObject *Sender);
        void __fastcall ComboBox_TypeElemChange(TObject *Sender);
        void __fastcall BitBtn_Advance_gamma_cClick(TObject *Sender);
        void __fastcall BitBtnMaterialClick(TObject *Sender);
        void __fastcall ComboBox_n_partChange(TObject *Sender);
        void __fastcall NOpenClick(TObject *Sender);
        void __fastcall ModelName(char * str0);
        void __fastcall NSaveClick(TObject *Sender);
        void __fastcall Fill_field(TObject *Sender);
        void __fastcall NSaveAsClick(TObject *Sender);
		int __fastcall Check_profil(int num_profil, int num_thick, bool *flag_fall_thick);
        void __fastcall ComboBox_DvutavrChange(TObject *Sender);
		void __fastcall ComboBox_TubeChange(TObject *Sender);
		void __fastcall Show_prof(int num_prof, TObject *Sender);
		void __fastcall RadioGroup_classClick(TObject *Sender);
        void __fastcall ComboBox_gamma_cChange(TObject *Sender);
        void __fastcall BitBtnCheckClick(TObject *Sender);
        void __fastcall SectChecking(int index, int n_thick, TObject *Sender);
       	int __fastcall Read_data(TObject *Sender);
        void __fastcall SectSelectCom_ParamFrame1ComboBox_t_squareChange(
          TObject *Sender);
        void __fastcall SectSelectCom_ParamFrame1ComboBox_t_rectChange(
          TObject *Sender);
        void __fastcall SectSelectCom_ParamFrame1ComboBox_Cyl_tChange(
          TObject *Sender);
		void __fastcall SectSelectCom_ParamFrame1ComboBox_Cyl_DChange(
          TObject *Sender);
        void __fastcall SectSelectCom_ParamFrame1ComboBox_h_b_rectChange(
          TObject *Sender);
        void __fastcall SectSelectCom_ParamFrame1ComboBox_h_b_squareChange(
          TObject *Sender);
        void __fastcall SectSelectCom_ParamFrame1RadioGroupGOST57837Click(
          TObject *Sender);
        void __fastcall ComboBox_RSUChange(TObject *Sender);
        void __fastcall SectSelectCom_ParamFrame1ComboBox_profilChange(
          TObject *Sender);
	void __fastcall BitBtn3Click(TObject *Sender);
	void __fastcall CheckBoxAddLimitClick(TObject *Sender);
	void __fastcall BitBtnAddLimitClick(TObject *Sender);
	void __fastcall BitBtn4Click(TObject *Sender);
	void __fastcall NPreferencesClick(TObject *Sender);
	void __fastcall NOutReportClick(TObject *Sender);
	void __fastcall BitBtn_flex_tensClick(TObject *Sender);
	void __fastcall BitBtn_flex_compClick(TObject *Sender);
	void __fastcall StringGrid_LengthSelectCell(TObject *Sender, int ACol, int ARow,
          bool &CanSelect);
	void __fastcall RadioGroup_muClick(TObject *Sender);
	void __fastcall StringGrid_RSUSelectCell(TObject *Sender, int ACol, int ARow, bool &CanSelect);
	void __fastcall FillTab_RSU();
	// Конфигурация интерфейса задания РСУ
	void __fastcall Config_RSU(int index);
	void __fastcall BitBtn_DrawClick(TObject *Sender);
	void __fastcall NNewClick(TObject *Sender);
	void __fastcall BitBtn_Advance_gamma_nClick(TObject *Sender);
	void __fastcall Draw_prof_ax(int n_profil);
	// Вывести РСУ
	void __fastcall OutRSU(int ARow);
	void __fastcall StringGrid_LengthMySelect(int RowSelect);
	// Выделение строки РСУ
	void __fastcall StringGrid_RSUMySelect(int RowSelect);
	void __fastcall BitBtn_OutWordClick(TObject *Sender);
	void __fastcall NHelpCaptClick(TObject *Sender);
	void __fastcall NRefProgClick(TObject *Sender);
	void __fastcall Edit_NChange(TObject *Sender);
	void __fastcall RadioButton_WeldClick(TObject *Sender);
	void __fastcall CheckBox_gibClick(TObject *Sender);
	void __fastcall Sect_Param_WeldFrame1BitBtn_ApplyClick(TObject *Sender);
    // Вызов одной из программ подбора сечений
	int __fastcall  Alg_Weld(int index_prog, double h0, double lambda0, bool *Check_dvutavr, double *mat_stress,
											   SECT_DVUTAVR *sect_weld,	double *mass_prof);
	int __fastcall Chosen_Weld(double *mass0);
	void __fastcall RadioButtonPerforClick(TObject *Sender);
	// Открыть проект
	void __fastcall OpenProject(TObject *Sender, int index_open);
	void __fastcall Show_prof_perfor(int num_prof, TObject *Sender, double k_att, double alfa, bool flag_draw_size);
	void __fastcall NMRU1Click(TObject *Sender);
	void __fastcall NFileClick(TObject *Sender);
	void __fastcall FormCreate(TObject *Sender);
	void __fastcall FormDestroy(TObject *Sender);
	void __fastcall RadioGroup_SimmSectClick(TObject *Sender);
	void __fastcall ComboBox_AlgChange(TObject *Sender);
	void __fastcall BitBtn1Click(TObject *Sender);
	int __fastcall NewProject(TObject *Sender);
	void __fastcall BitBtn2Click(TObject *Sender);
	void __fastcall Edit_alfaEnter(TObject *Sender);
	void __fastcall Edit_alfaKeyDown(TObject *Sender, WORD &Key, TShiftState Shift);
	void __fastcall GetLoadFromRSU(double *load);
	void __fastcall ComboBox_index_QyChange(TObject *Sender);
	void __fastcall Draw_RSU_Frame1CheckListBox_ShowClick(TObject *Sender);
	void __fastcall Draw_RSU_Frame1CheckBox_CentrClick(TObject *Sender);
	void __fastcall Draw_RSU_Frame1CheckBox_SideClick(TObject *Sender);
	void __fastcall NUndoClick(TObject *Sender);
	void __fastcall NRedoClick(TObject *Sender);
	void __fastcall SectSelectCom_ParamFrame1RadioGroup_orientClick(TObject *Sender);
	void __fastcall RadioGroup_LoadsClick(TObject *Sender);
	void __fastcall BalkaLoadFrame1BitBtn_AddClick(TObject *Sender);
	void __fastcall BalkaLoadFrame1BitBtnDeleteClick(TObject *Sender);
	void __fastcall BalkaLoadFrame1BitBtn_ReplaceClick(TObject *Sender);
	void __fastcall BalkaLoadFrame1Edit_p1Change(TObject *Sender);
	void __fastcall BalkaLoadFrame1Edit_n1Change(TObject *Sender);
	void __fastcall BalkaLoadFrame1CheckBox_LinearClick(TObject *Sender);
	void __fastcall BalkaLoadFrame1CheckBox_Linear_nClick(TObject *Sender);
	void __fastcall BalkaLoadFrame1BitBtn_InsertClick(TObject *Sender);
	void __fastcall BalkaLoadFrame1ListBox1Click(TObject *Sender);
	void __fastcall BalkaLoadFrame1CSpinEditLineWidthChange(TObject *Sender);
	void __fastcall BalkaLoadFrame1PageControl_BoundCondChange(TObject *Sender);
	void __fastcall BalkaLoadFrame1SpeedButton_AddClick(TObject *Sender);
	void __fastcall BalkaLoadFrame1SpeedButtonDeleteClick(TObject *Sender);
	void __fastcall BalkaLoadFrame1ComboBox_num_zagrChange(TObject *Sender);
	void __fastcall BalkaLoadFrame1SpeedButton_ApplyClick(TObject *Sender);
	void __fastcall Draw_RSU_Frame1CheckBox_RealScaleClick(TObject *Sender);
	void __fastcall BalkaLoadFrame1SpeedButtonTablClick(TObject *Sender);
	void __fastcall BalkaLoadFrame1PageControl_LoadChange(TObject *Sender);
	void __fastcall BalkaLoadFrame1ComboBox_type_zagrChange(TObject *Sender);
	void __fastcall BalkaLoadFrame1BitBtn_AddZClick(TObject *Sender);
	void __fastcall BalkaLoadFrame1BitBtn_ReplaceZClick(TObject *Sender);
	void __fastcall BalkaLoadFrame1BitBtn_DeleteZClick(TObject *Sender);
	void __fastcall BalkaLoadFrame1RadioGroup_SupCountClick(TObject *Sender);
	void __fastcall BalkaLoadFrame1SpeedButtonAppStepClick(TObject *Sender);
	void __fastcall BalkaLoadFrame1BitBtn_CreateRSUClick(TObject *Sender);
	void __fastcall GetDataBeam(DATA_BEAM *Data_Beam, DATA_REGION *Data_Region);
// Заполнение данных о балке после чтения из архива
	void __fastcall Fill_field_balka(DATA_BEAM *Data_Beam, DATA_REGION *Data_Region, TObject *Sender);
	void __fastcall BalkaLoadFrame1SpeedButton_CallCombinClick(TObject *Sender);
	void __fastcall BitBtn_EpurClick(TObject *Sender);
	void __fastcall ComboBox_G1_CountChange(TObject *Sender);
	void __fastcall RadioGroup_Schema_constrClick(TObject *Sender);
	void __fastcall Sect_Param_WeldFrame1Edit_b1Exit(TObject *Sender);
	void __fastcall Sect_Param_WeldFrame1Edit_h1Exit(TObject *Sender);
	void __fastcall Sect_Param_WeldFrame1Edit_h_1Exit(TObject *Sender);
	void __fastcall Sect_Param_WeldFrame1Edit_bExit(TObject *Sender);
	void __fastcall Sect_Param_WeldFrame1Edit_b2Exit(TObject *Sender);
	void __fastcall Sect_Param_WeldFrame1Edit_h2Exit(TObject *Sender);
	void __fastcall CheckBox_edge_chooseClick(TObject *Sender);
	void __fastcall RadioButton_ComposedBeamClick(TObject *Sender);
	void __fastcall ComboBox_ComposedBeamChange(TObject *Sender);
	void __fastcall SectSelectCom_ParamFrame2RadioGroupGOST57837Click(TObject *Sender);
	void __fastcall SectSelectCom_ParamFrame2RadioGroup_Tavr_GOSTClick(TObject *Sender);
	void __fastcall SectSelectCom_ParamFrame2Button_ApplyClick(TObject *Sender);
	void __fastcall SectSelectCom_ParamFrame2ComboBox_TavrChange(TObject *Sender);
	void __fastcall SectSelectCom_ParamFrame2ComboBox_profilChange(TObject *Sender);
	void __fastcall Fill_param_comp();
	void __fastcall ComboBox_Dvutavr_compChange(TObject *Sender);
	void __fastcall ComboBox_Tavr_compChange(TObject *Sender);
    void __fastcall InitTemp(TObject *Sender);
	void __fastcall SaveTemp(TObject *Sender);
	void __fastcall OpenTemp(TObject *Sender, int i);
	void __fastcall DeleteTemp(TObject *Sender, int i);
	void __fastcall RemoveTempFile();
	void __fastcall FormCloseQuery(TObject *Sender, bool &CanClose);
	bool __fastcall CheckModified(TObject *Sender);
	bool __fastcall CheckWeld();
	void __fastcall SpeedButton_WeldParamClick(TObject *Sender);
	void __fastcall RadioGroup_Loads_Fill(int numb);
	void __fastcall ComboBox_Dvutavr_TUChange(TObject *Sender);
	void __fastcall PageControl_DvutavrChange(TObject *Sender);
	void __fastcall SectSelectCom_ParamFrame1RadioGroup_TUClick(TObject *Sender);
	void __fastcall SectSelectCom_ParamFrame2PageControl_StandDvutChange(TObject *Sender);
	// Установить кнопку на панели в зависимости от типа профиля
	void __fastcall RadioGroup_Loads_Set(int index_loads, TObject *Sender);
	void __fastcall SectSelectCom_ParamFrame2RadioGroup_TUClick(TObject *Sender);
	void __fastcall SectSelectCom_ParamFrame2RadioGroup_Tavr_TUClick(TObject *Sender);
	void __fastcall SectSelectCom_ParamFrame2PageControl_TavrChange(TObject *Sender);
	// Заполнение данных о стойке для записи в архив
	void __fastcall GetDataRack(DATA_RACK *Data_Rack, DATA_REGION *Data_Region);
	// Заполнение данных о стойке после чтения из архива
	void __fastcall Fill_field_rack(DATA_RACK *Data_Rack, DATA_REGION *Data_Region, TObject *Sender);
	void __fastcall RackLoadFrame1SpeedButton_ApplyClick(TObject *Sender);
	void __fastcall RackLoadFrame1ComboBox_num_zagrChange(TObject *Sender);
	void __fastcall RackLoadFrame1BitBtn_AddClick(TObject *Sender);
	void __fastcall RackLoadFrame1BitBtnDeleteClick(TObject *Sender);
	void __fastcall RackLoadFrame1BitBtn_ReplaceClick(TObject *Sender);
	void __fastcall RackLoadFrame1SpeedButton_AddClick(TObject *Sender);
	void __fastcall RackLoadFrame1SpeedButtonDeleteClick(TObject *Sender);
	void __fastcall RackLoadFrame1BitBtn_AddZClick(TObject *Sender);
	void __fastcall RackLoadFrame1BitBtn_ReplaceZClick(TObject *Sender);
	void __fastcall RackLoadFrame1BitBtn_DeleteZClick(TObject *Sender);
	void __fastcall RackLoadFrame1BitBtn_ApplyConstrClick(TObject *Sender);
	void __fastcall RackLoadFrame1SpeedButtonFix_FreeClick(TObject *Sender);
	void __fastcall RackLoadFrame1SpeedButtonFix_PinClick(TObject *Sender);
	void __fastcall RackLoadFrame1SpeedButtonFix_FixClick(TObject *Sender);
	void __fastcall RackLoadFrame1SpeedButtonPin_PinClick(TObject *Sender);
	void __fastcall RackLoadFrame1SpeedButtonPin_FixClick(TObject *Sender);
	void __fastcall RackLoadFrame1BitBtn_CreateRSUClick(TObject *Sender);
	// Установить метку Госта материала
	void __fastcall Set_Label_steel();
	// Установить метку Госта материала стенки или пластины
	void __fastcall Set_Label_steel_plate();
	void __fastcall CheckBox_same_materialClick(TObject *Sender);
	void __fastcall BitBtnMaterial_plateClick(TObject *Sender);
	void __fastcall NExampleClick(TObject *Sender);
	void __fastcall RadioGroup_CheckEdgeClick(TObject *Sender);
	void __fastcall BitBtn_AddElemClick(TObject *Sender);
	void __fastcall BitBtn_DelElemClick(TObject *Sender);
	void __fastcall ReadRow_Len(TObject *Sender);
	void __fastcall BitBtn_ApplyLenClick(TObject *Sender);
    // Проверка длин элементов
    int __fastcall Check_Len(TObject *Sender);
	void __fastcall BitBtn_Add_RSUClick(TObject *Sender);
	void __fastcall ReadRow_RSU(TObject *Sender);
	//Проверка РСУ
	int __fastcall Check_RSU(TObject *Sender);
	void __fastcall BitBtn_Del_RSUClick(TObject *Sender);
	void __fastcall BitBtn_ApplyRSUClick(TObject *Sender);
	void __fastcall SpeedButtonPaste_RSUClick(TObject *Sender);
	void __fastcall SpeedButtonPaste_LengthClick(TObject *Sender);
	void __fastcall RackLoadFrame1SpeedButtonApp_ConstrClick(TObject *Sender);
	void __fastcall RackLoadFrame1SpeedButton_XY_fixClick(TObject *Sender);
	void __fastcall RackLoadFrame1SpeedButton_XY_fix_pinClick(TObject *Sender);
	void __fastcall RackLoadFrame1SpeedButton_XY_fix_fixClick(TObject *Sender);
	void __fastcall RackLoadFrame1SpeedButton_XY_pin_pinClick(TObject *Sender);
	void __fastcall RackLoadFrame1SpeedButton_XY_pin_fixClick(TObject *Sender);
    void __fastcall SectSelectCom_ParamFrame2Button_ApplyClick0(TObject *Sender);


private:	// User declarations
		int num_file_temp_A;   // первый dump
		int num_file_temp_B;  // последний dump

		int num_file_temp_O;   // номер dump из которого восстановлена модель
		bool flag_temp_new;

		COMMON_SECT com_sect;
		SECT_DVUTAVR sect_weld;
		bool flag_conditions;  // Флаг результата проверки профиля (условия удовлетворяются или нет)
		int NumRow_Len;  // Выбранная строка длин
		int NumRow_RSU;  // Выбранная строка RSU
      	bool flag_check[6];     // Устанавливается в Executive, true - означает, что данаая проверка должна выполняться
		TArrow CoorAx;
		bool flag_message;
		//int index_q_bal;
		bool Flag_fall_mater;
		bool modify_project;
		char Path_gen[PATHLEN];
		bool flag_change_elem;
		bool flag_change_rsu;
		bool flag_checking; // флаг выполнения проверки
		SECT_DVUTAVR sect_weld_plan[100][50];
		double H_beam;   // Высота сечения
		double B_beam;   // Высота сечения
		double I_beam;
		double F_beam;
		int type_sect_tube;  // для труб: SQUARE_TUBE || RECT_TUBE || CIRCULAR_TUBE
		AnsiString Prefix;
		AnsiString Prefix_plate;

public:		// User declarations
		__fastcall TSelectProfilSectForm(TComponent* Owner);
		DATA_SELECT Data_select;
		DATA_BEAM   Data_beam;
		DATA_REGION   Data_region_beam;

		DATA_RACK     Data_rack;
		DATA_REGION   Data_region_rack;
		int Num_prov[6][30];
		int Num_prov_weld[30];
		double Krit[6][30];   // Критерии проверок
		double Nnel_Krit[6][30];   // Номера элементов, в которых достигается максимум критерия
		int n_plane;     // текущий номер элемента
        int N_profil;    // текущий номер профиля стандартного двутавра
		double krit_max;  // максимальный критерий
		int nnel_max;  // элемент, на котором достигается максимальный коитерий
		int check_max; // номер проверки, в которой достигается максимальный критерий
		AnsiString Name_prof;   // Название профиля

		AnsiString FileDir_Name;
		AnsiString ModelFile;
		// Параметры подбора сечения сварного двутавра
		PARAM_CHOSEN_SECT Param_chosen_sect; // = {130, 1.0, 0.0, 0.95, 1000, 1.0, 1.0, 1.0, 10, 1.0, 10};
		COMMON_SECT Last_com_sect;  // Последнее проверенное сечение
		int    Last_type_sect;      // тип последнего проверенного сечения, или 0
		int index_mu;   // индекс текущего способа задания расчетной длины
		WELD_PARAM_UNIT  Weld_balka_unit;
		bool flag_inform_for_plate;

};
//---------------------------------------------------------------------------
extern PACKAGE TSelectProfilSectForm *SelectProfilSectForm;
//---------------------------------------------------------------------------
// получить параметры плиты и шва
void Get_plate_param(int index_composed, COMMON_SECT *com_sect, double *plate_width, double *plate_thick, double *kf_comp);

#endif
