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.

37
demandé sur Everybody_hates_BillTheLizard 2011-06-04 14:47:43

2 réponses

  • TOpenDialog encapsule le traditionnel GetOpenFileName. 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 Vista common dialog

compatibilité commun boîte de dialogue Compatibility common dialog

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 et OnShow événements sont toutes non attribuées. On peut supposer que ceux-ci ne peuvent pas être tirés par TFileOpenDialog.

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 avec IFileDialogCustomize.
29
répondu David Heffernan 2011-07-08 22:27:36

TOpenDialog exécute TFileOpenDialog lorsque les conditions suivantes sont remplies:

  1. le programme tourne sous Vista ou Windows 7
  2. UseLatestCommonDialogs est-vrai (ce qui est la valeur par défaut)
  3. aucun OnIncludeItem,OnClose ou OnShow 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".

46
répondu Uwe Raabe 2011-06-04 12:43:20