8
votes

Delphi, MDI VS onglets pour l'interface multi-documents

Je développe une application multi-documents. Actuellement, il utilise MDI qui est tout à fait pratique pour moi (en tant que développeur) ainsi que pour les utilisateurs que je crois. Cependant, il y a un "contre" - je n'ai pas trouvé de solution à rapidement Charge Beaucoup de fenêtres enfants (chaque fois que la fenêtre est créée et maximisée pour remplir la zone des parents, Il y a une "animation" de redimensionnement qui prend beaucoup de temps) jusqu'à présent, je envisageons donc de passer à l'interface à onglets (ce qui nécessite un peu plus de travail, j'ai besoin de "incorporer" un formulaire à la feuille de page, comme il y a sont de nombreuses "types" de formulaires disponibles, certains pour éditer des documents texte, certains pour d'autres objets) ...

Alors, quelle est votre opinion? Dois-je utiliser une interface MDI ou onglets?


4 Réponses :


10
votes

MDI a été développé dans les fenêtres 3 jours (ou éventuellement plus tôt?) Et n'est pas bien soutenu ces jours-ci. Si vous avez besoin de plusieurs documents avec des formulaires différentes, je vous recommande d'utiliser une interface à onglets. Utilisez des cadres au lieu de formulaires et créez les nouveaux onglets et placez un cadre sur celui-ci, aligné Alclient.


5 commentaires

Désolé mais je pense que tu as tort. MDI a été obsolète par Microsoft il y a quelques années. Mais Microsoft l'utilise à nouveau par exemple dans Office 2007 où vous pouvez voir un système MDI classique.


Non, ils ne sont pas. Office 2007 utilise un cadre propriétaire et utilise exactement Aucune de la fonctionnalité Winapi MDI intégrée. Il peut apparaître ++ ++ pour être MDI, mais ce n'est pas le cas.


Exactement. Utilisez l'amarrage comme JVDocking. Cela "ressemble à" MDI mais n'utilise pas le code Formstyle MDI et le code de l'ère Win31, qui, au fait, est buggy.


@Kenwhite Je ne vous croyais pas dans le cas d'Excel 2007 à l'aide d'un cadre propriétaire non-MDI, puisque Excel vous permet de restaurer des feuilles de calcul et de les déplacer dans leur fenêtre "MIMIENT" équivalente - Chaque tableur a sa propre barre de titre, etc. Tout comme les MDI standard. Mais Spy ++ montre que ce n'est pas une fenêtre MDIclient standard, et une preuve est que le message Sniffer n'a pris aucun message Windows MDI. Personnellement, je déteste ça, car cela m'empêche de déplacer plusieurs feuilles de calcul qui sont ouvertes à des moniteurs différents. Word & PowerPoint Utilisez des interfaces SDI standard et ne pas avoir ce problème.


@Jamesjohnston: Je l'ai enquêté sur moi-même lorsque j'ai entendu parler, car je ne l'ai pas cru non plus, et j'ai trouvé les mêmes informations avec Spy ++ ou Winsight (ne vous souvenez pas à ce moment-là). Je n'aime pas ça aussi. Il y a des moments où je veux que SDI puisse travailler avec des choses côte à côte sur plusieurs moniteurs, et la façon dont Excel est conçue empêche de le faire.



11
votes

Pour éviter l'animation de redimensionnement (et donc le délai) des nouvelles fenêtres enfants MDI, envoyez un message WM_SetReDraw à la propriété client de la clientèle parent avant de créer vos fenêtres enfants, puis de l'envoyer à nouveau lorsque vous avez terminé, c'est-à-dire:

Self.Perform(WM_SETREDRAW, False, 0);
... create child windows as needed ...
Self.Perform(WM_SETREDRAW, True, 0);
Windows.InvalidateRect(Self.ClientHandle, nil, True);
Windows.UpdateWindow(Self.ClientHandle);


1 commentaires

Cela va plus vite, mais ... je peux encore voir l'animation! : o



3
votes

Question: Est-il important que les utilisateurs puissent voir plus d'une de vos formes ou cadres intégrés à la fois? Sinon, passez certainement pour des onglets.

Les onglets facilitent la navigation et voir ce que vous avez disponible. Mais avec pagecontrol standard, vous ne pouvez voir qu'un seul onglet à la fois - il n'y a pas de "carrelage" ou "cascade". Les problèmes commencent par exemple lorsque les utilisateurs doivent faire glisser les choses d'un onglet sur une autre. Bien sûr, cela peut être fait, mais n'est pas aussi pratique - car ce temps, les utilisateurs ne voient pas où ils traînent quelque chose à.

Pour surmonter cette limitation, vous devez regarder une interface utilisateur d'accueil, qui ajoute une complexité, mais pourrait vous donner des onglets ainsi que pouvoir les tuiler.


2 commentaires

En fait, il y a des onglets quand même. Ils représentent des fenêtres disponibles. Chaque fenêtre a son propre élément d'onglets, mais ce n'est pas pagecontrol, juste une onglet vide qui - lorsqu'il est activé - apporte la forme attachée à l'avant.


@MIGAJEK Je sais que c'est l'ancien poste, cependant est drôle de voir que j'ai fait exactement la même chose dans un projet que j'ai commencé sur Delphi 1! Il travaillait toujours sur XE2 de la même manière: Tabs + MDI, mais la prochaine version Je tue ce concept allant à des cadres.



5
votes

Il y a certainement plus de points négatifs à MDI que celui que vous citez. Vous pouvez trouver des discussions à ce sujet dans la Wikipedia et même dans les directives de l'interface Windows. MDI a été obsolète maintenant depuis des années. Microsoft lui-même n'utilise pas de MDI dans sa forme "standard" pour que toutes ses grosses applications, elles fournissent souvent une émulation MDI avec d'autres styles d'interface utilisateur.

Si votre programme est destiné aux utilisateurs des écrans multiples, MDI et une interface utilisateur basée sur les onglets ont le problème de la limitation des fenêtres du document à l'intérieur de la fenêtre mère.

Avec une conception d'applications appropriée, vous n'avez pas vraiment à décider entre UI MDI et UI basé sur l'onglet. Laissez vos utilisateurs décider de l'interface utilisateur les plus à l'aise et qui convient le mieux à leur style de travail. Permettez à plusieurs fenêtres de document de niveau supérieur indépendant (dans une instance d'application ou dans plusieurs) également. Il peut être aussi facile que de créer des classes de trame pour vos documents et de décider au moment de l'exécution, que ce soit pour les intégrer dans une commande d'onglets, dans une fenêtre enfant MDI ou dans une fenêtre de niveau supérieur.


0 commentaires