The standard file dialog initialy shows the files in the LIST (small icon) style, and there is no documented way to change this behavior. So, if user wants to see the file list in another style, she/he should change it manually by selecting the desired view style form the provided popup menu.
Here is a workaround for this limitation to select the reasonable view style for a file dialog.
- Code: Select all
type
TFileViewStyle = (fvsIcons, fvsList, fvsDetails, fvsThumbnails, fvsTiles);
function SetFileDialogViewStyle(Handle: THandle; ViewStyle: TFileViewStyle): Boolean;
const
CommandIDs: array[TFileViewStyle] of WORD = ($7029, $702B, $702C, $702D, $702E);
var
NotifyWnd: THandle;
begin
Result := False;
NotifyWnd := FindWindowEx(GetParent(Handle), 0, 'SHELLDLL_DefView', nil);
if NotifyWnd <> 0 then
begin
SendMessage(NotifyWnd, WM_COMMAND, CommandIDs[ViewStyle], 0);
Result := True;
end;
end;
Each time the file dialog opens, the above function should be called to set the desired view style. The OnShow event of the file dialogs seems to be the right place for this purpose, however at that time the list is not created yet and the function fails.
When the file list is created, the dialog raises two events: OnFolderChange and OnSelectionChange events. We can use one of these events for our purpose. However, we have to consider that the function should be called just once for each show.
Here is a sample usage of the introduced function:
- Code: Select all
procedure TForm1.Button1Click(Sender: TObject);
begin
OpenDialog1.Tag := 0;
OpenDialog1.Execute;
end;
procedure TForm1.OpenDialog1FolderChange(Sender: TObject);
begin
if OpenDialog1.Tag = 0 then
begin
SetFileDialogViewStyle(OpenDialog1.Handle, fvsIcons)
OpenDialog1.Tag := 1;
end;
end;
Cheers,
Kambiz