回 帖 发 新 帖 刷新版面

主题:很奇怪的变量值自己变现象

!****************************************************************************
!
!  FUNCTION: withinplasmaApply ( dlg, id, callbacktype )
!
!  PURPOSE:  Dialog box callback for APPLY button
!
!  COMMENTS:
!
!****************************************************************************

SUBROUTINE withinplasmaApply( dlg, control_name, callbacktype )
!DEC$ ATTRIBUTES DEFAULT :: withinplasmaApply

    USE Boundary
    USE user32
    USE iflogm
    USE kernel32
    USE shell32,ONLY : shellexecute
    

    IMPLICIT NONE

    INCLUDE 'resource.fd' 
 
    TYPE (dialog) dlg
    INTEGER(kind=4) :: control_name, callbacktype, local_callbacktype
     INTEGER(kind=4) :: open_flag
     LOGICAL(kind=4) :: alive, opened
!----------------------定义计算参数----------------------
    CHARACTER(64) :: delta                              !步长,Δx
    CHARACTER(64) :: omigap,muc,omigab                  !等离子体参数
    CHARACTER(64) :: alpha,theta,phi,thetaout,phiout    !入射角和出射角
    CHARACTER(64) :: TimeStop,time_est                  !时间步参数
    CHARACTER(64) :: tao,t0                             !高斯脉冲参数

!----------------------定义临时参数----------------------
    INTEGER(kind=4) :: tmp
    INTEGER(kind=4) :: retint
    LOGICAL(kind=4) :: retlog
    INTEGER(kind=4) :: namelen, strlen
    CHARACTER       :: charTmp
    CHARACTER(10)   :: Version
    CHARACTER(256)  :: mesg
    CHARACTER(256)  :: mesg_title = '提示'C
    CHARACTER(256)  :: string
    CHARACTER(256)  :: path, dir
