2016-12-09 4 views
0

ich mit Power auf einem großen Projekt arbeiten, heute habe ich auf einem sehr seltsamen Fehler trat, habe ich ein Fenster, das buttonclicked()-Code ist:Fenster Minimieren nach Öffnen einer Datei mit 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) 

Wenn ich auf Auf dieser Schaltfläche wird die Dateiauswahl angezeigt und ich kann meine Datei normal auswählen. Wenn ich jedoch die Schaltfläche Akzeptieren im Dateidialogfeld drücke, wird das aktuelle Fenster minimiert (auf meiner Anwendung haben wir ein Menü zur Fensterauswahl, damit ich es gut wiederherstellen kann)) Warum passiert dies? Ich dachte, es wäre die GetCurrentDirectoryA(ll_buf, ls_currentD), aber das ist nicht das Problem, ich habe versucht, es zu kommentieren und trotzdem minimiert es das Fenster.

GetCurrentDirectoryA ist wie folgt definiert:

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

Hoffe ihr könnt mir helfen, danke!

+0

Welche Version von PowerBuilder? –

+0

Version 12.5 Windows 7 –

Antwort

0

Es gibt Dinge in Ihrem Code, die mir nicht passen. GetFileOpenName überprüft nicht, ob das Ergebnis korrekt ist. Die ShellExecute-Funktion befindet sich außerhalb von If, wenn die vom Benutzer ausgewählte Datei abgerufen wird. Die ShellExecute-Funktion wendet ein Handle() nicht an. Bitte benutzen Sie die Funktion ShellExecute verwendet die Unicode-Version:

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

Von dem, was ich in Ihrem Code sehen kann ich glaube, das Problem ist in dem, was ShellExecute aufgerufen wird. Bitte versuchen Sie, die Änderungen, die ich Ihnen erwähne, um mehr Kontrolle über mögliche Fehler im Code zu haben und auf diese Weise Ihr Problem zu lokalisieren.

+0

So wird ShellExecute in meinem Code für externe Funktionen deklariert. 'FUNCTION long ShellExecute (ulong ihwnd, Zeichenfolge lpszOp, Zeichenfolge lpszFile, Zeichenfolge lpszParams, Zeichenfolge lpszDir, int wShowCmd) LIBRARY" shell32.dll "ALIAS für" ShellExecuteW "' –