(Boîte de Dialogue enregistrer) Comment changer l'extension de fichier automatiquement sur le dossier de changement de filtre dans Vista/Win7?

Tout en affichant une boîte de dialogue enregistrer, je veux brancher l'utilisateur du type de filtre à changer et de changer l'extension de fichier automatiquement. (par exemple, comme MSPaint de l'opération "Enregistrer sous".)

Avec TSaveDialog et réglage UseLatestCommonDialogs := False,
Je peux gérer cela par le code suivant. (sans la dernière boîte de dialogue commune de soutien, bien sûr!)

procedure TForm1.SaveDialog1TypeChange(Sender: TObject);
var
  FName, Ext: string;
begin
  with TSaveDialog(Sender) do
  begin
    if DirectoryExists(FileName) then // FileName is Empty
      exit;
    case FilterIndex of
    1: Ext := '.png';
    2: Ext := '.bmp';
    3: Ext := '.jpg';
    end;
    FName := ChangeFileExt(ExtractFileName(FileName), Ext);
    SendMessage(Windows.GetParent(Handle), CDM_SETCONTROLTEXT, 1152, LongInt(PChar(FName)));
  end;
end;

Je veux soutenir à la fois XP et vista/7 avec Delphi 2007.

Dois-je utiliser TFileSaveDialog au lieu de TSaveDialog avec wrapper interne ?
(Et je dois lutter avec COM programmation à l'aide de IFileDialogControlEvents ?)

Ou puis-je réaliser cela avec TFileSaveDialog et c'est la norme que les propriétés ?
(Mon environnement de développement est encore sur la machine XP, donc je n'ai jamais essayé. désolé.)

Je pense que c'est très commun, mais je ne pouvais pas trouver n'importe quel échantillon de code à l'appui Vista/7...

OriginalL'auteur benok | 2010-01-27