2009-09-22 8 views
7

Zajmuję się tworzeniem aplikacji z wieloma dokumentami. Obecnie używa MDI, który jest dość wygodny dla mnie (jako programista), a także dla użytkowników, którym wierzę. Jednak istnieje jeden "przeciw" - nie znalazłem rozwiązania do szybko załadować wielu okien podrzędnych (za każdym razem, gdy okno jest tworzone i zmaksymalizowane, aby wypełnić obszar rodziców, istnieje "animacja" zmiany rozmiaru, która bierze dużo czasu), więc zastanawiam się nad przejściem do interfejsu z kartami (co wymaga trochę więcej pracy, muszę "osadzić" formularz na arkuszu strony, ponieważ istnieje wiele "rodzajów" formularzy dostępnych, niektóre do edycji dokumentów tekstowych, niektóre do innych obiektów) ...Delphi, MDI kontra Tabs dla interfejsu wielu dokumentów

Jaka jest Twoja opinia? Czy powinienem używać interfejsu MDI lub interfejsu kart?

+1

Powiązane: [Czy nadal istnieje miejsce na MDI?] (Http://stackoverflow.com/questions/486020) i [Które lepiej: dzieci MDI lub niemodnych dialogi?] (Http://stackoverflow.com/ questions/2451728) – voyager

Odpowiedz

9

MDI został opracowany z powrotem w systemie Windows 3 dni (lub prawdopodobnie wcześniej?) I nie jest obecnie dobrze obsługiwany. Jeśli potrzebujesz wielu dokumentów o różnych formach, polecam używanie interfejsu z kartami. Użyj ramek zamiast formularzy i utwórz nowe karty i umieść na nich ramkę, wyrównując alClient.

+0

Przepraszam, ale myślę, że się mylisz. MDI został przestarzały przez Microsoft kilka lat temu. Ale Microsoft używa go ponownie, na przykład w Office 2007, gdzie można zobaczyć klasyczny system MDI. –

+6

Nie, nie są.Pakiet Office 2007 korzysta z zastrzeżonej struktury i używa dokładnie ** none ** wbudowanej funkcjonalności WinAPI MDI. Może ++ pojawić się ++ jako MDI, ale tak nie jest. –

+2

Dokładnie. Użyj DOCKING jak JvDocking. Ten MDI "LOOKS LIKE", ale nie używa MDI formStyle i kodu ery Win31, który, nawiasem mówiąc, jest błędny. –

11

Aby uniknąć animacji zmiany rozmiaru (a tym samym opóźnienia) nowych okien potomnych MDI, wyślij wiadomość WM_SETREDRAW do nadrzędnej właściwości ClientHandle klienta TForm przed utworzeniem okien potomnych, a następnie wyślij ją ponownie po zakończeniu, tj .:

+0

idzie szybciej, ale ... Nadal widzę animację! : o – migajek

3

Pytanie: czy ważne jest, aby użytkownicy mogli zobaczyć więcej niż jedną z osadzonych form lub klatek na raz? Jeśli nie, z pewnością wybierz zakładki.

Karty ułatwiają poruszanie się i przeglądanie dostępnych opcji. Ale przy standardowej funkcji PageControl można wyświetlić tylko jedną kartę naraz - nie ma "kafelkowania" ani "kaskadowania". Problemy zaczynają się na przykład wtedy, gdy użytkownicy muszą przeciągać rzeczy z jednej karty na drugą. Można to zrobić oczywiście, ale nie jest to wygodne - ponieważ tym razem użytkownicy nie widzą, dokąd coś wlecą.

Aby przezwyciężyć to ograniczenie, trzeba spojrzeć na interfejs użytkownika, który zwiększa złożoność, ale może dawać tabulatory i umożliwiać ich układanie.

+0

tak naprawdę istnieją zakładki. Reprezentują dostępne okna. Każde okno ma swój własny element tabulatora, ale to nie jest kontrola stronicowania, tylko pusta zakładka, która po uaktywnieniu przynosi załączony formularz na wierzch. – migajek

+0

@migajek Wiem, że to stary post, jednak zabawne jest, że zrobiłem dokładnie to samo w projekcie, który zacząłem na Delphi 1! Nadal działa na XE2 w ten sam sposób: tabs + MDI, jednak w następnej wersji zabijam tę koncepcję w ramki. –

5

Z MDI jest zdecydowanie więcej minusów niż ten, który cytujesz. Dyskusje na ten temat można znaleźć w Wikipedii, a nawet w Wytycznych interfejsu systemu Windows. MDI jest od lat przestarzałe. Sam Microsoft nie używa MDI w swojej "standardowej" formie dla żadnej z jego dużych aplikacji, często udostępnia tylko emulację MDI wraz z innymi stylami UI.

Jeśli twój program jest przeznaczony dla użytkowników z wieloma ekranami, zarówno MDI, jak i interfejs oparty na tabulatorach mają problem z ograniczaniem okien dokumentu do wewnętrznych stron okna nadrzędnego.

Przy prawidłowym projekcie aplikacji tak naprawdę nie musisz decydować między MDI a interfejsem opartym na tabulatorach. Pozwól użytkownikom zdecydować, z którym interfejsem najlepiej korzystają, i który najlepiej pasuje do ich stylu pracy. Zezwalaj na wiele niezależnych okien dokumentów najwyższego poziomu (w jednej instancji aplikacji lub w wielu). Może to być tak proste, jak tworzenie klas klatek dla dokumentów i podejmowanie decyzji w czasie wykonywania, czy osadzić je w kontrolce tabulacji, w oknie potomnym MDI, czy w oknie najwyższego poziomu.