(Save Dialog) Wie ändert man Dateierweiterung automatisch bei Dateifilteränderung in Vista / Win7?

8

Beim Anzeigen eines Speicherdialogs möchte ich den Filtertyp ändern und die Dateierweiterung automatisch ändern. (z. B. wie bei MSPaint "Speichern unter".)

Mit TSaveDialog und dem Festlegen von UseLatestCommonDialogs: = False, Ich kann das mit dem folgenden Code umgehen. (Ohne die neueste allgemeine Dialogunterstützung von cource.)

%Vor%

Ich möchte sowohl XP als auch vista / 7 mit Delphi 2007 unterstützen.

Soll ich TFileSaveDialog anstelle von TSaveDialog mit internem Wrapper verwenden? (Und ich habe mit COM-Programmierung zu kämpfen mit IFileDialogControlEvents ?)

Oder kann ich dies nur mit TFileSaveDialog und seinen Standardeigenschaften erreichen? (Meine Entwicklungsumgebung ist immer noch auf XP-Rechner, also habe ich es noch nie versucht. Entschuldigung.)

Ich denke, es ist eine sehr häufige Aufgabe, aber ich konnte keinen Beispielcode finden, der Vista / 7 unterstützt ...

    
benok 27.01.2010, 08:00
quelle

3 Antworten

5

Soweit ich weiß, wird TFileSaveDialog eine Ausnahme auf XP auslösen. Es braucht Vista oder höher.

Aktualisieren : ein D2010-Code für TFileSaveDialog , angepasst von Ihrem Event-Handler ....
(Ich habe D2007 nicht auf Vista; benutze PWideChar anstelle von PChar)

%Vor%

Wo der FileSaveDialog ist:

%Vor%     
François 27.01.2010, 08:35
quelle
4
Du hast geschrieben, dass du den Wrapper nicht hacken kannst. Ich verwende diesen Code für meine XLSX / XLS / ODS-Exportbibliothek, um die Dateierweiterung sowohl unter XP als auch unter Vista + zu ändern.

Ein Nachteil: Klassenhelfer können in Delphi 2007 nicht auf private Felder zugreifen, daher funktioniert dieser Code nur in Delphi 2009+. Wenn Sie die Kompatibilität mit Delphi 2007 wünschen, verwenden Sie den gleichen Hack für den TOpenDialog, den ich in diesem Beispiel für TFileDialogWrapper verwendet habe.

%Vor%

BEARBEITEN : Wenn Sie die DefaultExt -Eigenschaft festlegen, ändert Delphi / Windows die Änderung der Dateierweiterung für Sie. In diesem Fall müssen Sie im OnTypeChange -Ereignis nichts tun.

    
oxo 08.10.2012 20:04
quelle
0

Diese Funktion ist in Delphi implementiert, aber standardmäßig deaktiviert.

Um es zu aktivieren, geben Sie einfach die Standard-Erweiterung in DefaultExt property ein.

    
Jacek Krawczyk 17.08.2016 09:36
quelle