Sfaturi pentru aplicații Delphi cu rezoluție multiplă

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ă nimic nu se schimbă la runtime (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.

Considerații importante

Setați fontul formularului la un font TrueType scalabil, cum ar fi Arial. Numai 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ă, atunci Windows va selecta un font alternativ din aceeași familie de fonturi de utilizat in schimb.

instagram viewer

Setați formularul Poziţie proprietate pentru altceva decât poDesigned, care lasă forma în care ai lăsat-o la momentul proiectării. De obicei, acest lucru se termină spre stânga pe un ecran de 1280x1024 și complet pe ecranul 640x480.

Nu aglomerați controale pe formular - lăsați cel puțin 4 pixeli între controale, astfel încât o schimbare cu un pixel în locațiile de graniță (datorită scalării) să nu apară ca fiind suprapuse controale.

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 gol într-o componentă de etichetă pentru a permite modificarea lățimii fontului - un spațiu gol care este de 25% din lungimea curentului şir lungimea afișajului este puțin prea mare, 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 de text - fonturile mari ale altcuiva pot fi mai mari decât ale voastre!

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ă problemele de derivare a componentelor și dimensiunea. Asigurați-vă că v-ați setat PixelsPerInch pentru toate formele tale până la 120. Este implicit la 96, ceea ce provoacă probleme de scalare la o rezoluție mai mică.

Vorbind despre derivă de componente, nu revindeți o formă de mai multe ori, la momentul proiectării sau 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ă le revizuiți aspect la 640x480 cu fonturi mari și mici, și la o rezoluție mare cu fonturi mici și mari, înainte de eliberare aplicația dvs. 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 rulare și timpul de proiectare, nu rezoluția pixelilor sau dimensiunea ecranului. Amintiți-vă, de asemenea, că originile controalelor dvs. vor fi modificate 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.

Ancore, aliniere și constrângeri: VCL terță parte

După ce știți ce probleme trebuie să țineți cont atunci când scalarea formularelor Delphi pe diferite rezoluții ale ecranului, sunteți gata pentru unii de codificare.

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ă. Când părintele este redimensionat, un control aliniat se redimensionează astfel încât acesta să continue să se întindă de 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 curentă în raport cu o margine a părintelui său, chiar dacă părintele este redimensionat. Atunci 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;
F.Font. Nume: = 'Arial';
dacă (Ecran. Lățime <> Lățime ecran) apoi începe
F. Înălțime: =
LongInt (F.Height) * LongInt (Ecran. Înălţime)
div ScreenHeight;
Lățimea: =
LongInt (F.Width) * LongInt (Ecran. Lăţime)
Lățime ecran;
F.ScaleBy (Ecran. Latime, latime ecran);
Sfârșit;
Sfârșit;