Quando si progettano moduli in Delphi, è spesso utile scrivere il codice in modo che l'applicazione (moduli e tutti gli oggetti) appaia sostanzialmente la stessa indipendentemente dalla risoluzione dello schermo.
La prima cosa che si desidera ricordare all'inizio nella fase di progettazione del modulo è se si consentirà il ridimensionamento del modulo o meno. Il vantaggio di non ridimensionare è che non cambia nulla in fase di esecuzione. Lo svantaggio di non ridimensionare è quello nulla cambia durante l'esecuzione (il modulo potrebbe essere troppo piccolo o troppo grande per essere letto su alcuni sistemi se non è ridimensionato).
Se non ridimensionerai il modulo, imposta Scaled falso. Altrimenti, imposta la proprietà su True. Inoltre, impostare Scorrimento automatico su Falso: il contrario significherebbe non modificare le dimensioni del frame del modulo in fase di esecuzione, il che non sembra buono quando il contenuto del modulo fare cambia taglia.
Impostare il carattere del modulo su un carattere TrueType scalabile, come Arial. Solo Arial ti darà un carattere entro un pixel dell'altezza desiderata. Se il carattere utilizzato in un'applicazione non è installato sul computer di destinazione, Windows selezionerà invece un carattere alternativo all'interno della stessa famiglia di caratteri da utilizzare.
Imposta il modulo Posizione proprietà a qualcosa di diverso da poDesigned, che lascia la forma dove l'hai lasciata in fase di progettazione. Questo di solito finisce a sinistra su uno schermo 1280x1024 e completamente fuori dallo schermo 640x480.
Non affollare i controlli sul form-lasciare almeno 4 pixel tra i controlli in modo che una modifica di un pixel nelle posizioni dei bordi (a causa del ridimensionamento) non venga visualizzata come controlli sovrapposti.
Per le etichette a riga singola che sono alLeft o Tutto a posto allineato, impostato Dimensione dell'auto vero. Altrimenti, imposta Dimensione dell'auto falso.
Assicurati che ci sia abbastanza spazio vuoto in un componente etichetta per consentire la modifica della larghezza del carattere - uno spazio vuoto che è il 25% della lunghezza della lunghezza di visualizzazione della stringa corrente è un po 'troppo ma sicuro. Avrai bisogno di almeno il 30% di spazio di espansione per le etichette di stringa se intendi tradurre la tua app in altre lingue. Se Dimensione dell'auto è False, assicurati di impostare correttamente la larghezza dell'etichetta. Se Dimensione dell'auto è vero, assicurati che ci sia spazio sufficiente per far crescere l'etichetta da sola.
Nelle etichette a più righe e a capo inverso, lasciare almeno una riga di spazio vuoto nella parte inferiore. Ne avrai bisogno per catturare l'overflow quando il testo si sposta in modo diverso quando la larghezza del carattere cambia con il ridimensionamento. Non dare per scontato che, poiché stai utilizzando caratteri di grandi dimensioni, non devi consentire l'overflow del testo: i caratteri di grandi dimensioni di qualcun altro potrebbero essere più grandi dei tuoi!
Fare attenzione all'apertura di un progetto nell'IDE con risoluzioni diverse. Il modulo è PixelsPerInch La proprietà verrà modificata non appena viene aperto il modulo e verrà salvata in DFM se si salva il progetto. È meglio testare l'app eseguendola autonomamente e modificare il modulo con una sola risoluzione. La modifica a varie risoluzioni e dimensioni dei caratteri invita alla deriva dei componenti e ai problemi di dimensionamento. Assicurati di impostare il tuo PixelsPerInch per tutti i moduli a 120. L'impostazione predefinita è 96, il che causa problemi di ridimensionamento a una risoluzione inferiore.
Parlando della deriva dei componenti, non ridimensionare un modulo più volte, in fase di progettazione o runtime. Ogni riscalamento introduce errori di arrotondamento che si accumulano molto rapidamente poiché le coordinate sono rigorosamente integrali. Man mano che quantità frazionarie vengono troncate dalle origini e dalle dimensioni del controllo ad ogni successivo ridimensionamento, i controlli sembreranno strisciare a nord-ovest e ridursi. Se si desidera consentire ai propri utenti di ridimensionare il modulo un numero qualsiasi di volte, iniziare con un modulo appena caricato / creato prima di ogni ridimensionamento in modo che gli errori di ridimensionamento non si accumulino.
In generale, non è necessario progettare moduli con una risoluzione particolare, ma è fondamentale rivederne l'aspetto a 640x480 con caratteri grandi e piccoli e ad alta risoluzione con caratteri piccoli e grandi, prima di rilasciare la tua app. Questo dovrebbe far parte del normale elenco di controllo per la verifica della compatibilità del sistema.
Prestare molta attenzione a tutti i componenti che sono essenzialmente a linea singola TMemos-cose come TDBLookupCombo. Il controllo di modifica multilinea di Windows mostra sempre solo intere righe di testo, se il controllo è troppo corto per il suo carattere, a TMemo non mostrerà nulla (a TEdit mostrerà il testo troncato). Per tali componenti, è meglio renderli pochi pixel troppo grandi rispetto a un pixel troppo piccolo e non mostrare alcun testo.
Tenere presente che tutto il ridimensionamento è proporzionale alla differenza dell'altezza del carattere tra tempo di esecuzione e tempo di progettazione, non la risoluzione in pixel o le dimensioni dello schermo. Ricorda anche che le origini dei tuoi controlli verranno modificate quando il modulo viene ridimensionato: non puoi molto più ingrandire i componenti senza spostarli un po '.
Una volta che sai quali problemi tenere a mente quando ridimensiona i moduli Delphi su diverse risoluzioni dello schermo, sei pronto per un po 'di codice.
Quando si lavora con Delphi versione 4 o successiva, diverse proprietà sono progettate per aiutarci a mantenere l'aspetto e il layout dei controlli in un modulo.
Uso Allineare per allineare un controllo in alto, in basso a sinistra o a destra di un modulo o pannello e farlo rimanere lì anche se le dimensioni del modulo, pannello o componente che contiene il controllo, cambiano. Quando viene ridimensionato il genitore, viene ridimensionato anche un controllo allineato in modo che continui a estendersi sul bordo superiore, inferiore, sinistro o destro del genitore.
Uso vincoli per specificare la larghezza e l'altezza minima e massima del controllo. Quando Vincoli contiene valori massimi o minimi, il controllo non può essere ridimensionato per violare tali vincoli.
Uso ancore per garantire che un controllo mantenga la sua posizione corrente rispetto a un bordo del suo genitore, anche se il genitore viene ridimensionato. Quando il suo genitore viene ridimensionato, il controllo mantiene la sua posizione rispetto ai bordi a cui è ancorato. Se un controllo è ancorato ai bordi opposti del suo genitore, il controllo si allunga quando il suo genitore viene ridimensionato.
procedura ScaleForm
(F: TForm; ScreenWidth, ScreenHeight: LongInt);
inizio
F.Scaled: = True;
F.AutoScroll: = False;
Posizione F.: = poScreenCenter;
F.Font.Name: = 'Arial';
if (Screen.Width ScreenWidth) quindi inizia
F.Height: =
LongInt (F.Height) * LongInt (Screen.Height)
div ScreenHeight;
F.Width: =
LongInt (F.Width) * LongInt (Screen.Width)
div ScreenWidth;
F.ScaleBy (Screen.Width, ScreenWidth);
fine;
fine;