Tips voor Delphi-toepassingen met meerdere resoluties

Bij het ontwerpen van formulieren 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 geschubd 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 je een lettertype binnen een pixel van de gewenste hoogte. Als het lettertype dat in een toepassing wordt gebruikt, niet op de doelcomputer is geïnstalleerd, selecteert Windows een alternatief lettertype binnen dezelfde lettertypefamilie om te gebruiken.

Stel het formulier in Positie eigendom aan iets anders dan poDesigned, die de vorm verlaat waar u hem tijdens het ontwerp hebt achtergelaten. Dit eindigt meestal helemaal naar links op een scherm van 1280x1024 en volledig van het scherm van 640x480.

Laat geen besturingselementen op het formulier overblijven - laat minimaal 4 pixels tussen besturingselementen, zodat een wijziging van één pixel in randlocaties (vanwege schalen) niet wordt weergegeven als overlappende besturingselementen.

Voor labels met één regel alLeft of in orde uitgelijnd, ingesteld Automatische grootte naar True. Stel anders in Automatische grootte naar False.

Zorg ervoor dat er voldoende lege ruimte in een labelcomponent is om wijzigingen in de lettertypebreedte mogelijk te maken - een lege ruimte die 25% van de lengte van de huidige tekenreeksweergavelengte is, 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. De standaardwaarde is 96, wat schaalproblemen met een lagere resolutie veroorzaakt.

Over componentafwijking gesproken, schaal een formulier niet meerdere keren, tijdens het ontwerp of de runtime. 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 wilt dat uw gebruikers het formulier een aantal keer opnieuw kunnen schalen, begint u met een nieuw geladen / gemaakt formulier vóór elke schaal zodat schaalfouten zich niet ophopen.

Over het algemeen is het niet nodig om formulieren met een bepaalde resolutie te ontwerpen, maar het is cruciaal dat u hun uiterlijk bij 640x480 met grote en kleine lettertypen en met een hoge resolutie met kleine en grote lettertypen bekijkt voordat u uw app vrijgeeft. 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 problemen je rekening moet houden bij het schalen van Delphi-formulieren op verschillende schermresoluties, ben je klaar voor wat 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 align 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 constraints om de minimale en maximale breedte en hoogte van het besturingselement op te geven. Wanneer Beperkingen maximum- of minimumwaarden bevat, kan het besturingselement niet worden aangepast 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.Name: = 'Arial';
als (Screen.Width ScreenWidth) begin dan
F.Hoogte: =
LongInt (F.Height) * LongInt (Screen.Height)
div ScreenHeight;
F.Breedte: =
LongInt (F.Width) * LongInt (Screen.Width)
div Schermbreedte;
F.ScaleBy (Screen.Width, ScreenWidth);
einde;
einde;