2009-09-22 16 views
7

Sto sviluppando un'applicazione multi-documento. Attualmente utilizza MDI che è abbastanza conveniente per me (come sviluppatore) e per gli utenti che credo. Tuttavia, c'è una "contro" - non ho trovato una soluzione per rapidamente carica molte finestre figlio (ogni volta che la finestra viene creata e ingrandita per riempire l'area del genitore, c'è una "animazione" di ridimensionamento che prende molto tempo) finora, quindi sto considerando di tornare all'interfaccia a schede (che richiede un po 'più di lavoro, ho bisogno di "incorporare" un modulo al foglio di pagina, dato che ci sono molti "tipi" di moduli disponibili, alcuni per la modifica di documenti di testo, alcuni per altri oggetti) ...Delphi, MDI vs Tab per interfaccia multi-documento

Quindi, qual è la vostra opinione? Dovrei usare MDI o l'interfaccia a schede?

+1

Correlati: [C'è ancora un posto per MDI?] (Http://stackoverflow.com/questions/486020) e [Quale è meglio: bambini MDI o finestre di dialogo non modali?] (Http://stackoverflow.com/ domande/2451728) – voyager

risposta

9

MDI è stato sviluppato di nuovo in Windows 3 giorni (o forse prima?) E non è ben supportato in questi giorni. Se hai bisogno di più documenti con moduli diversi, ti consiglio di utilizzare un'interfaccia a schede. Utilizzare i frame anziché i moduli e creare le nuove schede e posizionare una cornice su di essa, allineato alClient.

+0

Scusa ma penso che tu abbia torto. MDI è stato deprecato da Microsoft alcuni anni fa. Ma Microsoft lo sta usando di nuovo, ad esempio in Office 2007, dove è possibile vedere un classico sistema MDI. –

+6

No, non lo sono.Office 2007 utilizza un framework proprietario e utilizza esattamente ** nessuno ** della funzionalità MDI WinAPI integrata. Può sembrare ++ ++ per essere MDI, ma non lo è. –

+2

Esattamente. Usa DOCKING come JvDocking. Questo MDD "MI PIACE" ma non utilizza MDI formStyle e il codice dell'era Win31, che, a proposito, è bacato. –

11

Per evitare l'animazione ridimensionamento (e quindi il ritardo) di nuove finestre figlio MDI, inviare un messaggio WM_SETREDRAW al genitore di proprietà ClientHandle di TForm prima di creare le vostre finestre figlio, e quindi inviarlo di nuovo quando si è fatto, vale a dire:

+0

va più veloce, ma ... posso ancora vedere l'animazione! : o – migajek

3

Domanda: è importante che gli utenti siano in grado di vedere più di uno dei moduli o dei frame incorporati alla volta? In caso contrario, certamente andare per schede.

Le schede semplificano la navigazione e la visualizzazione di ciò che è disponibile. Ma con PageControl standard puoi vedere solo una scheda alla volta - non c'è "piastrellatura" o "cascata". I problemi iniziano ad esempio quando gli utenti devono trascinare elementi da una scheda all'altra. Può essere fatto, ovviamente, ma non è così conveniente - perché questa volta gli utenti non vedono dove stanno trascinando qualcosa.

Per superare questa limitazione, è necessario esaminare un'interfaccia utente di espansione, che aggiunge complessità, ma potrebbe fornire schede e poterle affiancare.

+0

in realtà ci sono schede comunque. Rappresentano le finestre disponibili. Ogni finestra ha il proprio elemento di tabulazione, ma non è un controllo di pagina, solo una scheda vuota che, una volta attivata, porta in primo piano il modulo allegato. – migajek

+0

@migajek So che questo è un vecchio post, tuttavia è divertente vedere che ho fatto esattamente la stessa cosa in un progetto che ho iniziato su Delphi 1! Funziona ancora su XE2 allo stesso modo: tabs + MDI, tuttavia la prossima versione sto uccidendo il concetto andando ai frame. –

5

Ci sono sicuramente più punti negativi per MDI rispetto a quello che citi. Puoi trovare discussioni su questo argomento in Wikipedia e anche nelle Linee guida dell'interfaccia di Windows. MDI è stato deprecato ora per anni. Microsoft stessa non usa più MDI nel suo formato "standard" per nessuna delle sue grandi applicazioni, spesso fornisce solo un'emulazione MDI insieme ad altri stili dell'interfaccia utente.

Se il programma è per utenti con più schermate sia MDI che un'interfaccia utente basata su schede hanno il problema di limitare le finestre del documento agli interni della finestra padre.

Con una corretta progettazione dell'applicazione non è necessario scegliere tra MDI e interfaccia utente basata su schede. Lascia che i tuoi utenti decidano con quale interfaccia sono più a loro agio e che si adatta meglio al loro stile di lavoro. Consentire più finestre di documenti di livello superiore indipendenti (in una singola istanza dell'applicazione o in più). Può essere facile come creare classi di frame per i tuoi documenti e decidere in fase di runtime se incorporarli in un controllo struttura a schede, in una finestra secondaria MDI o in una finestra di livello superiore.