!--------------------------------------------------------------
    local_callbacktype = callbacktype   !防止编译器提示参数未引用    
    SELECT CASE (control_name)
        CASE (IDC_BREAD)
            call ReadFileData(path, namelen, strlen, open_flag)
            IF(open_flag /= 0)THEN
                retlog = DlgSet(dlg, IDC_EREAD, path) 
                 !------设定当前工作路径------
                retlog = SetCurrentDirectory(path(1:strlen-namelen))
                retlog = DlgSet(dlg, IDC_EPATH, path(1:strlen-namelen))
                 
                OPEN(8,file=path( 1 : strlen - 1 ))
                READ(8,*)Version
                IF(Version /= 'Version2.1')THEN
                    mesg="该文件版本错误,请重新选择文件!"C
                    retint = MessageBox(GetForegroundWindow(),mesg, mesg_title, MB_OK.OR.MB_ICONEXCLAMATION)
                    RETURN
                ENDIF

                READ(8,*)delta
                READ(8,*)Imin,Imax,Jmin,Jmax,Kmin,Kmax
                READ(8,*)Itmin,Itmax,Jtmin,Jtmax,Ktmin,Ktmax
                CLOSE(8)
                
                Icmin=Itmin-5
                Icmax=Itmax+5
                Jcmin=Jtmin-5
                Jcmax=Jtmax+5
                Kcmin=Ktmin-5
                Kcmax=Ktmax+5
                                
                Iomin=Itmin-10
                Iomax=Itmax+10
                Jomin=Jtmin-10
                Jomax=Jtmax+10
                Komin=Ktmin-10
                Komax=Ktmax+10

                !------时间步估算------
                tmp=(Icmax-Icmin)**2+(Jcmax-Jcmin)**2+(Kcmax-Kcmin)**2
                tmp=ANINT(6.0*sqrt(REAL(tmp))/0.5)
                WRITE(string,*)tmp
                retlog = DlgSet(dlg, IDC_EESTI, trim(adjustl(string)))
                !------显示剖分步长-------
                retlog = DlgSet(dlg, IDC_EDELTA, trim(adjustl(delta)))
              END IF
            RETURN
        CASE (IDC_BOBJINF)
            !CALL ChangeBoundaryDlg
            RETURN
        CASE ( IDC_BDRAW )
            retint = ShellExecute(dlg%hwnd, "open", ".\\draw.exe", NULL, NULL, SW_SHOW )
            RETURN
        CASE (IDC_BREADPARA)
            retlog = GetCurrentDirectory(256, dir)
            CALL ReadParameters(dlg,path,open_flag)
            IF(open_flag/=0)THEN
                strLen = Index( path , char(0) )
                open(8,file=path( 1 : strLen - 1 ))
                read(8,*)charTmp
                read(8,*)charTmp
                read(8,*)alpha,theta,phi
                read(8,*)charTmp
                read(8,*)charTmp
                read(8,*)tao,t0
                read(8,*)charTmp
                read(8,*)charTmp
                read(8,*)omigap,omigab,muc
                read(8,*)charTmp
                read(8,*)charTmp
                read(8,*)thetaout,phiout
                read(8,*)charTmp
                read(8,*)charTmp
                read(8,*)TimeStop
                close(8)
                retlog = SetCurrentDirectory(dir)
                !---------更新对话框中的各项参数-----

                !----------高斯脉冲参数---------
                retlog = DLGSET (dlg, IDC_ETAO, trim(adjustl(tao)))
                retlog = DLGSET (dlg, IDC_ETZERO, trim(adjustl(t0)))
                !----------观察角度-------------
                retlog = DLGSET (dlg, IDC_ETHETAOUT, trim(adjustl(thetaout)))
                retlog = DLGSET (dlg, IDC_EPHIOUT, trim(adjustl(phiout)))
                !----------入射角度----------------
                retlog = DLGSET (dlg, IDC_EALPHA, trim(adjustl(alpha)))
                retlog = DLGSET (dlg, IDC_ETHETA, trim(adjustl(theta)))
                retlog = DLGSET (dlg, IDC_EPHI, trim(adjustl(phi)))
                !----------等离子体参数---------------
                retlog = DLGSET (dlg, IDC_EMUC, trim(adjustl(muc)))
                retlog = DLGSET (dlg, IDC_EOMIGAP, trim(adjustl(omigap)))
                retlog = DLGSET (dlg, IDC_EOMIGAB, trim(adjustl(omigab)))
                !----------其余参数----------
                retlog = DLGSET (dlg, IDC_ESETSTEP, trim(adjustl(timestop)))
            ENDIF

            RETURN
        CASE (IDC_BWRIPARA)
            retlog = GetCurrentDirectory(256, dir)
            CALL SaveParameters(dlg,path)
            strLen = Index( path , CHAR(0) )
            OPEN(8,file=path( 1 : strLen - 1 ))
            !----------入射角度----------------
            retlog = DLGGET (dlg, IDC_EALPHA, alpha)
            retlog = DLGGET (dlg, IDC_ETHETA, theta)
            retlog = DLGGET (dlg, IDC_EPHI, phi)
            WRITE(8,*)"----------入射角度参数----------"
            WRITE(8,'(1X,A5,3X,A5,3X,A3)')"alpha","theta","phi"
            WRITE(8,'(1X,A5,3X,A5,3X,A3)')trim(adjustl(alpha)),trim(adjustl(theta)),trim(adjustl(phi))
            !----------高斯脉冲参数---------
            retlog = DLGGET (dlg, IDC_ETAO, tao)
            retlog = DLGGET (dlg, IDC_ETZERO, t0)
            WRITE(8,*)"----------高斯脉冲参数----------"
            WRITE(8,'(1X,A3,3X,A2)')"tao","t0"
            WRITE(8,'(1X,A3,3X,A4)')trim(adjustl(tao)),trim(adjustl(t0))
            !----------等离子体参数---------------
            retlog = DLGGET (dlg, IDC_EOMIGAP, omigap)
            retlog = DLGGET (dlg, IDC_EOMIGAB, omigab)
            retlog = DLGGET (dlg, IDC_EMUC, muc)
            WRITE(8,*)"----------等离子体参数----------"
            WRITE(8,'(1X,A6,3X,A6,3X,A3)')"omigap","omigab","muc"
            WRITE(8,'(1X,A16,3X,A16,3X,A16)')trim(adjustl(omigap)),trim(adjustl(omigab)),trim(adjustl(muc))
            !----------观察角度参数-------------
            retlog = DLGGET (dlg, IDC_ETHETAOUT, thetaout)
            retlog = DLGGET (dlg, IDC_EPHIOUT, phiout)
            WRITE(8,*)"----------观察角度参数----------"
            WRITE(8,'(1X,A8,3X,A6)')"thetaout","phiout"
            WRITE(8,'(1X,A8,3X,A6)')trim(adjustl(thetaout)),trim(adjustl(phiout))
            !----------时间步参数----------
            retlog = DLGGET (dlg, IDC_ESETSTEP, TimeStop)
            WRITE(8,*)"----------时间步参数----------"
            WRITE(8,'(1X,A8)')"TimeStop"
            WRITE(8,'(1X,A8)')trim(adjustl(TimeStop))
            CLOSE(8)
            retlog = SetCurrentDirectory(dir)
            retlog = MessageBox(dlg%hwnd,'数据保存成功!'C, '提示'C,MB_OK)
            RETURN

        CASE (IDC_BEGINCAL)
            OPEN(8,file='parameters.txt')
            !----------边界条件----------------
            WRITE(8,*)"**********连接边界**********"
            WRITE(8,*)Icmin,Icmax,Jcmin,Jcmax,Kcmin,Kcmax
            WRITE(8,*)"**********输出边界**********"
            WRITE(8,*)Iomin,Iomax,Jomin,Jomax,Komin,Komax
            !----------入射角度----------------
            retlog = DLGGET (dlg, IDC_EALPHA, alpha)
            retlog = DLGGET (dlg, IDC_ETHETA, theta)
            retlog = DLGGET (dlg, IDC_EPHI, phi)
            WRITE(8,*)"**********入射角度参数**********"
            WRITE(8,'(1X,A5,3X,A5,3X,A3)')"alpha","theta","phi"
            WRITE(8,'(1X,A5,3X,A5,3X,A3)')trim(adjustl(alpha)),trim(adjustl(theta)),trim(adjustl(phi))
            !----------高斯脉冲参数---------
            retlog = DLGGET (dlg, IDC_ETAO, tao)
            retlog = DLGGET (dlg, IDC_ETZERO, t0)
            WRITE(8,*)"**********高斯脉冲参数**********"
            WRITE(8,'(1X,A3,3X,A2)')"tao","t0"
            WRITE(8,'(1X,A3,3X,A4)')trim(adjustl(tao)),trim(adjustl(t0))
            !----------等离子体参数---------------
            retlog = DLGGET (dlg, IDC_EOMIGAP, omigap)
            retlog = DLGGET (dlg, IDC_EOMIGAB, omigab)
            retlog = DLGGET (dlg, IDC_EMUC, muc)
            WRITE(8,*)"**********等离子体参数**********"
            WRITE(8,'(1X,A6,3X,A6,3X,A3)')"omigap","omigab","muc"
            WRITE(8,'(1X,A16,3X,A16,3X,A16)')trim(adjustl(omigap)),trim(adjustl(omigab)),trim(adjustl(muc))
            !----------观察角度参数-------------
            retlog = DLGGET (dlg, IDC_ETHETAOUT, thetaout)
            retlog = DLGGET (dlg, IDC_EPHIOUT, phiout)
            WRITE(8,*)"**********观察角度参数**********"
            WRITE(8,'(1X,A8,3X,A6)')"thetaout","phiout"
            WRITE(8,'(1X,A8,3X,A6)')trim(adjustl(thetaout)),trim(adjustl(phiout))
            !----------时间步参数----------
            retlog = DLGGET (dlg, IDC_ESETSTEP, TimeStop)
            WRITE(8,*)"**********时间步参数**********"
            WRITE(8,'(1X,A8)')"TimeStop"
            WRITE(8,'(1X,A8)')trim(adjustl(TimeStop))
            CLOSE(8)
            !CALL CalProgressDlg
            RETURN
        CASE (IDM_EXIT)
            CALL PostQuitMessage(0)
    ENDSELECT
  
