2009-11-23 6 views
7

Abbiamo sviluppato un software. In questo software mostriamo e nascondiamo alcuni controlli su vari schermi di input a seconda delle varie situazioni.Layout modulo fluido in Delphi

Quando abbiamo nascosto un controllo, ciò che accade è che lo spazio occupato da quel controllo è lasciato così com'è e il layout sembra molto brutto a volte esp. negli schermi che hanno un numero maggiore di controlli. Al nostro cliente non piace e ci ha chiesto di fare qualcosa al riguardo.

La mia domanda: c'è qualche modo con il quale siamo in grado di creare layout fluidi in modo che quando un controllo è nascosto il resto dei controlli stessi si regola automaticamente per riempire lo spazio vuoto lasciato dal controllo nascosto e quando il controllo è spettacolo dovrebbero automaticamente lasciare il posto al controllo e adattarsi di conseguenza.

So che possiamo ottenere questo tramite la codifica, ma che richiederà molto codice in ogni schermata per regolare il layout. Sto cercando qualcosa che ridurrà la codifica in ogni schermata dato che ci sono oltre 80 schermi.

Si prega di suggerire un modo che è meno errore pron e può sbarazzarsi di codifica non necessaria in ogni schermata di input.

risposta

8

Penso che l'opzione migliore sia utilizzare un componente che gestisce il layout dei controlli di vcl sul modulo in fase di esecuzione (a seconda delle condizioni definite). Vi consiglio di provare il Devexpress ExpressLayout Control

si possono trovare due video demo qui grandi

alt text

È possibile controllare questi features

Gestione automatica - I gruppi di controllo e i singoli elementi di controllo vengono gestiti automaticamente dal controllo layout. Non ti preoccupi mai del posizionamento pixel per pixel.

Form dimensionamento automatico - Il modulo può essere ridimensionato automaticamente per adattarsi al meglio ai suoi contenuti.

Ciao.

+0

Questo componente ci permetterà di avere il nostro layout di schermo che ci limiterà nella creazione dei nostri layout? –

+0

Dopo aver esaminato i dettagli di ExpressLayout, sembra essere una sorta di interfaccia per consentire agli utenti finali di personalizzare il layout secondo le proprie esigenze. Questo non è quello di cui ho bisogno. Gli utenti finali non saranno in grado di modificare nulla. Il layout dovrebbe adattarsi automaticamente quando qualsiasi controllo è nascosto o mostrato. –

+2

@Yogi Yang 007, questo componente consente agli utenti finali di personalizzare il layout, che è corretto, ma questa non è l'unica caratteristica di questo controllo, né il motivo per cui lo consiglio. – RRUZ

1

Che tipo di controlli nascondete dinamicamente e cosa intendete con lo spazio di riempimento automatico?

Non so se sia così semplice: posizionare i controlli sui pannelli e utilizzare allineare alTop/alClient/alBottom. Quando si nasconde un pannello, tutti gli altri pannelli si sposteranno automaticamente verso l'alto. Un problema però: se vuoi mostrare di nuovo un pannello, l'ordine dei pannelli a volte può essere rovinato ... Può essere risolto impostando manualmente .Top proprietà, o "nascondi" impostando .Altezza: = 1;

+0

Questo è ciò che il pannello di flusso gestisce meglio di un pannello normale con i bambini topaligned. ;-) – Vegar

+1

Sì, sei vero, ma il flowpanel è D2007 +? Non sappiamo quale versione di Delphi sta utilizzando ... –

+0

Stiamo utilizzando Delphi 6 e 2006. Non sono stati aggiornati a nessun'altra versione e non prevediamo di farlo nel prossimo futuro. –

3

Ora, non sono sicuro di quanto sia complesso il layout, ma suppongo che sia possibile utilizzare TFlowPanel e/o TGridPanel per questo. Flowpanel ha una buona gestione dei componenti che cambiano la visibilità. Non sono sicuro di quanto bene il pannello di griglia gestisca lo stesso ...

+0

Il software è per i medici. Contiene molti controlli di input alcuni schermi sono molto complicati dove i controlli sono mostrati e nascosti in base a varie selezioni nella parte superiore dello schermo così come i diritti dell'utente. –

+3

Vorrei andare per il pannello di flusso. Prova a raggruppare i componenti correlati in pannelli o frame e posiziona questo pannello in un pannello di flusso insieme agli altri pannelli. Quando ora nascondi un pannello, l'altro pannello utilizzerà lo spazio disponibile. GridPanel potrebbe essere limitato per questo uso. – Vegar

+0

Grazie per il tuo suggerimento. Lo esaminerò. –

0

Quello che farei con un layout complesso è in realtà diviso in più schede. Questo ha due vantaggi.Semplifica il layout del modulo e consente di mostrare e nascondere intere schede a seconda delle scelte effettuate in altre schede.

0

Raize Components dispone di un componente dell'interfaccia utente TRzFlowPanel. Fa esattamente quello che stai cercando.

Utilizzare TRzFlowPanel per inserire un pannello di flusso vuoto su un modulo. La principale differenza tra un pannello tradizionale e un pannello di flusso è il modo in cui vengono posizionati i controlli. Con un pannello tradizionale, si posiziona un controllo (come un pulsante) in una posizione specifica. Puoi spostare liberamente quel controllo in qualsiasi posizione all'interno del pannello usando il mouse. In un pannello di flusso, ciascun controllo viene posizionato in una posizione specifica, indipendentemente da dove lo si posiziona con il mouse. La posizione automatica è controllata dalla proprietà FlowStyle. Ad esempio, utilizzando la proprietà FlowStyle predefinita di LeftRightTopBottom, il primo controllo che si aggiunge al pannello di flusso si aggancia all'angolo in alto a sinistra. Il secondo controllo che si aggiunge agli snap accanto al primo controllo e così via.