Tuesday, March 22, 2005

Multiple file types in GetFileOpenName

Ever notice how the File Open dialog in some applications (including the PowerBuilder IDE) show multiple file types in a single line in the drop-down list box? Ever wonder how you could do it from PowerBuilder? Well, if you look at the documenation for the OpenFileName structure that is the argument for the native GetOpenFileName function in the Windows API, you'll notice the following statement about it's lpstrFilter attribute:

"To specify multiple filter patterns for a single display string, use a semicolon to separate the patterns (for example, "*.TXT;*.DOC;*.BAK")."

Well, it's not documented, but that works for the filter argument for the PowerScript GetFileOpenName function as well. Try setting the filter to something like:

"Graphic Files (*.bmp;*.gif;*.jpg;*.jpeg),*.bmp;*.gif;*.jpg;*.jpeg"

And you'll see that not only does the dialog show that line in the DDLB, but it also shows all the files that match any of those file types.

GetOpenFileName

Still more useful utilities…

If you're trying to work with external functions in DLL and want to make sure you have the name and case of the function name correct, InspectExe is quite useful for viewing all of the exports from an EXE, DLL or OCX. The utility adds several panes onto the properties dialog in Windows Explorer.

InspectExe

If you're having trouble with a DLL, it may be because it has depenencies on other DDLs, and it's actually another DLL that is actually causing the problem. A real useful utility for resolving that is Dependency Walker. It adds a menu item to the right mouse popup menu in Windows Explorer that allows you to launch the program to process the selected DLL.

DependencyWalker1

DependencyWalker2