| Главная | |
Delphi |
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 Вашего приложения. |
|
|
||
| Copyright (c) Авраменко С. Н. 2008. |