使用GetOpenFileName打开文件后最小化窗口

时间:2016-12-09 17:04:07

标签: powerbuilder erp

我正在使用PowerBuilder开展一个大项目,今天我踩到了一个非常奇怪的错误,我有一个buttonclicked()代码为的窗口:

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"

希望你能帮助我,谢谢!

1 个答案:

答案 0 :(得分: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的调用上。请尝试进行我提及的更改,以便更好地控制代码中的可能错误,并以这种方式找到问题。