Al mostrar un cuadro de diálogo para guardar, quiero enganchar el cambio del tipo de filtro del usuario y cambiar la extensión de archivo automáticamente. (por ejemplo, como la operación "Guardar como" de MSPaint.)(cuadro de diálogo Guardar) ¿Cómo cambiar la extensión de archivo automáticamente en el cambio de filtro de archivos en Vista/Win7?
Con TSaveDialog y estableciendo UseLatestCommonDialogs: = False, Puedo manejar esto con el siguiente código. (Sin soporte más reciente de diálogo común, de 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;
quiero apoyar tanto XP y Vista/7 con Delphi 2007.
¿Debo usar TFileSaveDialog en lugar de TSaveDialog con la envoltura interna? (¿Y tengo que luchar con la programación COM usando IFileDialogControlEvents?)
¿O puedo lograr esto con TFileSaveDialog y sus propiedades estándar solamente? (Mi entorno de desarrollo está todavía en la máquina XP, por lo que nunca he intentado. Lo siento.)
Creo que es tarea muy común, pero no pude encontrar ningún código de ejemplo apoyando Vista/7 ...
Gracias! Pero normalmente creo estos diálogos en tiempo de ejecución, así que pude cambiar tanto TSaveDialog como TFileSaveDialog con la verificación de la versión del SO. – benok
Funciona con D2007. Solo cambio PChar/string-> PWideChar/WideString. (Puede ser que funcione en D2009 o posterior con conversión de tipo automático). ¡Gracias! p.s. Traté de cambiar dentro de "* SaveDialog1 * TypeChange", usando como "si Parent.ClassName = 'TFileSaveDialogWrapper'".(Es más útil que cambiar clases de diálogo). Pero no pude hackear el contenedor, como se define en la sección de implementación ... – benok