Durante la visualizzazione di una finestra di dialogo di salvataggio, voglio agganciare la modifica del tipo di filtro dell'utente e modificare automaticamente l'estensione del file. (ad esempio l'operazione "Salva con nome" di MSPaint.)(Salva finestra di dialogo) Come cambiare automaticamente l'estensione del file sulla modifica del filtro file in Vista/Win7?
Con TSaveDialog e impostazione UseLatestCommonDialogs: = False, Posso gestirlo tramite il seguente codice. (Senza ultimo supporto di dialogo comune, di cource.)
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;
Voglio sostenere sia XP e Vista/7 con Delphi 2007.
Dovrei usare TFileSaveDialog invece di TSaveDialog con involucro interno? (E devo fare i conti con la programmazione COM usando IFileDialogControlEvents?)
Oppure posso ottenere questo con TFileSaveDialog e sono solo le proprietà standard? (Il mio ambiente di sviluppo è ancora in macchina XP, quindi non ho mai provato. Dispiaciuto.)
Credo che sia compito molto comune, ma non ho trovato alcun codice di esempio sostenendo Vista/7 ...
Grazie! Ma in genere creo queste finestre di dialogo in runtime, così posso passare sia a TSaveDialog che a TFileSaveDialog con il controllo della versione del sistema operativo. – benok
Funziona con D2007. Ho appena cambiato PChar/string-> PWideChar/WideString. (Potrebbe funzionare su D2009 o successivi con la conversione del tipo automatico). Grazie! p.s. Ho provato a passare all'interno di "* SaveDialog1 * TypeChange", usando come "se Parent.ClassName = 'TFileSaveDialogWrapper'".(E 'più maneggevole rispetto al passaggio classi di dialogo.) Ma non ho potuto incidere involucro, come è definito nella sezione di implementazione ... – benok