(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
Vous devez vous connecter pour publier un commentaire.
Autant que je sache, TFileSaveDialog déclenche une exception sur XP. Il a besoin de Vista ou vers le haut.
Mise à jour: certains D2010 code pour TFileSaveDialog adapté à partir de votre gestionnaire d'événement....
(Je n'ai pas D2007 sur Vista; utilisation PWideChar au lieu de PChar)
Où la FileSaveDialog est:
Il fonctionne avec D2007. Je viens de changer PChar/string->PWideChar/WideString.(Peut être qu'il fonctionne sur D2009 ou tard, avec des auto de conversion de type.). Merci! p.s. J'ai essayé de changer de l'intérieur "*SaveDialog1*TypeChange", en utilisant comme "si le Parent.ClassName = 'TFileSaveDialogWrapper'".(Il est plus maniable que la commutation classes de boîte de dialogue.) Mais je ne pouvais pas hack wrapper, comme il est défini dans la mise en œuvre de l'article...
OriginalL'auteur François
Vous avez écrit que vous ne pouvait pas pirater le wrapper. J'utilise ce code pour mon XLSX/XLS/ODS exportation bibliothèque de changer l'extension du fichier sur XP et Vista+.
Un inconvénient: Class helpers ne peut pas accéder aux champs privés dans Delphi 2007, de sorte que ce code ne fonctionne que dans Delphi 2009+. Si vous voulez Delphi 2007 compatibilité, utilisez le même hack pour TOpenDialog comme je l'ai utilisé pour TFileDialogWrapper dans cet exemple.
MODIFIER: en fait, si vous définissez la
DefaultExt
propriété, Delphi/soins de Windows sur l'extension de fichier modifier pour vous. Dans ce cas, vous n'avez pas à faire quoi que ce soit dans leOnTypeChange
événement.Je vous remercie pour votre réponse. J'ai juste remarqué. Je ne suis pas en utilisant D2007 plus, je vais lire votre code. Merci.
OriginalL'auteur oxo
Cette fonctionnalité est implémentée dans Delphi, mais désactivé par défaut.
Afin de l'activer, juste à l'entrée de l'extension par défaut dans
DefaultExt
propriété.OriginalL'auteur Jacek Krawczyk