Quelle est la différence entre le nouveau TFileOpenDialog et L'ancien TOpenDialog?
Quelle est la différence entre le nouveau TFileOpenDialog et L'ancien TOpenDialog?
Dans mon ordinateur (Win 7 / DXE), quand j'exécute le code, les dialogues sont identiques.
2 réponses
TOpenDialogencapsule le traditionnelGetOpenFileName. Il fonctionne sur toutes les versions de Windows.TFileOpenDialogenroule le nouveau dialogue COM basé qui a été introduit dans Vista. Il ne fonctionne donc que sur Vista ou plus tard. Il a plus de fonctionnalités que les dialogues plus anciens, notamment l'intégration étroite avec search.
Vista commune de la boîte de dialogue

compatibilité commun boîte de dialogue

GetOpenFileName API va en fait produire les nouveaux dialogues dans la plupart des situations, si appelé correctement, de sorte que vous ne pouvez pas réellement faire la différence. Cela dit, historiquement, l'enveloppe de la VCL pour GetOpenFileName a été implémenté de manière imprécise et a toujours abouti à l'affichage de la boîte de dialogue de compatibilité.
mais qu'est-ce que le nouveau dialogue COM a à offrir alors?
le nouveau dialogue offre une interface de personnalisation beaucoup plus facile à la perte de certains généralité. Si vous utilisez l'ancienne personnalisation basée sur le modèle de dialogue avec GetOpenFileName sur Vista ou plus tard alors les dialogues se dégradent en versions de compatibilité laides qui manquent de fonctionnalité.
l'autre grand avantage des nouveaux dialogues est la possibilité de sélectionner un nombre illimité de fichiers. L'ancien GetOpenFileName l'interface retourne des noms de fichiers multi-select dans un tampon de taille fixe. Cela peut être une véritable limitation et dans mon propre code j'ai dû hacker le code VCL pour rendre ce tampon plus grand pour quand mon application fonctionne sur XP.
TOpenDialog déléguera le travail à TFileOpenDialog si possible. Le test qu'il utilise exige que toutes les conditions suivantes doivent être remplies:
- en cours d'Exécution sur Windows Vista ou une version ultérieure.
Dialogs.UseLatestCommonDialogsla variable booléenne globale est true (la valeur par défaut est true). Cela vous permet de désactiver l'utilisation de la boîte de dialogue new COM si vous choisissez de le faire.- aucun modèle de dialogue n'est spécifié.
OnIncludeItem,OnCloseetOnShowévénements sont toutes non attribuées. On peut supposer que ceux-ci ne peuvent pas être tirés parTFileOpenDialog.
Sommaire
Si vous continuez à utiliser TOpenDialog ensuite, vous disposerez d'un nombre illimité de fichiers en mode multi-sélection. Cependant, si vous souhaitez personnaliser le dialogue, et avoir les nouveaux dialogues plutôt que les vilains dialogues compatibles, alors vous devez faire ce qui suit:
- Sur XP utiliser
TOpenDialoget le modèle de boîte de dialogue méthode. - Sur Vista, et les utiliser plus tard
TFileOpenDialoget implémenter la personnalisation avecIFileDialogCustomize.
TOpenDialog exécute TFileOpenDialog lorsque les conditions suivantes sont remplies:
- le programme tourne sous Vista ou Windows 7
UseLatestCommonDialogsest-vrai (ce qui est la valeur par défaut)- aucun
OnIncludeItem,OnCloseouOnShowles événements sont définis
Donc, tout en utilisant TOpenDialog sur votre système vous pouvez probablement finir par exécuter automatiquement TFileOpenDialog dans la plupart des cas, ce qui explique pourquoi ils cherchent la même chose pour vous.
Remarque: TFileOpenDialog ne retombe pas sur les systèmes Windows plus anciens - il soulève juste une exception. À l'opposé, TOpenDialog fait une sorte de "tomber en avant".