Mega Code Archive

 
Categories / Delphi / Forms
 

Changing folder in OpenSave dialogs

Title: Changing folder in Open/Save dialogs Question: It is possible to specify initial folder in Open/Save dialogs. However sometimes it is necessary to change current folder, for example, in responce to change of filter. Answer: Windows doesn't offer a way to change current dialog. However there is a very handy approach to this problem - imitate user actions. Below is the sample code of how the folder is changed when filter is changed. procedure SaveDialogTypeChange is a handler for OnTypeChange event. Depending on the type different folders are selected. This piece of code saves the value of file name edit box, puts a new folder name there, then imitates click of OK button and then restores contents of the edit box. procedure TMainForm.SaveDialogTypeChange(Sender: TObject); var S, S1 : string; EditHandle : THandle; startp, endp : DWORD; begin s := ''; if SaveDialog.FilterIndex = 2 then begin s := 'c:\program files'; end else if SaveDialog.FilterIndex = 3 then begin s := 'd:\program files'; end; if s '' then begin EditHandle := GetDlgItem(GetParent(SaveDialog.Handle), edt1); if EditHandle 0 then begin SetLength(S1, GetWindowTextLength(EditHandle) + 1); GetWindowText(EditHandle, PChar(S1), Length(S1)); SetLength(S1, StrLen(PChar(S1))); SendMessage(EditHandle, EM_GETSEL, Integer(@StartP), Integer(@EndP)); SetWindowText(EditHandle, PChar(S)); SendMessage(GetParent(SaveDialog.Handle), WM_COMMAND, 1, GetDlgItem(GetParent(SaveDialog.Handle), IDOK)); if Length(S1) 0 then if S1[Length(S1)] = #10 then Delete(S1, Length(S1), 1); SetWindowText(EditHandle, PChar(S1)); SendMessage(EditHandle, EM_SETSEL, StartP, EndP); end; end; end;