delphi - full - ¿Cuál es la diferencia entre el nuevo TFileOpenDialog y el viejo TOpenDialog?
descargar delphi 7 (2)
TOpenDialog
ejecuta TFileOpenDialog
cuando se TFileOpenDialog
las siguientes condiciones:
- el programa se ejecuta con Vista o Windows 7
-
UseLatestCommonDialogs
es verdadero (que es el predeterminado) - no se establecen eventos
OnIncludeItem
,OnClose
oOnShow
Por lo tanto, mientras usa TOpenDialog
en su sistema, es probable que termine TFileOpenDialog
ejecutando TFileOpenDialog
en la mayoría de los casos, lo que explica por qué se ven igual para usted.
Observación: TFileOpenDialog
no se TFileOpenDialog
en sistemas Windows anteriores, solo genera una excepción. Por el contrario, TOpenDialog
realiza una especie de "caída hacia adelante".
¿Cuál es la diferencia entre el nuevo TFileOpenDialog y el viejo TOpenDialog?
En mi computadora (Win 7 / DXE), cuando ejecuto el código, los diálogos tienen el mismo aspecto.
-
TOpenDialog
ajusta elGetOpenFileName
tradicional. Funciona en todas las versiones de Windows. -
TFileOpenDialog
envuelve el nuevo diálogo basado en COM que se introdujo en Vista. Por lo tanto, solo funciona en Vista o posterior. Tiene más funcionalidad que los diálogos más antiguos, sobre todo la estrecha integración con la búsqueda.
Cuadro de diálogo común de Vista
Diálogo común de compatibilidad
La API GetOpenFileName
de hecho producirá los nuevos diálogos en la mayoría de las situaciones, si se llama correctamente, por lo que no se puede notar la diferencia. Dicho esto, históricamente el contenedor de VCL para GetOpenFileName
se implementó de forma imprecisa y siempre dio como resultado que se mostrara el cuadro de diálogo de compatibilidad.
Pero, ¿qué ofrece el nuevo diálogo COM entonces?
El nuevo diálogo ofrece una interfaz de personalización mucho más sencilla a la pérdida de cierta generalidad. Si utiliza la plantilla de diálogo antigua basada en la personalización con GetOpenFileName
en Vista o posterior, los diálogos se degradan a versiones de compatibilidad feas que carecen de funcionalidad.
La otra gran ventaja de los nuevos diálogos es la capacidad de seleccionar un número ilimitado de archivos. La antigua interfaz GetOpenFileName
devolvió nombres de archivo multiselección en un búfer de tamaño fijo. Esto puede ser una verdadera limitación y en mi propio código he tenido que hackear el código VCL para hacer que este buffer sea más grande para cuando mi aplicación se ejecute en XP.
TOpenDialog
delegará el trabajo a TFileOpenDialog
si es posible. La prueba que utiliza requiere que todo lo siguiente sea verdadero:
- Se ejecuta en Windows Vista o posterior.
-
Dialogs.UseLatestCommonDialogs
variable booleana globalDialogs.UseLatestCommonDialogs
es verdadera (el valor predeterminado es verdadero). Esto le permite desactivar el uso del nuevo cuadro de diálogo COM si decide hacerlo. - No se especifica ninguna plantilla de diálogo.
-
OnIncludeItem
,OnClose
yOnShow
no están asignados. Presumiblemente, estos no pueden ser disparados porTFileOpenDialog
.
Resumen
Si continúa utilizando TOpenDialog
, obtendrá el beneficio de un número ilimitado de archivos en el modo de selección múltiple. Sin embargo, si desea personalizar el diálogo y tener los nuevos cuadros de diálogo en lugar de los desagradables diálogos de compatibilidad, entonces debe hacer lo siguiente:
- En XP usa
TOpenDialog
y el método de plantilla de diálogo. - En Vista y luego use
TFileOpenDialog
e implemente la personalización conIFileDialogCustomize
.