Atunci când proiectați formulare în Delphi, este adesea util să scrieți codul astfel încât aplicația dvs. (formularele și toate obiectele) să arate în esență la fel, indiferent de rezoluția ecranului..
Primul lucru pe care doriți să-l rețineți din timp în faza de proiectare a formularului este dacă veți permite să fie scalat sau nu formularul. Avantajul de a nu face scalare este că nimic nu se schimbă la timpul de execuție. Dezavantajul de a nu scalare este că la runtime nu se schimbă nimic (formularul dvs. poate fi mult prea mic sau prea mare pentru a fi citit pe unele sisteme dacă nu este scalat).
Dacă nu aveți de gând să scalați formularul, setați scalate la Fals. În caz contrar, setați proprietatea pe True. De asemenea, setează Autoscroll to False: opusul ar însemna să nu schimbi dimensiunea cadrului formei la timpul de execuție, ceea ce nu arată bine când conținutul formularului do schimba marimea.
Setați fontul formularului la un font TrueType scalabil, cum ar fi Arial. Doar Arial vă va oferi un font într-un pixel de înălțimea dorită. Dacă fontul folosit într-o aplicație nu este instalat pe computerul țintă, Windows va selecta un font alternativ din aceeași familie de fonturi pe care să îl folosești în loc.
Setați formularul Poziţie proprietate pentru altceva decât poDesigned, care lasă forma în care ai lăsat-o la momentul proiectării. Acest lucru se termină de obicei spre stânga pe un ecran de 1280x1024 și complet pe ecranul 640x480.
Nu faceți controale de aglomerare pentru a lăsa formularul să depășească cel puțin 4 pixeli între controale, astfel încât o schimbare de un pixel în locațiile de graniță (datorită scalării) să nu apară ca fiind suprapuneri de control.
Pentru etichetele cu o singură linie care sunt alLeft sau alright aliniat, setat autosize la Adevărat. În caz contrar, setați autosize la Fals.
Asigurați-vă că există suficient spațiu necompletat într-o componentă de etichetă pentru a permite modificarea lățimii fontului - un spațiu gol care este de 25% din lungimea lungimii curente a șirului este puțin prea sigur, dar sigur. Veți avea nevoie de cel puțin 30% spațiu de expansiune pentru etichetele cu șiruri dacă intenționați să traduceți aplicația în alte limbi. Dacă autosize este fals, asigurați-vă că setați efectiv lățimea etichetei. Dacă autosize este adevărat, asigurați-vă că există suficient spațiu pentru ca eticheta să crească de unul singur.
În etichetele cu mai multe linii, înfășurate prin cuvinte, lăsați cel puțin o linie de spațiu gol în partea de jos. Veți avea nevoie de acest lucru pentru a surprinde revărsarea atunci când textul se înfășoară diferit atunci când lățimea fontului se schimbă cu scalarea. Nu presupuneți că, deoarece utilizați fonturi mari, nu trebuie să permiteți revărsarea textului, fonturile mari ale altcuiva poate fi mai mare decât a ta!
Aveți grijă să deschideți un proiect în IDE la diferite rezoluții. Formularul este PixelsPerInch proprietatea va fi modificată imediat ce formularul va fi deschis și va fi salvat în DFM dacă salvați proiectul. Cel mai bine este să testați aplicația rulând-o autonom și modificați formularul la o singură rezoluție. Editarea la diferite rezoluții și dimensiuni de fonturi invită drivere de componente și probleme de dimensionare. Asigurați-vă că v-ați setat PixelsPerInch pentru toate formele dvs. la 120. Este implicit la 96, ceea ce provoacă probleme de scalare la o rezoluție mai mică.
Vorbind de derivă de componente, nu revindeți o formă de mai multe ori, la timpul de proiectare sau la rulare. Fiecare redimensionare introduce erori rotunde care se acumulează foarte repede, deoarece coordonatele sunt strict integrale. Deoarece cantitățile fracționate sunt trunchiate în afara originilor și dimensiunilor controlului, cu fiecare redimensionare succesivă, controalele vor părea înflorate spre nord-vest și vor deveni mai mici. Dacă doriți să permiteți utilizatorilor dvs. să revândă din nou formularul de nenumărate ori, începeți cu un formular proaspăt încărcat / creat înainte de fiecare scalare, astfel încât erorile de scalare să nu se acumuleze.
În general, nu este necesar să proiectați formulare la o anumită rezoluție, dar este crucial să revizuiți aspectul lor la 640x480 cu fonturi mari și mici și la o rezoluție înaltă cu fonturi mici și mari, înainte de a lansa aplicația. Aceasta ar trebui să facă parte din lista de verificare a testului de compatibilitate a sistemului obișnuit.
Acordați o atenție deosebită componentelor care sunt, în esență, o singură linie TMemos-lucruri ca TDBLookupCombo. Controlul de editare multi-linie Windows afișează întotdeauna doar linii întregi de text - dacă controlul este prea scurt pentru fontul său, a TMemo nu va arăta nimic deloc (a tEditează va afișa text tăiat). Pentru astfel de componente, este mai bine să faceți câțiva pixeli prea mari decât să fie un pixel prea mici și să nu afișați deloc text.
Rețineți că toate scalările sunt proporționale cu diferența de înălțime a fontului între timpul de execuție și timpul de proiectare, nu rezoluția pixelilor sau dimensiunea ecranului. Amintiți-vă, de asemenea, că originile controalelor dvs. vor fi schimbate atunci când forma va fi scalată - nu puteți foarte bine să faceți componente mai mari fără să le mutați peste un pic.
După ce știți ce probleme trebuie să țineți cont atunci când faceți scalarea formularelor Delphi pe diferite rezoluții ale ecranului, sunteți gata pentru unele codări.
Când lucrați cu Delphi versiunea 4 sau superioară, mai multe proprietăți sunt proiectate pentru a ne ajuta să menținem aspectul și aspectul controalelor pe un formular.
Utilizare Alinia pentru a alinia un control la partea de sus, stânga jos sau dreapta a unei forme sau panou și să rămână acolo, chiar dacă dimensiunea formei, panoul sau componenta care conține controlul se modifică. Atunci când părintele este redimensionat, un control aliniat se redimensionează, astfel încât acesta să se întindă în partea superioară, inferioară, stângă sau marginea dreaptă a părintelui.
Utilizare Constrângerile pentru a specifica lățimea minimă și maximă și înălțimea controlului. Când constrângerile conțin valori maxime sau minime, controlul nu poate fi redimensionat pentru a încălca aceste constrângeri.
Utilizare ancore pentru a se asigura că un control își menține poziția actuală în raport cu o margine a părintelui său, chiar dacă părintele este redimensionat. Când părintele său este redimensionat, controlul își menține poziția în raport cu marginile la care este ancorat. Dacă un control este ancorat la marginile opuse ale părintelui său, controlul se întinde atunci când părintele său este redimensionat.
procedura ScaleForm
(F: TForm; ScreenWidth, ScreenHeight: LongInt);
începe
F. Scalate: = Adevărat;
F.AutoScroll: = Fals;
F. Poziție: = poScreenCenter;
Nume F.Font.Nume: = 'Arial';
dacă (Screen.Width ScreenWidth) începe apoi
F. Înălțime: =
LongInt (F.Height) * LongInt (Screen.Height)
div ScreenHeight;
Lățimea: =
LongInt (F.Width) * LongInt (Screen.Width)
Lățime ecran;
F.ScaleBy (Screen.Width, ScreenWidth);
Sfârșit;
Sfârșit;