www.demi-s.narod.ru

Delphi
Статьи:

· Интерфейс

· WinAPI

· Компоненты

· Базы данных

· ShellAPI



WinAPI


Изменение расширения в Save Dialog

Решение этой проблемы состоит в том, чтобы обработать событие OnTypeChange для TSaveDialog и послать сообщение непостредственно диалоговому окну. Сначала назначьте обработчик для события OnTypeChange (вызывается каждый раз, когда пользователь выбирает фильтр в диалоговом окне).

procedure TForm1.SaveDialogTypeChange(Sender:TObject); 
var
  buf: array [0..MAX_PATH] of char;
  S:string;
  od:TSaveDialog;
  H:THandle; 
begin
  // получить указатель на диалог
  od := (Sender as TSaveDialog); 
  // Послать сообщение родителю диалогового окна
  H := GetParent(od.Handle); 
  // get the currently entered filename 
  SendMessage(H, CDM_GETSPEC, MAX_PATH,integer(@buf)); 
  S := buf; 
  // измените расширение 
  case od.FilterIndex of
    1: 
      S := ChangeFileExt(S,'.rtf'); 
    2: 
      S := ChangeFileExt(S,'.html'); 
    3: 
      S := ChangeFileExt(S,'.txt'); 
  end;
  // Измените в настоящее время выбранное имя файла в диалоговом окне 
  SendMessage(H,CDM_SETCONTROLTEXT,edt1,integer(PChar(S))); 
end;

В примере имеется три фильтра для RTF, HTML и TXT, а код измениет расширение на правильное, просто вызывая ChangeFileExt на существующее имя файла. CDM_* константы определены в модуле CommDlg.pas, так что Вы должны добавить его в секцию uses Вашего приложения.
Константа edt1 получена из файла Dlgs.pas.


Hosted by uCoz