END SUBROUTINE withinplasmaApply

回复列表 (共5个回复)

沙发

这个是在使用VISUAL FORTRAN编写界面,这个程序时一个回调例程。

这个函数中的变量:
Imin,Imax,Jmin,Jmax,Kmin,Kmax
Itmin,Itmax,Jtmin,Jtmax,Ktmin,Ktmax
Icmin,Icmax,Jcmin,Jcmax,Kcmin,Kcmax
Iomin,Iomax,Jomin,Jomax,Komin,Komax
在从文件读入的时候,参数值正确

但是当我按下CASE (IDC_BEGINCAL)多对应的按钮时,这些变量的值就变的很离奇。完全偏离了原来读入的值。

在程序中的其他地方并没有定义使用这几个变量,并且程序中除此文件中你可以看到的操作之外,并没有任何一处地方对这几个变量进行任何操作。当把这几个变量定义为全局变量的时候问题就消失了。
请问这是怎么回事呢?

板凳

烦请高人指点!

3 楼

因为这个函数是界面响应时独立调用的,每一次调用局部变量的值都不会保留,不过你自己增加的这些变量如果改成MODULE变量,则就会一切正常了:)

4 楼

昨天一夜之间我的店铺都被变现了,怎么回事呀?积累那么久的的资产被谁掠夺了?各位高手,请教一下,谁知道啊?!

5 楼

这是上个月发展的事情至于他的博客点击多半是自己刷出来的详见下文扯掉韩炒炒的小内裤已经很清楚了面对80后长大,90后不睬他的情况韩炒炒为了金钱前段时期不得不不择手段的手段希望能捞则捞还上湖南媚俗台希望露个脸

我来回复

您尚未登录,请登录后再回复。点此登录或注册