代码如下:
  is_tongguo:=false;
  //////////////////////////////
  Frmjbb:=TFrmjbb.create(self);
  Frmjbb.showmodal;
  //创建窗口和显示窗口中改变is_tongguo的值,
  //窗口显示1秒后自动关闭
  ///////////////////////////////
  if is_tongguo then
         zhiwenverify;问题:
 没有完成如下 
 Frmjbb:=TFrmjbb.create(self);
 Frmjbb.showmodal;
 就运行了 if is_tongguo then
          zhiwenverify所以Frmjbb:=TFrmjbb.create(self);
 Frmjbb.showmodal;过程中改变的is_tongguo的值没法反映出来
请问如何解决?

解决方案 »

  1.   

    调用外部程序并等待其结束 
    程序源码 : 
    首先定义以下变量
    var sInfo : TStartupInfo;
    pInfo : TProcessInformation;
    cmdLine : String;
    exitCode : Cardinal; 
    // 下面是调用过程
    cmdLine := 'c:\winnt\notepad.exe';
    FillChar(sInfo,sizeof(sInfo),#0);
    sInfo.cb := SizeOf(sInfo);
    sInfo.dwFlags := STARTF_USESHOWWINDOW;
    sInfo.wShowWindow := SW_NORMAL;if not CreateProcess(nil,pchar(cmdLine),nil,nil,false,CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, sInfo, pInfo) then
    MessageBox(Application.handle,'指定程序启动失败!','错误',MB_OK or MB_ICONSTOP)
    else
    begin
    WaitForSingleObject(pInfo.hProcess,INFINITE);
    GetExitCodeProcess(pInfo.hProcess,exitCode);
    end;程序讲解 :
    最主要是两个Windows API : CreateProcess和WaitForSingleObject. CreateProcess是用来启动进程的函数, 进程启动后, 会填写TProcessInformation这个结构, 而WaitForSingleObject的作用就是等待指定句柄的进程结束或超时. 关于这两个API的参数请参考Win32的说明.