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
TOpenDialog
encapsule le traditionnelGetOpenFileName
. Il fonctionne sur toutes les versions de Windows.TFileOpenDialog
enroule 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.UseLatestCommonDialogs
la 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
,OnClose
etOnShow
é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
TOpenDialog
et le modèle de boîte de dialogue méthode. - Sur Vista, et les utiliser plus tard
TFileOpenDialog
et implémenter la personnalisation avecIFileDialogCustomize
.
TOpenDialog
exécute TFileOpenDialog
lorsque les conditions suivantes sont remplies:
- le programme tourne sous Vista ou Windows 7
UseLatestCommonDialogs
est-vrai (ce qui est la valeur par défaut)- aucun
OnIncludeItem
,OnClose
ouOnShow
les é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".