Subroutine RunDial() Use PenDiaL External InDATA, What ! процедуры, связанные с диалогом flag = DLGInit(FORM_1, MyDLG ) ! Инициализация и активизация формы ДИАЛОГА ! FORM_1 - идентификатор ДИАЛОГА, MyDLG - переменная производного типа ДИАЛОГ If(.NOT.flag) Stop "Dialog FORM_1 not fount" If_OK(1:5) = .True. !MAXt =20; if_OK=.True. ! начальные значения (значения по умолчанию) !Write(String,"(i4)") MAXt ! Число полных колебаний ! flag=DLGSet(MyDLG, Edt_tMax, adjustl(String)) ! пишем в Edt_tMax-control строку сдвинутую влево flag=DLGSet(MyDLG, Lab_ERROR, "") !flag=DLGSet(MyDLG, Edt_tMax , MAXt ) ! пишем в Edt_tMax-control число ??? ! flag=DLGSet(DXY, ERROR, "") ! ??? ! Для эл-та Scroll Bar "ScrB_MAXi": flag = DLGSet(MyDLG, ScrB_MAXt, 39, DLG_RANGEMax) flag = DLGSet(MyDLG, ScrB_MAXt, 1, DLG_RANGEmin) flag = DLGSet(MyDLG, ScrB_MAXt, 5, DLG_POSITION) ! Для эл-та Control Box nvalue: flag = DLGGet(MyDLG, ScrB_MAXt, MAXt, DLG_POSITION) Write(String, *) MAXt flag = DLGSet(MyDLG, Lab_MAXt, adjustl(String)) ! запись значения в Lab_LDisk ! Для эл-та Scroll Bar "ScrB_Ld": flag = DLGSet(MyDLG, ScrB_Ld, 27, DLG_RANGEMax) flag = DLGSet(MyDLG, ScrB_Ld, 2, DLG_RANGEmin) flag = DLGSet(MyDLG, ScrB_Ld, 18, DLG_POSITION) ! Для эл-та Control Box nvalue: flag = DLGGet(MyDLG, ScrB_Ld, Ld, DLG_POSITION); Ld = Ld*5 Write(String, *) Ld flag = DLGSet(MyDLG, Lab_Ld, adjustl(String)) ! запись значения в Lab_LDisk ! Для эл-та Scroll Bar "ScrB_FiMax": flag = DLGSet(MyDLG, ScrB_FiMax, 43, DLG_RANGEMax) ! использовать для угла flag = DLGSet(MyDLG, ScrB_FiMax, 1, DLG_RANGEmin) ! использовать для угла flag = DLGSet(MyDLG, ScrB_FiMax, 24, DLG_POSITION) ! использовать для угла flag=DLGSet(MyDLG, Lab_ERROR, " T( 120 град.) = T( 0,0... град.) * 1.37288 ") !!!flag = DLGSet(DXY, n_scroll, 30, DLG_BIGSTEP) ! не использовать !!!flag = DLGSet(DXY, n_scroll, 1, DLG_SMALLSTEP) ! не использовать ! для эл-та Control Box nvalue: flag = DLGGet(MyDLG, ScrB_FiMax, MaxFi, DLG_POSITION); MaxFi = MaxFi*5 Write(String, *) MaxFi flag = DLGSet(MyDLG, Lab_FiMax, adjustl(String)) flag=DLGSetSub(MyDLG, ScrB_MAXt, InDATA) ! свяжем с полем AVALUE процедуру InDATA flag=DLGSetSub(MyDLG, ScrB_Ld, InDATA) ! свяжем с полем n_scroll процедуру InDATA2 flag=DLGSetSub(MyDLG, ScrB_FiMax, InDATA) ! свяжем с полем n_scroll процедуру InDATA2 ! flag=DLGSetSub(MyDLG, Bat_Start, What) flag=DLGSetSub(MyDLG, Bat_Exit, What) ! Status=DLGModal(MyDLG) ! Отображает диалог (форму) на экране !Status= DlgModeless(MyDLG) ! Отображает диалог (форму) на экране End Subroutine RunDial Subroutine InDATA(DLG, C_Name, cbType) ! Передача данных из полей диалога и контроль данных !DEC$ ATTRIBUTES DEFAULT :: InDATA ! без этого работает, но это указано в инструкции Intel Use FiParam Use PenDiaL Type(dialog) DLG Integer(4)::C_Name, cbType, i Character(50)::ErrText !Integer(4) Temp ! предупредить о наличии не используемой переменной i = cbType flag=DLGGet(DLG, C_Name, String) ! читает из C_Name-control в строку !Read(String,*,IOStat=ios) Temp Select Case(C_Name) Case(ScrB_MAXt) flag = DLGGet(MyDLG, ScrB_MAXt, MAXt, DLG_POSITION) Write(String, *) MAXt flag = DLGSet(MyDLG, Lab_MAXt, adjustl(String)) Case(ScrB_Ld) flag = DLGGet(MyDLG, ScrB_Ld, Ld, DLG_POSITION); Ld = Ld*5 Write(String, *) Ld flag = DLGSet(MyDLG, Lab_Ld, adjustl(String)) Case(ScrB_FiMax) flag = DLGGet(MyDLG, ScrB_FiMax, MaxFi, DLG_POSITION); MaxFi = MaxFi*5 Write(String, *) MaxFi flag = DLGSet(MyDLG, Lab_FiMax, adjustl(String)) Write(String(1:3), "(i3)") MaxFi Write(String(4:11), "(F8.6)") wOTfiMax(MaxFi/5) flag=DLGSet(MyDLG, Lab_ERROR, " T( "//String(1:3)//" град.) = T( 0,0... град.) * "//String(4:11) ) End Select If(All(If_OK)) Then flag=DLGSet(MyDLG,Bat_Start,.True.) ! Кнопка активна Else flag=DLGSet(DLG,Bat_Start,.False.) ! Кнопка недоступна End If End Subroutine InDATA Subroutine What(DLG,C_Name, cbType) !DEC$ ATTRIBUTES DEFAULT :: What Use PenDiaL Type(dialog) DLG Integer(4)::C_Name, cbType, i i=cbType If(C_Name==Bat_Start) Then flag=.True. Else flag=.False. End If Call DLGExit(MyDLG) If(C_Name==Bat_Exit) Then Stop EndIf End Subroutine What