2016-12-09 24 views
0

我正在用PowerBuilder一个大的项目,今天我踩到一个很奇怪的错误,我有一个窗口,它buttonclicked()代码:窗口打开后尽量减少文件与GetOpenFileName

String ls_path, ls_nombre, ls_fuente, ls_currentD 
int value 
long ll_buf 
if ib_query then return 1 
//Guardar el directorio actual, debido a que la funcion GetFileOpenName lo cambia 
ll_buf = 100 
ls_currentD = space(ll_buf) 
GetCurrentDirectoryA(ll_buf, ls_currentD) 

CHOOSE CASE dwo.name 
    CASE "b_2" 
     If Object.path_1[row] = '' Or Isnull(Object.path_1[row]) Then 
      value = GetFileOpenName("Archivo", ls_fuente, ls_nombre, "*.*", "Archivos(*.*),*.*",ls_currentD,2)   

      Object.documento_path[row] = ls_nombre 
      Object.archivo[row] = ls_fuente 
     Else   
      ls_fuente = Object.path_1[row] 
      ShellExecute(0, "OPEN", ls_fuente, "", "", 0) 
     End if  
    CASE "b_3" 
     Choose Case wf_message("Aviso","¿Desea eliminar el archivo adjunto?, el acción será irreversible",4) 
      CASE 1 
       ls_path = Object.path_1[row] 
       If FileDelete (ls_path) Then 
        Object.path_1[row] = "" 
        Object.documento_path[row] = "" 
       event ue_guardar() 
       End IF 
      CASE 2 
       Return 
     End Choose 

END CHOOSE 
SetCurrentDirectoryA(ls_currentD) 

当我点击在该按钮上,文件选择显示,我可以正常选择我的文件,但是,当我从文件对话框中按下“接受”按钮时,当前窗口最小化(在我的应用程序中,我们有一个窗口选择菜单,以便我可以恢复它)为什么会发生这种情况?我认为这是GetCurrentDirectoryA(ll_buf, ls_currentD),但这不是问题,我尝试对它进行评论,并仍然将窗口最小化。

GetCurrentDirectoryA的定义是这样的:

FUNCTION ulong GetCurrentDirectoryA (ulong BufferLen, ref String currentdir) Library "Kernel32.dll" ALIAS FOR "GetCurrentDirectoryA;ansi" 

希望你能帮助我,谢谢!

+0

什么版本的PowerBuilder? –

+0

版本12.5 Windows 7 –

回答

0

你的代码中有些东西不适合我。 GetFileOpenName不验证结果是否正确。 ShellExecute函数位于If用户选择的文件所在的位置之外。 ShellExecute函数不应用Handle()。请使用功能的ShellExecute使用Unicode版本:

FUNCTION long ShellExecute (uint ihwnd,string lpszOp,string 
    lpszFile,string lpszParams, string lpszDir,int wShowCmd) 
    LIBRARY "Shell32.dll" ALIAS FOR "ShellExecuteW" 

Example of using ShellExecute

从我可以在你的代码看,我认为这个问题是在什么的ShellExecute被调用。请尝试进行我提到的更改,以便更好地控制代码中可能出现的错误,并且如果以这种方式查找问题,请尝试进行更改。

+0

这就是ShellExecute在我的外部函数代码中声明的方式。 '函数long ShellExecute(ulong ihwnd,字符串lpszOp,字符串lpszFile,字符串lpszParams,字符串lpszDir,int wShowCmd)LIBRARY“shell32.dll”ALIAS for“ShellExecuteW”' –