Ved design formularer i Delphi, er det ofte nyttigt at skrive koden, så din applikation (formularer og alle objekter) i det væsentlige ser ens ud, uanset hvad skærmopløsningen er.
Den første ting, du vil huske tidligt i formdesignstadiet, er, om du vil tillade, at formen skaleres eller ej. Fordelen ved ikke at skalere er, at intet ændrer sig ved kørsel. Ulempen ved ikke at skalere er den intet ændrer sig ved kørsel (din formular kan være alt for lille eller for stor til at læse på nogle systemer, hvis den ikke skaleres).
Hvis du ikke skal skalere formularen, skal du indstille skaleret til falsk. Ellers skal du indstille ejendommen til sandt. Indstil også AutoScroll til falsk: Det modsatte ville betyde at ikke ændre formens rammestørrelse ved kørsel, hvilket ikke ser godt ud, når formens indhold gøre ændre størrelse.
Vigtige overvejelser
Indstil formens skrifttype til en skalerbar TrueType-font, ligesom Arial. Kun Arial giver dig en skrifttype inden for en pixel med den ønskede højde. Hvis skrifttypen, der bruges i et program, ikke er det installeret på målcomputeren, vælger Windows derefter en alternativ skrifttype inden for den samme skrifttypefamilie, der skal bruges i stedet.
Indstil formularens Position ejendom til noget andet end poDesigned, der efterlader formen, hvor du forlod den på designtidspunktet. Dette ender som regel langt væk til venstre på en 1280x1024 skærm - og helt fra 640x480-skærmen.
Mæng ikke kontrol på formularen - lad mindst 4 pixels mellem kontrolelementerne, så en ændring med en pixel i kantplaceringer (på grund af skalering) ikke vises som overlappende kontroller.
For enkeltlinjetiketter, der er alLeft eller i orden justeret, indstillet AutoSize til sandt. Ellers skal du indstille AutoSize til falsk.
Sørg for, at der er tilstrækkelig tom plads i en etiketkomponent til at muliggøre ændringer i fontbredde - et tomt rum, der er 25% af længden af den aktuelle snor displaylængde er lidt for meget, men sikkert. Du har brug for mindst 30% udvidelsesplads til strengetiketter, hvis du planlægger at oversætte din app til andre sprog. Hvis AutoSize er falsk, skal du sørge for, at du faktisk indstiller etiketbredden korrekt. Hvis AutoSize er sandt, sørg for, at der er plads nok til, at etiketten kan vokse alene.
I flere linjer, ordindpakket etiketter, skal du efterlade mindst en linje med tom plads i bunden. Du har brug for dette for at fange overløbet, når teksten ombrydes forskelligt, når fontbredden ændres med skalering. Antag ikke, at fordi du bruger store skrifttyper, behøver du ikke at give mulighed for tekstoverløb - en andens store skrifttyper kan være større end din!
Vær forsigtig med at åbne et projekt i IDE med forskellige opløsninger. Formen er PixelsPerInch egenskab ændres, så snart formularen åbnes, og gemmes i DFM, hvis du gemmer projektet. Det er bedst at teste appen ved at køre den selvstændigt og redigere formularen i kun én opløsning. Redigering med forskellige opløsninger og skrifttypestørrelser inviterer til komponentdrift og størrelse af problemer. Sørg for, at du indstiller din PixelsPerInch for alle dine formularer til 120. Det er standard til 96, hvilket medfører skaleringsproblemer i en lavere opløsning.
Når vi taler om komponentdrift, skal du ikke omskalere en form flere gange, på designtidspunktet eller runtime. Hver omskalering introducerer afrundingsfejl, der akkumuleres meget hurtigt, da koordinaterne er strengt integrerede. Efterhånden som fraktionerede mængder afkortes af kontrolens oprindelse og størrelser med hver på hinanden følgende omskalering, ser kontrollerne ud til at krybe nordvest og blive mindre. Hvis du vil give dine brugere mulighed for at omskalere formularen et antal gange, skal du starte med en frisk indlæst / oprettet form inden hver skalering, så skaleringsfejl ikke ophobes.
Generelt er det ikke nødvendigt at designe formularer i en bestemt opløsning, men det er vigtigt, at du gennemgår deres udseende på 640x480 med store og små skrifttyper og i høj opløsning med små og store skrifttyper, inden de frigives din app. Dette skal være en del af din regelmæssige testliste for systemkompatibilitetstest.
Vær nøje opmærksom på alle komponenter, der i det væsentlige er en-linie TMemos-ting som TDBLookupCombo. Windows multi-line redigeringskontrol viser altid kun hele linjer med tekst - hvis kontrollen er for kort til dens skrifttype, a TMemo viser overhovedet intet (a tRedigér viser klippet tekst). For sådanne komponenter er det bedre at gøre dem et par pixels for store end at være en pixel for lille og slet ikke vise nogen tekst.
Husk, at al skalering er proportional med forskellen i skrifthøjden mellem runtime og designtid, ikke pixelopløsningen eller skærmstørrelsen. Husk også, at oprindelsen af dine kontroller ændres, når formen skaleres - du kan ikke så godt gøre komponenter større uden også at flytte dem over en smule.
Ankre, justering og begrænsninger: Tredjeparts VCL
Når du ved, hvilke problemer du skal huske på, når du skalerer Delphi-formularer i forskellige skærmopløsninger, er du klar til nogle kodning.
Når du arbejder med Delphi version 4 eller nyere, er flere egenskaber designet til at hjælpe os med at bevare udseendet og layoutet af kontroller på en formular.
Brug Juster for at justere en kontrol øverst, nederst til venstre eller højre for en form eller panel og få den til at forblive der, selvom størrelsen på formularen, panelet eller komponenten, der indeholder kontrollen, ændres. Når størrelsen på den overordnede størrelse ændres, ændres også en justeret kontrol, så den fortsætter med at spænde over den øverste, nederste, venstre eller højre kant af overordnet.
Brug Begrænsninger for at specificere minimum og maksimal bredde og højde på kontrollen. Når begrænsninger indeholder maksimale eller minimale værdier, kan kontrollen ikke ændres til at overtræde disse begrænsninger.
Brug Ankre for at sikre, at en kontrol opretholder sin nuværende position i forhold til en kant på sin overordnede, selvom overordnet er ændret på størrelse. Når størrelsen på dens overordnede ændres, holder styringen sin position i forhold til de kanter, som den er forankret til. Hvis en kontrol er forankret til modsatte kanter af dens overordnede, strækker kontrollen sig, når dens overordnede ændres til størrelse.
procedure ScaleForm
(F: TForm; ScreenWidth, ScreenHeight: LongInt);
begynde
F.Scaled: = Sandt;
F.AutoScroll: = Falsk;
F.Position: = poScreenCenter;
F.Font. Navn: = 'Arial';
if (Skærm. Bredde <> Skærmbredde) begynder derefter
F. Højde: =
LongInt (F.Height) * LongInt (skærm. Højde)
div ScreenHeight;
F. Bredde: =
LongInt (F.Width) * LongInt (skærm. Bredde)
div ScreenWidth;
F.ScaleBy (skærm. Bredde, skærmbredde);
ende;
ende;