Bij het ontwerpen vormen in Delphi, is het vaak handig om de code zo te schrijven dat uw toepassing (formulieren en alle objecten) er in wezen hetzelfde uitziet, ongeacht wat de schermresolutie is.
Het eerste dat u al in het begin van het formulierontwerp wilt onthouden, is of u het formulier wilt schalen of niet. Het voordeel van niet schalen is dat er tijdens runtime niets verandert. Het nadeel van niet schalen is dat er verandert niets tijdens runtime (uw formulier is mogelijk veel te klein of te groot om op sommige systemen te lezen als het niet is geschaald).
Stel in als u het formulier niet wilt schalen Geschaald naar False. Stel anders de eigenschap in op Waar. Stel ook in AutoScroll naar False: het tegenovergestelde zou betekenen dat de framegrootte van het formulier tijdens runtime niet wordt gewijzigd, wat er niet goed uitziet wanneer de inhoud van het formulier Doen verander de grootte.
Belangrijke overwegingen
Stel het lettertype van het formulier in op een schaalbaar TrueType-lettertype, zoals Arial. Alleen Arial geeft u een lettertype binnen een pixel van de gewenste hoogte. Als het lettertype niet in een toepassing wordt gebruikt geïnstalleerd op de doelcomputer, dan selecteert Windows een alternatief lettertype binnen dezelfde lettertypefamilie om te gebruiken in plaats daarvan.
Stel het formulier in Positie eigendom aan iets anders dan poDesigned, die de vorm verlaat waar u deze tijdens het ontwerp hebt achtergelaten. Dit eindigt meestal helemaal links op een scherm van 1280x1024 - en volledig buiten het scherm van 640x480.
Plaats geen besturingselementen op het formulier, laat minimaal 4 pixels tussen de bedieningselementen zodat een wijziging van één pixel in de randlocaties (vanwege schalen) niet wordt weergegeven als overlappende bedieningselementen.
Voor labels met één regel alLeft of goed uitgelijnd, ingesteld Automatische grootte naar True. Stel anders in Automatische grootte naar False.
Zorg ervoor dat er voldoende lege ruimte in een labelcomponent is voor lettertype-breedteveranderingen - een lege ruimte die 25% van de lengte van de huidige is draad de lengte van het scherm is iets te veel maar veilig. U hebt minimaal 30% uitbreidingsruimte nodig voor stringlabels als u van plan bent uw app in andere talen te vertalen. Als Automatische grootte is False, zorg ervoor dat u de labelbreedte correct instelt. Als Automatische grootte is waar, zorg ervoor dat er voldoende ruimte is voor het label om zelfstandig te groeien.
Laat in meerregelige, in tekst verpakte labels ten minste één regel lege ruimte onderaan. Je hebt dit nodig om de overloop op te vangen wanneer de tekst anders loopt als de lettertypebreedte verandert met schalen. Ga er niet vanuit dat, omdat u grote lettertypen gebruikt, u geen rekening hoeft te houden met tekstoverloop - de grote lettertypen van iemand anders kunnen groter zijn dan die van u!
Wees voorzichtig met het openen van een project in de IDE met verschillende resoluties. De formulieren PixelsPerInch eigenschap wordt gewijzigd zodra het formulier wordt geopend en wordt opgeslagen in de DFM als u het project opslaat. Het is het beste om de app te testen door deze zelfstandig uit te voeren en het formulier met slechts één resolutie te bewerken. Bewerken met verschillende resoluties en lettergroottes leidt tot problemen met componentafwijking en grootte. Zorg ervoor dat u uw instelt PixelsPerInch voor al uw formulieren tot 120. Het staat standaard op 96, wat schaalproblemen veroorzaakt bij een lagere resolutie.
Over componentafwijking gesproken, schaal een formulier niet meerdere keren, tijdens het ontwerp of looptijd. Elke schaalaanpassing introduceert afrondingsfouten die zich zeer snel ophopen omdat coördinaten strikt integraal zijn. Naarmate fractionele hoeveelheden worden afgekapt van de oorsprong en afmetingen van het besturingselement bij elke opeenvolgende herschaling, lijken de besturingselementen naar het noordwesten te kruipen en kleiner te worden. Als u uw gebruikers een aantal keren wilt toestaan het formulier opnieuw te schalen, begint u vóór elke schaling met een nieuw geladen / gemaakt formulier, zodat zich geen schaalfouten voordoen.
Over het algemeen is het niet nodig om formulieren met een bepaalde resolutie te ontwerpen, maar het is cruciaal dat u deze bekijkt uiterlijk op 640x480 met grote en kleine lettertypen, en met een hoge resolutie met kleine en grote lettertypen, voordat ze worden vrijgegeven uw app. Dit zou onderdeel moeten zijn van uw reguliere checklist voor systeemcompatibiliteitstests.
Let goed op alle componenten die in wezen uit één regel bestaan TMemos—dingen zoals TDBLookupCombo. Het Windows-besturingselement met meerdere regels geeft altijd alleen hele regels tekst weer - als het besturingselement te kort is voor het lettertype, a TMemo zal helemaal niets laten zien (a TEdit toont afgekorte tekst). Voor dergelijke componenten is het beter om ze een paar pixels te groot te maken dan om een pixel te klein te zijn en helemaal geen tekst weer te geven.
Houd er rekening mee dat alle schaling evenredig is aan het verschil in lettertypehoogte tussen runtime en ontwerptijd, niet de pixelresolutie of schermgrootte. Onthoud ook dat de oorsprong van uw besturingselementen zal worden gewijzigd wanneer het formulier wordt geschaald - u kunt componenten niet heel goed groter maken zonder ze ook een beetje te verplaatsen.
Ankers, uitlijning en beperkingen: VCL van derden
Als je eenmaal weet met welke zaken je rekening moet houden bij het schalen van Delphi-formulieren op verschillende schermresoluties, ben je er klaar voor codering.
Wanneer u met Delphi versie 4 of hoger werkt, zijn verschillende eigenschappen ontworpen om ons te helpen het uiterlijk en de lay-out van besturingselementen op een formulier te behouden.
Gebruik Uitlijnen om een besturingselement uit te lijnen met de bovenkant, linksonder of rechts van een formulier of paneel en het daar te laten staan, zelfs als de grootte van het formulier, paneel of onderdeel dat het besturingselement bevat, verandert. Wanneer het formaat van het bovenliggende item wordt gewijzigd, wordt het formaat van een uitgelijnd besturingselement ook zodanig aangepast dat het de boven-, onder-, linker- of rechterrand van het bovenliggende element blijft overspannen.
Gebruik Beperkingen om de minimale en maximale breedte en hoogte van het besturingselement op te geven. Wanneer Beperkingen maximale of minimale waarden bevat, kan de grootte van het besturingselement niet worden gewijzigd om deze beperkingen te overtreden.
Gebruik Ankers om ervoor te zorgen dat een besturingselement zijn huidige positie ten opzichte van een rand van het bovenliggende element behoudt, zelfs als het formaat van het bovenliggende item wordt gewijzigd. Wanneer het formaat van het bovenliggende item wordt gewijzigd, houdt de besturing zijn positie ten opzichte van de randen waaraan het is verankerd. Als een besturingselement aan tegenovergestelde randen van het bovenliggende element is verankerd, wordt het besturingselement uitgerekt wanneer het formaat van het bovenliggende element wordt gewijzigd.
procedure ScaleForm
(F: TForm; ScreenWidth, ScreenHeight: LongInt);
beginnen
F.Scaled: = Waar;
F.AutoScroll: = False;
F.Positie: = poScreenCenter;
F.Font. Naam: = 'Arial';
if (scherm. Breedte <> Schermbreedte) en begin
F.Hoogte: =
LongInt (F.Height) * LongInt (scherm. Hoogte)
div ScreenHeight;
F.Breedte: =
LongInt (F.Width) * LongInt (scherm. Breedte)
div Schermbreedte;
F.ScaleBy (scherm. Breedte, schermbreedte);
einde;
einde;